13
0

basic use of new backend MIDI options

This commit is contained in:
Paul Davis 2013-10-10 12:59:33 -04:00
parent 1bd04f8bf3
commit 645e9caeee
2 changed files with 37 additions and 4 deletions

View File

@ -77,7 +77,6 @@ EngineControl::EngineControl ()
, lm_table (5, 2) , lm_table (5, 2)
, have_lm_results (false) , have_lm_results (false)
, midi_refresh_button (_("Refresh list")) , midi_refresh_button (_("Refresh list"))
, aj_button (_("Start MIDI ALSA/JACK bridge"))
, ignore_changes (0) , ignore_changes (0)
, _desired_sample_rate (0) , _desired_sample_rate (0)
, no_push (true) , no_push (true)
@ -207,7 +206,7 @@ EngineControl::EngineControl ()
/* pack it all up */ /* pack it all up */
notebook.pages().push_back (TabElem (basic_vbox, _("Audio"))); notebook.pages().push_back (TabElem (basic_vbox, _("Audio")));
notebook.pages().push_back (TabElem (midi_vbox, _("MIDI"))); // notebook.pages().push_back (TabElem (midi_vbox, _("MIDI")));
notebook.pages().push_back (TabElem (lm_vbox, _("Latency"))); notebook.pages().push_back (TabElem (lm_vbox, _("Latency")));
notebook.set_border_width (12); notebook.set_border_width (12);
@ -413,6 +412,10 @@ EngineControl::build_full_control_notebook ()
basic_packer.attach (*label, 2, 3, row, row+1, xopt, (AttachOptions) 0); basic_packer.attach (*label, 2, 3, row, row+1, xopt, (AttachOptions) 0);
++row; ++row;
label = manage (left_aligned_label (_("MIDI I/O using")));
basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
basic_packer.attach (midi_option_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
row++;
} }
void void
@ -510,7 +513,6 @@ EngineControl::setup_midi_tab_for_backend ()
void void
EngineControl::setup_midi_tab_for_jack () EngineControl::setup_midi_tab_for_jack ()
{ {
midi_vbox.pack_start (aj_button, false, false);
} }
void void
@ -612,7 +614,22 @@ EngineControl::backend_changed ()
*/ */
list_devices (); list_devices ();
} }
vector<string> midi_options = backend->enumerate_midi_options();
if (midi_options.size() == 1) {
/* only contains the "none" option */
midi_option_combo.set_sensitive (false);
} else {
if (_have_control) {
set_popdown_strings (midi_option_combo, midi_options);
midi_option_combo.set_active_text (midi_options.front());
midi_option_combo.set_sensitive (true);
} else {
midi_option_combo.set_sensitive (false);
}
}
maybe_display_saved_state (); maybe_display_saved_state ();
} }
@ -970,6 +987,10 @@ EngineControl::maybe_display_saved_state ()
show_buffer_duration (); show_buffer_duration ();
input_latency.set_value (state->input_latency); input_latency.set_value (state->input_latency);
output_latency.set_value (state->output_latency); output_latency.set_value (state->output_latency);
if (!state->midi_option.empty()) {
midi_option_combo.set_active_text (state->midi_option);
}
} }
} }
@ -996,6 +1017,7 @@ EngineControl::get_state ()
node->add_property ("input-channels", (*i).input_channels); node->add_property ("input-channels", (*i).input_channels);
node->add_property ("output-channels", (*i).output_channels); node->add_property ("output-channels", (*i).output_channels);
node->add_property ("active", (*i).active ? "yes" : "no"); node->add_property ("active", (*i).active ? "yes" : "no");
node->add_property ("midi-option", (*i).midi_option);
state_nodes->add_child_nocopy (*node); state_nodes->add_child_nocopy (*node);
} }
@ -1092,6 +1114,11 @@ EngineControl::set_state (const XMLNode& root)
} }
state.active = string_is_affirmative (prop->value ()); state.active = string_is_affirmative (prop->value ());
if ((prop = grandchild->property ("midi-option")) == 0) {
continue;
}
state.midi_option = prop->value ();
states.push_back (state); states.push_back (state);
} }
} }
@ -1109,6 +1136,7 @@ EngineControl::set_state (const XMLNode& root)
buffer_size_combo.set_active_text (bufsize_as_string ((*i).buffer_size)); buffer_size_combo.set_active_text (bufsize_as_string ((*i).buffer_size));
input_latency.set_value ((*i).input_latency); input_latency.set_value ((*i).input_latency);
output_latency.set_value ((*i).output_latency); output_latency.set_value ((*i).output_latency);
midi_option_combo.set_active_text ((*i).midi_option);
ignore_changes--; ignore_changes--;
break; break;
} }
@ -1139,6 +1167,7 @@ EngineControl::push_state_to_backend (bool start)
bool change_bufsize = false; bool change_bufsize = false;
bool change_latency = false; bool change_latency = false;
bool change_channels = false; bool change_channels = false;
bool change_midi = false;
uint32_t ochan = get_output_channels (); uint32_t ochan = get_output_channels ();
uint32_t ichan = get_input_channels (); uint32_t ichan = get_input_channels ();
@ -1321,6 +1350,8 @@ EngineControl::push_state_to_backend (bool start)
return -1; return -1;
} }
} }
backend->set_midi_option (midi_option_combo.get_active_text());
if (start || (was_running && restart_required)) { if (start || (was_running && restart_required)) {
if (ARDOUR_UI::instance()->reconnect_to_engine()) { if (ARDOUR_UI::instance()->reconnect_to_engine()) {

View File

@ -62,6 +62,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
Gtk::ComboBoxText driver_combo; Gtk::ComboBoxText driver_combo;
Gtk::ComboBoxText device_combo; Gtk::ComboBoxText device_combo;
Gtk::ComboBoxText sample_rate_combo; Gtk::ComboBoxText sample_rate_combo;
Gtk::ComboBoxText midi_option_combo;
Gtk::ComboBoxText buffer_size_combo; Gtk::ComboBoxText buffer_size_combo;
Gtk::Label buffer_size_duration_label; Gtk::Label buffer_size_duration_label;
Gtk::Adjustment input_latency_adjustment; Gtk::Adjustment input_latency_adjustment;
@ -149,6 +150,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
uint32_t input_channels; uint32_t input_channels;
uint32_t output_channels; uint32_t output_channels;
bool active; bool active;
std::string midi_option;
State() State()
: input_latency (0) : input_latency (0)