allow to stop engine for re-configure
authorRobin Gareus <robin@gareus.org>
Tue, 11 Aug 2015 13:34:07 +0000 (15:34 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 11 Aug 2015 13:38:38 +0000 (15:38 +0200)
gtk2_ardour/engine_dialog.cc
gtk2_ardour/engine_dialog.h

index 555c804a6df2f5cfcfc7a17289e473dc15275b2e..de734ab716411c634c4705f3eff0f1bcc8965183 100644 (file)
@@ -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 ("<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();
 }
 
index b656bcfd1c5c1dc52561878ad104dc7a6cbe0cba..783ab440e80e272c7158e322c732b71818fbe68e 100644 (file)
@@ -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);