summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-08-11 15:34:07 +0200
committerRobin Gareus <robin@gareus.org>2015-08-11 15:38:38 +0200
commit52c25cab36b26755cf7e4fdaf4d55f383b5fa90a (patch)
tree3ca5c1c68fa44399d4a0f0b24625b9a5376f01fa
parent6bb51a26eb83a520bf74355083a14413dfd6fb10 (diff)
allow to stop engine for re-configure
-rw-r--r--gtk2_ardour/engine_dialog.cc45
-rw-r--r--gtk2_ardour/engine_dialog.h4
2 files changed, 37 insertions, 12 deletions
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);
@@ -2406,6 +2428,12 @@ EngineControl::control_app_button_clicked ()
}
void
+EngineControl::stop_engine_button_clicked ()
+{
+ ARDOUR::AudioEngine::instance()->stop ();
+}
+
+void
EngineControl::manage_control_app_sensitivity ()
{
boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
@@ -2722,7 +2750,7 @@ EngineControl::engine_running ()
connect_disconnect_button.show();
started_at_least_once = true;
- engine_status.set_markup(string_compose ("<span foreground=\"green\">%1</span>", _("Active")));
+ engine_status.set_markup(string_compose ("<span foreground=\"green\">%1</span>", _("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 ("<span foreground=\"red\">%1</span>", _("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);