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);
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,
gui_context());
}
+ void on_unmap () {
+ connections.drop_connections ();
+ }
+
void refill () {
if (refill_midi_ports (true, midi_input_view)) {
} else {
output_label.hide ();
}
+
+ refill_id = -1;
}
private:
add (music_data);
add (control_data);
add (selection);
- add (name);
+ add (fullname);
+ add (shortname);
add (filler);
}
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;
};
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&);
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);
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);
}
PortManager::MidiPortInformation mpi (AudioEngine::instance()->midi_port_information (*s));
- if (mpi.pretty_name.empty()) {
- /* vanished since get_known_midi_ports() */
+ if (!mpi.exists) {
continue;
}
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);
/* 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);
}
}
/* 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);
}
}
/* 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);
}
}
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);
}
/*============*/
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)
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);
add_option (_("Sync/LTC"), _ltc_volume_slider);
-
add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Beat Clock (Mclk) Generator")));
add_option (_("Sync/MIDI"),