From 52c25cab36b26755cf7e4fdaf4d55f383b5fa90a Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 11 Aug 2015 15:34:07 +0200 Subject: allow to stop engine for re-configure --- gtk2_ardour/engine_dialog.cc | 45 +++++++++++++++++++++++++++++++++----------- gtk2_ardour/engine_dialog.h | 4 +++- 2 files changed, 37 insertions(+), 12 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index 555c804a6d..de734ab716 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -86,6 +86,7 @@ EngineControl::EngineControl () , ports_spinner (ports_adjustment) , control_app_button (_("Device Control Panel")) , midi_devices_button (_("Midi Device Setup")) + , stop_engine_button (_("Stop (Reconfigure)")) , lm_measure_label (_("Measure")) , lm_use_button (_("Use results")) , lm_back_button (_("Back to settings ... (ignore results)")) @@ -251,9 +252,6 @@ EngineControl::EngineControl () get_vbox()->set_border_width (12); get_vbox()->pack_start (notebook); - get_action_area()->pack_start (engine_status); - engine_status.show(); - /* need a special function to print "all available channels" when the * channel counts hit zero. */ @@ -266,9 +264,16 @@ EngineControl::EngineControl () midi_devices_button.set_name ("generic button"); midi_devices_button.set_can_focus(true); - control_app_button.signal_clicked().connect (mem_fun (*this, &EngineControl::control_app_button_clicked)); + control_app_button.signal_clicked.connect (mem_fun (*this, &EngineControl::control_app_button_clicked)); + control_app_button.set_name ("generic button"); + control_app_button.set_can_focus(true); manage_control_app_sensitivity (); + stop_engine_button.signal_clicked.connect (mem_fun (*this, &EngineControl::stop_engine_button_clicked)); + stop_engine_button.set_sensitive (false); + stop_engine_button.set_name ("generic button"); + stop_engine_button.set_can_focus(true); + cancel_button = add_button (Gtk::Stock::CLOSE, Gtk::RESPONSE_CANCEL); apply_button = add_button (Gtk::Stock::APPLY, Gtk::RESPONSE_APPLY); ok_button = add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK); @@ -461,6 +466,11 @@ EngineControl::build_notebook () basic_packer.attach (*label, 0, 1, 0, 1, xopt, (AttachOptions) 0); basic_packer.attach (backend_combo, 1, 2, 0, 1, xopt, (AttachOptions) 0); + basic_packer.attach (engine_status, 2, 3, 0, 1, xopt, (AttachOptions) 0); + engine_status.show(); + + basic_packer.attach (stop_engine_button, 3, 4, 0, 1, xopt, xopt); + lm_button_audio.signal_clicked.connect (sigc::mem_fun (*this, &EngineControl::calibrate_audio_latency)); lm_button_audio.set_name ("generic button"); lm_button_audio.set_can_focus(true); @@ -723,6 +733,7 @@ EngineControl::update_sensitivity () if (!backend) { ok_button->set_sensitive (false); apply_button->set_sensitive (false); + stop_engine_button.set_sensitive (false); return; } @@ -760,6 +771,9 @@ EngineControl::update_sensitivity () * Currently there is no way to manually stop the * engine in order to re-configure it. * This needs to remain sensitive for now. + * + * (it's also handy to implicily + * re-start the engine) */ buffer_size_combo.set_sensitive (true); #else @@ -782,6 +796,14 @@ EngineControl::update_sensitivity () valid = false; } + if (ARDOUR::AudioEngine::instance()->running() && _have_control) { + stop_engine_button.set_sensitive (true); + stop_engine_button.show (); + } else { + stop_engine_button.set_sensitive (false); + stop_engine_button.hide (); + } + if (valid || !_have_control) { ok_button->set_sensitive (true); apply_button->set_sensitive (true); @@ -2405,6 +2427,12 @@ EngineControl::control_app_button_clicked () backend->launch_control_app (); } +void +EngineControl::stop_engine_button_clicked () +{ + ARDOUR::AudioEngine::instance()->stop (); +} + void EngineControl::manage_control_app_sensitivity () { @@ -2722,7 +2750,7 @@ EngineControl::engine_running () connect_disconnect_button.show(); started_at_least_once = true; - engine_status.set_markup(string_compose ("%1", _("Active"))); + engine_status.set_markup(string_compose ("%1", _("Running"))); update_sensitivity(); } @@ -2735,12 +2763,7 @@ EngineControl::engine_stopped () connect_disconnect_button.set_label (string_compose (_("Connect to %1"), backend->name())); connect_disconnect_button.show(); - if (ARDOUR::Profile->get_mixbus()) { - engine_status.set_markup(""); - } else { - engine_status.set_markup(string_compose ("%1", _("Inactive"))); - } - + engine_status.set_markup(X_("")); update_sensitivity(); } diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h index b656bcfd1c..783ab440e8 100644 --- a/gtk2_ardour/engine_dialog.h +++ b/gtk2_ardour/engine_dialog.h @@ -82,8 +82,9 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList { Gtk::SpinButton ports_spinner; Gtk::Label have_control_text; - Gtk::Button control_app_button; + ArdourButton control_app_button; ArdourButton midi_devices_button; + ArdourButton stop_engine_button; Gtk::Button connect_disconnect_button; @@ -288,6 +289,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList { void on_show (); void on_response (int); void control_app_button_clicked (); + void stop_engine_button_clicked (); void use_latency_button_clicked (); void manage_control_app_sensitivity (); int push_state_to_backend (bool start); -- cgit v1.2.3