working but still confusing fix for ensuring that playlist shared-with data is correc...
[ardour.git] / gtk2_ardour / rc_option_editor.cc
index 4306dc627eba2bfb2c6b855f58306012de41b423..756252f34837ed925d580398ad94f66f9f863a56 100644 (file)
@@ -1823,7 +1823,7 @@ private:
 class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable
 {
        public:
-               MidiPortOptions() {
+               MidiPortOptions() : refill_id (-1) {
 
                        setup_midi_port_view (midi_output_view, false);
                        setup_midi_port_view (midi_input_view, true);
@@ -1853,13 +1853,15 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable
                        midi_output_view.show ();
                        midi_input_view.show ();
 
-                       table.signal_show().connect (sigc::mem_fun (*this, &MidiPortOptions::on_show));
+                       table.signal_map().connect (sigc::mem_fun (*this, &MidiPortOptions::on_map));
+                       table.signal_unmap().connect (sigc::mem_fun (*this, &MidiPortOptions::on_unmap));
                }
 
                void parameter_changed (string const&) {}
                void set_state_from_config() {}
 
-               void on_show () {
+               void on_map () {
+
                        refill ();
 
                        AudioEngine::instance()->PortRegisteredOrUnregistered.connect (connections,
@@ -1876,6 +1878,10 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable
                                        gui_context());
                }
 
+               void on_unmap () {
+                       connections.drop_connections ();
+               }
+
                void refill () {
 
                        if (refill_midi_ports (true, midi_input_view)) {
@@ -1888,6 +1894,8 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable
                        } else {
                                output_label.hide ();
                        }
+
+                       refill_id = -1;
                }
 
        private:
@@ -1901,7 +1909,8 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable
                                add (music_data);
                                add (control_data);
                                add (selection);
-                               add (name);
+                               add (fullname);
+                               add (shortname);
                                add (filler);
                        }
 
@@ -1909,7 +1918,8 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable
                        Gtk::TreeModelColumn<bool> music_data;
                        Gtk::TreeModelColumn<bool> control_data;
                        Gtk::TreeModelColumn<bool> selection;
-                       Gtk::TreeModelColumn<std::string> name;
+                       Gtk::TreeModelColumn<std::string> fullname;
+                       Gtk::TreeModelColumn<std::string> shortname;
                        Gtk::TreeModelColumn<std::string> filler;
                };
 
@@ -1918,6 +1928,7 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable
                Gtk::TreeView midi_output_view;
                Gtk::Label input_label;
                Gtk::Label output_label;
+               int refill_id;
 
                void setup_midi_port_view (Gtk::TreeView&, bool with_selection);
                bool refill_midi_ports (bool for_input, Gtk::TreeView&);
@@ -1937,7 +1948,7 @@ MidiPortOptions::setup_midi_port_view (Gtk::TreeView& view, bool with_selection)
        TreeViewColumn* col;
        Gtk::Label* l;
 
-       pretty_name_column = view.append_column_editable (_("Name (click to edit)"), midi_port_columns.pretty_name) - 1;
+       pretty_name_column = view.append_column_editable (_("Name (click twice to edit)"), midi_port_columns.pretty_name) - 1;
 
        col = manage (new TreeViewColumn ("", midi_port_columns.music_data));
        col->set_alignment (ALIGN_CENTER);
@@ -1987,8 +1998,8 @@ MidiPortOptions::setup_midi_port_view (Gtk::TreeView& view, bool with_selection)
                toggle_cell->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &MidiPortOptions::midi_selection_column_toggled), &view));
        }
 
-       view.get_selection()->set_mode (SELECTION_NONE);
-       view.set_tooltip_column (4); /* port "real" name */
+       view.get_selection()->set_mode (SELECTION_SINGLE);
+       view.set_tooltip_column (5); /* port short name */
        view.get_column(0)->set_resizable (true);
        view.get_column(0)->set_expand (true);
 }
@@ -2017,8 +2028,7 @@ MidiPortOptions::refill_midi_ports (bool for_input, Gtk::TreeView& view)
 
                PortManager::MidiPortInformation mpi (AudioEngine::instance()->midi_port_information (*s));
 
-               if (mpi.pretty_name.empty()) {
-                       /* vanished since get_known_midi_ports() */
+               if (!mpi.exists) {
                        continue;
                }
 
@@ -2032,7 +2042,8 @@ MidiPortOptions::refill_midi_ports (bool for_input, Gtk::TreeView& view)
                row[midi_port_columns.music_data] = mpi.properties & MidiPortMusic;
                row[midi_port_columns.control_data] = mpi.properties & MidiPortControl;
                row[midi_port_columns.selection] = mpi.properties & MidiPortSelection;
-               row[midi_port_columns.name] = *s;
+               row[midi_port_columns.fullname] = *s;
+               row[midi_port_columns.shortname] = AudioEngine::instance()->short_port_name_from_port_name (*s);
        }
 
        view.set_model (model);
@@ -2054,9 +2065,9 @@ MidiPortOptions::midi_music_column_toggled (string const & path, TreeView* view)
        /* don't reset model - wait for MidiPortInfoChanged signal */
 
        if (new_value) {
-               ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortMusic);
+               ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortMusic);
        } else {
-               ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortMusic);
+               ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortMusic);
        }
 }
 
@@ -2074,9 +2085,9 @@ MidiPortOptions::midi_control_column_toggled (string const & path, TreeView* vie
        /* don't reset model - wait for MidiPortInfoChanged signal */
 
        if (new_value) {
-               ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortControl);
+               ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortControl);
        } else {
-               ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortControl);
+               ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortControl);
        }
 }
 
@@ -2094,9 +2105,9 @@ MidiPortOptions::midi_selection_column_toggled (string const & path, TreeView* v
        /* don't reset model - wait for MidiSelectionPortsChanged signal */
 
        if (new_value) {
-               ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortSelection);
+               ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortSelection);
        } else {
-               ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortSelection);
+               ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortSelection);
        }
 }
 
@@ -2109,7 +2120,7 @@ MidiPortOptions::pretty_name_edit (std::string const & path, string const & new_
                return;
        }
 
-       AudioEngine::instance()->set_midi_port_pretty_name ((*iter)[midi_port_columns.name], new_text);
+       AudioEngine::instance()->set_port_pretty_name ((*iter)[midi_port_columns.fullname], new_text);
 }
 
 /*============*/
@@ -2437,7 +2448,7 @@ RCOptionEditor::RCOptionEditor ()
        add_option (_("Editor"), fadeshape);
 
        ComboOption<RegionEquivalence> *eqv = new ComboOption<RegionEquivalence> (
-                    "region-equivalence",
+                    "region-equivalency",
                     _("Regions in active edit groups are edited together"),
                     sigc::mem_fun (*_rc_config, &RCConfiguration::get_region_equivalence),
                     sigc::mem_fun (*_rc_config, &RCConfiguration::set_region_equivalence)
@@ -2446,6 +2457,7 @@ RCOptionEditor::RCOptionEditor ()
        eqv->add (Overlap, _("whenever they overlap in time"));
        eqv->add (Enclosed, _("if either encloses the other"));
        eqv->add (Exact, _("only if they have identical length, position and origin"));
+       eqv->add (LayerTime, _("only if they have identical length, position and layer"));
 
        add_option (_("Editor"), eqv);
 
@@ -3249,7 +3261,6 @@ RCOptionEditor::RCOptionEditor ()
 
        add_option (_("Sync/LTC"), _ltc_volume_slider);
 
-
        add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Beat Clock (Mclk) Generator")));
 
        add_option (_("Sync/MIDI"),