+void
+EngineControl::disable_latency_tab ()
+{
+ vector<string> empty;
+ set_popdown_strings (lm_output_channel_combo, empty);
+ set_popdown_strings (lm_input_channel_combo, empty);
+ lm_measure_button.set_sensitive (false);
+ lm_use_button.set_sensitive (false);
+}
+
+void
+EngineControl::enable_latency_tab ()
+{
+ vector<string> outputs;
+ ARDOUR::AudioEngine::instance()->get_physical_outputs (ARDOUR::DataType::AUDIO, outputs);
+ set_popdown_strings (lm_output_channel_combo, outputs);
+ lm_output_channel_combo.set_active_text (outputs.front());
+
+ vector<string> inputs;
+ ARDOUR::AudioEngine::instance()->get_physical_inputs (ARDOUR::DataType::AUDIO, inputs);
+ set_popdown_strings (lm_input_channel_combo, inputs);
+ lm_input_channel_combo.set_active_text (inputs.front());
+
+ lm_measure_button.set_sensitive (true);
+}
+
+void
+EngineControl::setup_midi_tab_for_backend ()
+{
+ string backend = backend_combo.get_active_text ();
+
+ Gtkmm2ext::container_clear (midi_vbox);
+
+ midi_vbox.set_border_width (12);
+ midi_device_table.set_border_width (12);
+
+ if (backend == "JACK") {
+ setup_midi_tab_for_jack ();
+ }
+
+ midi_vbox.pack_start (midi_device_table, true, true);
+ midi_vbox.pack_start (midi_refresh_button, false, false);
+ midi_vbox.show_all ();
+
+ midi_refresh_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::refresh_midi_display));
+}
+
+void
+EngineControl::setup_midi_tab_for_jack ()
+{
+ midi_vbox.pack_start (aj_button, false, false);
+}
+
+void
+EngineControl::refresh_midi_display ()
+{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+
+ vector<string> midi_inputs;
+ vector<string> midi_outputs;
+ int row = 0;
+ AttachOptions xopt = AttachOptions (FILL|EXPAND);
+ Gtk::Label* l;
+
+ Gtkmm2ext::container_clear (midi_device_table);
+
+ backend->get_physical_inputs (ARDOUR::DataType::MIDI, midi_inputs);
+ backend->get_physical_outputs (ARDOUR::DataType::MIDI, midi_outputs);
+
+ midi_device_table.set_spacings (6);
+ midi_device_table.set_homogeneous (true);
+ midi_device_table.resize (midi_inputs.size() + midi_outputs.size() + 3, 1);
+
+ l = manage (new Label);
+ l->set_markup (string_compose ("<span size=\"large\" weight=\"bold\">%1</span>", _("MIDI Inputs")));
+ midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
+ l->set_alignment (0, 0.5);
+ row++;
+ l->show ();
+
+ for (vector<string>::iterator p = midi_inputs.begin(); p != midi_inputs.end(); ++p) {
+ l = manage (new Label ((*p).substr ((*p).find_last_of (':') + 1)));
+ l->set_alignment (0, 0.5);
+ midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
+ l->show ();
+ row++;
+ }
+
+ row++; // extra row of spacing
+
+ l = manage (new Label);
+ l->set_markup (string_compose ("<span size=\"large\" weight=\"bold\">%1</span>", _("MIDI Outputs")));
+ midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
+ l->set_alignment (0, 0.5);
+ row++;
+ l->show ();
+
+ for (vector<string>::iterator p = midi_outputs.begin(); p != midi_outputs.end(); ++p) {
+ l = manage (new Label ((*p).substr ((*p).find_last_of (':') + 1)));
+ l->set_alignment (0, 0.5);
+ midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
+ l->show ();
+ row++;
+ }
+}
+