use program-name for internal ports
[ardour.git] / gtk2_ardour / engine_dialog.cc
index 555c804a6df2f5cfcfc7a17289e473dc15275b2e..e6c787359fab728278b555bb443cf75fe28d75e9 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);
@@ -597,7 +607,13 @@ EngineControl::build_full_control_notebook ()
        label = manage (left_aligned_label (_("MIDI System:")));
        basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
        basic_packer.attach (midi_option_combo, 1, 2, row, row + 1, SHRINK, (AttachOptions) 0);
+#if ! defined __APPLE__  && ! defined PLATFORM_WINDOWS // => linux, YAY
+       /* Currently the only backend with dedicated Midi setup is ALSA.
+        * lot of people complain that this is greyed out
+        * "I can't use MIDI, the setup is greyed out"
+        */
        basic_packer.attach (midi_devices_button, 3, 4, row, row+1, xopt, xopt);
+#endif
        row++;
 }
 
@@ -723,6 +739,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 +777,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 +802,26 @@ EngineControl::update_sensitivity ()
                valid = false;
        }
 
+       if (ARDOUR::AudioEngine::instance()->running() && _have_control) {
+               input_device_combo.set_sensitive (false);
+               output_device_combo.set_sensitive (false);
+               device_combo.set_sensitive (false);
+               driver_combo.set_sensitive (false);
+               stop_engine_button.set_sensitive (true);
+               stop_engine_button.show ();
+       } else {
+               input_device_combo.set_sensitive (true);
+               output_device_combo.set_sensitive (true);
+               device_combo.set_sensitive (true);
+               if (backend->requires_driver_selection() && get_popdown_string_count(driver_combo) > 0) {
+                       driver_combo.set_sensitive (true);
+               } else {
+                       driver_combo.set_sensitive (false);
+               }
+               stop_engine_button.set_sensitive (false);
+               stop_engine_button.hide ();
+       }
+
        if (valid || !_have_control) {
                ok_button->set_sensitive (true);
                apply_button->set_sensitive (true);
@@ -892,7 +932,7 @@ EngineControl::backend_changed ()
        string backend_name = backend_combo.get_active_text();
        boost::shared_ptr<ARDOUR::AudioBackend> backend;
 
-       if (!(backend = ARDOUR::AudioEngine::instance()->set_backend (backend_name, "ardour", ""))) {
+       if (!(backend = ARDOUR::AudioEngine::instance()->set_backend (backend_name, downcase (PROGRAM_NAME), ""))) {
                /* eh? setting the backend failed... how ? */
                /* A: stale config contains a backend that does not exist in current build */
                return;
@@ -908,12 +948,9 @@ EngineControl::backend_changed ()
 
        if (backend->requires_driver_selection()) {
                if (set_driver_popdown_strings ()) {
-                       driver_combo.set_sensitive (true);
                        driver_changed ();
                }
-
        } else {
-               driver_combo.set_sensitive (false);
                /* this will change the device text which will cause a call to
                 * device changed which will set up parameters
                 */
@@ -1182,7 +1219,7 @@ EngineControl::get_sample_rates_for_all_devices ()
        vector<float> all_rates;
 
        if (backend->use_separate_input_and_output_devices ()) {
-               all_rates = backend->available_sample_rates (get_input_device_name (), get_output_device_name ());
+               all_rates = backend->available_sample_rates2 (get_input_device_name (), get_output_device_name ());
        } else {
                all_rates = backend->available_sample_rates (get_device_name ());
        }
@@ -1254,7 +1291,7 @@ EngineControl::get_buffer_sizes_for_all_devices ()
        vector<uint32_t> all_sizes;
 
        if (backend->use_separate_input_and_output_devices ()) {
-               all_sizes = backend->available_buffer_sizes (get_input_device_name (), get_output_device_name ());
+               all_sizes = backend->available_buffer_sizes2 (get_input_device_name (), get_output_device_name ());
        } else {
                all_sizes = backend->available_buffer_sizes (get_device_name ());
        }
@@ -1894,7 +1931,7 @@ EngineControl::set_current_state (const State& state)
        boost::shared_ptr<ARDOUR::AudioBackend> backend;
 
        if (!(backend = ARDOUR::AudioEngine::instance ()->set_backend (
-                 state->backend, "ardour", ""))) {
+                 state->backend, downcase (PROGRAM_NAME), ""))) {
                DEBUG_ECONTROL (string_compose ("Unable to set backend to %1", state->backend));
                // this shouldn't happen as the invalid backend names should have been
                // removed from the list of states.
@@ -2368,7 +2405,7 @@ EngineControl::get_backend () const
 string
 EngineControl::get_driver () const
 {
-       if (driver_combo.get_sensitive() && driver_combo.get_parent()) {
+       if (driver_combo.get_parent()) {
                return driver_combo.get_active_text ();
        } else {
                return "";
@@ -2405,6 +2442,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 +2765,11 @@ EngineControl::engine_running ()
        connect_disconnect_button.show();
 
        started_at_least_once = true;
-       engine_status.set_markup(string_compose ("<span foreground=\"green\">%1</span>", _("Active")));
+       if (_have_control) {
+               engine_status.set_markup(string_compose ("<span foreground=\"green\">%1</span>", _("Running")));
+       } else {
+               engine_status.set_markup(string_compose ("<span foreground=\"green\">%1</span>", _("Connected")));
+       }
        update_sensitivity();
 }
 
@@ -2735,12 +2782,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();
 }