diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2015-10-10 17:13:04 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2015-10-10 17:14:30 -0400 |
commit | 965b13584213319b0edd7e0a95992c1ea69f16c9 (patch) | |
tree | 227dafec1ed7c14aa1c480300769dfc2e0751c35 /libs/surfaces/mackie/gui.cc | |
parent | 7c58b4de5f269083df2201df1976b98afb823cd5 (diff) |
numerous changes to Mackie support, generally offering better robustness
Diffstat (limited to 'libs/surfaces/mackie/gui.cc')
-rw-r--r-- | libs/surfaces/mackie/gui.cc | 68 |
1 files changed, 24 insertions, 44 deletions
diff --git a/libs/surfaces/mackie/gui.cc b/libs/surfaces/mackie/gui.cc index e627d797e5..4b33126c8d 100644 --- a/libs/surfaces/mackie/gui.cc +++ b/libs/surfaces/mackie/gui.cc @@ -118,6 +118,7 @@ MackieControlProtocolGUI::MackieControlProtocolGUI (MackieControlProtocol& p) _surface_combo.signal_changed().connect (sigc::mem_fun (*this, &MackieControlProtocolGUI::surface_combo_changed)); _cp.DeviceChanged.connect (device_change_connection, invalidator (*this), boost::bind (&MackieControlProtocolGUI::device_changed, this), gui_context()); + _cp.ConnectionChange.connect (connection_change_connection, invalidator (*this), boost::bind (&MackieControlProtocolGUI::connection_handler, this), gui_context()); ipmidi_base_port_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MackieControlProtocolGUI::ipmidi_spinner_changed)); @@ -240,6 +241,29 @@ MackieControlProtocolGUI::MackieControlProtocolGUI (MackieControlProtocol& p) } void +MackieControlProtocolGUI::connection_handler () +{ + vector<Gtk::ComboBoxText*>::iterator ic; + vector<Gtk::ComboBoxText*>::iterator oc; + + vector<string> midi_inputs; + vector<string> midi_outputs; + + ARDOUR::AudioEngine::instance()->get_ports ("", ARDOUR::DataType::MIDI, ARDOUR::PortFlags (ARDOUR::IsOutput|ARDOUR::IsPhysical), midi_inputs); + ARDOUR::AudioEngine::instance()->get_ports ("", ARDOUR::DataType::MIDI, ARDOUR::PortFlags (ARDOUR::IsInput|ARDOUR::IsPhysical), midi_outputs); + + + for (ic = input_combos.begin(), oc = output_combos.begin(); ic != input_combos.end() && oc != output_combos.end(); ++ic, ++oc) { + + boost::shared_ptr<Surface> surface = _cp.get_surface_by_raw_pointer ((*ic)->get_data ("surface")); + + if (surface) { + update_port_combos (midi_inputs, midi_outputs, *ic, *oc, surface); + } + } +} + +void MackieControlProtocolGUI::update_port_combos (vector<string> const& midi_inputs, vector<string> const& midi_outputs, Gtk::ComboBoxText* input_combo, Gtk::ComboBoxText* output_combo, @@ -827,47 +851,3 @@ MackieControlProtocolGUI::touch_sensitive_change () int sensitivity = (int) touch_sensitivity_adjustment.get_value (); _cp.set_touch_sensitivity (sensitivity); } - -void -MackieControlProtocolGUI::surface_connectivity_change (Surface* raw_surface) -{ - boost::shared_ptr<Surface> surface; - - for (MackieControlProtocol::Surfaces::iterator s = _cp.surfaces.begin(); s != _cp.surfaces.end(); ++s) { - if ((*s).get() == raw_surface) { - surface = *s; - break; - } - } - - if (!surface) { - return; - } - - Gtk::ComboBoxText* input_combo = 0; - Gtk::ComboBoxText* output_combo = 0; - - for (vector<Gtk::ComboBoxText*>::iterator c = input_combos.begin(); c != input_combos.end(); ++c) { - if ((*c)->get_data ("surface") == raw_surface) { - input_combo = *c; - } - } - - for (vector<Gtk::ComboBoxText*>::iterator c = output_combos.begin(); c != output_combos.end(); ++c) { - if ((*c)->get_data ("surface") == raw_surface) { - output_combo = *c; - } - } - - if (!input_combo || !output_combo) { - return; - } - - vector<string> midi_inputs; - vector<string> midi_outputs; - - ARDOUR::AudioEngine::instance()->get_ports ("", ARDOUR::DataType::MIDI, ARDOUR::PortFlags (ARDOUR::IsOutput|ARDOUR::IsPhysical), midi_inputs); - ARDOUR::AudioEngine::instance()->get_ports ("", ARDOUR::DataType::MIDI, ARDOUR::PortFlags (ARDOUR::IsInput|ARDOUR::IsPhysical), midi_outputs); - - update_port_combos (midi_inputs, midi_outputs, input_combo, output_combo, surface); -} |