Allow naming of new tracks/busses in the add route dialogue (#3376).
[ardour.git] / gtk2_ardour / ardour_ui.cc
index 056e1d6cff9cd1ca0b88fa2d5d8f86c59929c540..bfe8458b62b029a888238af4fa0dc677fb0dee4a 100644 (file)
 
 typedef uint64_t microseconds_t;
 
+#include "about.h"
 #include "actions.h"
+#include "add_route_dialog.h"
+#include "ambiguous_file_dialog.h"
 #include "ardour_ui.h"
-#include "public_editor.h"
 #include "audio_clock.h"
+#include "bundle_manager.h"
+#include "engine_dialog.h"
+#include "gain_meter.h"
+#include "global_port_matrix.h"
+#include "gui_thread.h"
 #include "keyboard.h"
+#include "location_ui.h"
+#include "missing_file_dialog.h"
+#include "missing_plugin_dialog.h"
 #include "mixer_ui.h"
-#include "prompter.h"
 #include "opts.h"
-#include "add_route_dialog.h"
-#include "about.h"
-#include "splash.h"
-#include "utils.h"
-#include "gui_thread.h"
-#include "theme_manager.h"
-#include "bundle_manager.h"
-#include "session_metadata_dialog.h"
-#include "gain_meter.h"
+#include "processor_box.h"
+#include "prompter.h"
+#include "public_editor.h"
 #include "route_time_axis.h"
+#include "session_metadata_dialog.h"
+#include "speaker_dialog.h"
+#include "splash.h"
 #include "startup.h"
-#include "engine_dialog.h"
-#include "processor_box.h"
+#include "theme_manager.h"
 #include "time_axis_view_item.h"
+#include "utils.h"
 #include "window_proxy.h"
-#include "global_port_matrix.h"
-#include "location_ui.h"
-#include "missing_file_dialog.h"
-#include "missing_plugin_dialog.h"
-#include "ambiguous_file_dialog.h"
 
 #include "i18n.h"
 
@@ -317,6 +318,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
        
        location_ui = new ActionWindowProxy<LocationUIWindow> (X_("locations"), Config->extra_xml (X_("UI")), X_("ToggleLocations"));
        big_clock_window = new ActionWindowProxy<Gtk::Window> (X_("bigclock"), Config->extra_xml (X_("UI")), X_("ToggleBigClock"));
+       speaker_config_window = new ActionWindowProxy<SpeakerDialog> (X_("speakerconf"), Config->extra_xml (X_("UI")), X_("toggle-speaker-config"));
        
        for (ARDOUR::DataType::iterator i = ARDOUR::DataType::begin(); i != ARDOUR::DataType::end(); ++i) {
                _global_port_matrix[*i] = new ActionWindowProxy<GlobalPortMatrixWindow> (
@@ -327,6 +329,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
        }
 
        setup_clock ();
+        speaker_config_window->set (new SpeakerDialog);
 
        starting.connect (sigc::mem_fun(*this, &ARDOUR_UI::startup));
        stopping.connect (sigc::mem_fun(*this, &ARDOUR_UI::shutdown));
@@ -419,10 +422,11 @@ ARDOUR_UI::post_engine ()
        if (ARDOUR_COMMAND_LINE::show_key_actions) {
                vector<string> names;
                vector<string> paths;
+               vector<string> tooltips;
                vector<string> keys;
                vector<AccelKey> bindings;
 
-               ActionManager::get_all_actions (names, paths, keys, bindings);
+               ActionManager::get_all_actions (names, paths, tooltips, keys, bindings);
 
                vector<string>::iterator n;
                vector<string>::iterator k;
@@ -1330,7 +1334,7 @@ ARDOUR_UI::open_session ()
 
 
 void
-ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t how_many)
+ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t how_many, string const & name_template)
 {
        list<boost::shared_ptr<MidiTrack> > tracks;
 
@@ -1342,7 +1346,7 @@ ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t
        try {
                if (disk) {
 
-                       tracks = _session->new_midi_track (ARDOUR::Normal, route_group, how_many);
+                       tracks = _session->new_midi_track (ARDOUR::Normal, route_group, how_many, name_template);
 
                        if (tracks.size() != how_many) {
                                if (how_many == 1) {
@@ -1370,7 +1374,15 @@ restart JACK with more ports."), PROGRAM_NAME));
 
 
 void
-ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, RouteGroup* route_group, uint32_t how_many)
+ARDOUR_UI::session_add_audio_route (
+       bool track,
+       int32_t input_channels,
+       int32_t output_channels,
+       ARDOUR::TrackMode mode,
+       RouteGroup* route_group,
+       uint32_t how_many,
+       string const & name_template
+       )
 {
        list<boost::shared_ptr<AudioTrack> > tracks;
        RouteList routes;
@@ -1382,7 +1394,7 @@ ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t
 
        try {
                if (track) {
-                       tracks = _session->new_audio_track (input_channels, output_channels, mode, route_group, how_many);
+                       tracks = _session->new_audio_track (input_channels, output_channels, mode, route_group, how_many, name_template);
 
                        if (tracks.size() != how_many) {
                                if (how_many == 1) {
@@ -1395,7 +1407,7 @@ ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t
 
                } else {
 
-                       routes = _session->new_audio_route (input_channels, output_channels, route_group, how_many);
+                       routes = _session->new_audio_route (input_channels, output_channels, route_group, how_many, name_template);
 
                        if (routes.size() != how_many) {
                                if (how_many == 1) {
@@ -2235,8 +2247,8 @@ ARDOUR_UI::save_template ()
        }
 
        prompter.set_name (X_("Prompter"));
-       prompter.set_title (_("Save Mix Template"));
-       prompter.set_prompt (_("Name for mix template:"));
+       prompter.set_title (_("Save Template"));
+       prompter.set_prompt (_("Name for template:"));
        prompter.set_initial_text(_session->name() + _("-template"));
        prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
 
@@ -2642,6 +2654,12 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
                } else {
 
                        ret = load_session (session_path, session_name, template_name);
+
+                       if (ret == -2) {
+                               /* not connected to the AudioEngine, so quit to avoid an infinite loop */
+                               exit (1);
+                       }
+                       
                        if (!ARDOUR_COMMAND_LINE::immediate_save.empty()) {
                                _session->save_state (ARDOUR_COMMAND_LINE::immediate_save, false);
                                exit (1);
@@ -2672,6 +2690,7 @@ ARDOUR_UI::close_session()
        goto_editor_window ();
 }
 
+/** @return -2 if the load failed because we are not connected to the AudioEngine */
 int
 ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name, std::string mix_template)
 {
@@ -2682,7 +2701,7 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name,
        session_loaded = false;
 
        if (!check_audioengine()) {
-               return -1;
+               return -2;
        }
 
        unload_status = unload_session ();
@@ -2694,7 +2713,7 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name,
                goto out;
        }
 
-       loading_message (string_compose (_("Please wait while %1loads your session"), PROGRAM_NAME));
+       loading_message (string_compose (_("Please wait while %1 loads your session"), PROGRAM_NAME));
 
        try {
                new_session = new Session (*engine, path, snap_name, 0, mix_template);
@@ -3208,7 +3227,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
 
        if (add_route_dialog->type() == ARDOUR::DataType::MIDI) {
                if (track) {
-                       session_add_midi_track (route_group, count);
+                       session_add_midi_track (route_group, count, name_template);
                } else  {
                        MessageDialog msg (*editor,
                                        _("Sorry, MIDI Busses are not supported at this time."));
@@ -3217,9 +3236,9 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
                }
        } else {
                if (track) {
-                       session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), route_group, count);
+                       session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), route_group, count, name_template);
                } else {
-                       session_add_audio_bus (input_chan, output_chan, route_group, count);
+                       session_add_audio_bus (input_chan, output_chan, route_group, count, name_template);
                }
        }
 }