add -P flag blocking port connections while loading session
[ardour.git] / gtk2_ardour / ardour_ui.cc
index 0e263ae9299f9ee501bd141a7476f7056772b16d..0a8209fe22c0da90969df7d7742ce2da209ecf4b 100644 (file)
@@ -49,7 +49,6 @@
 #include "gtkmm2ext/utils.h"
 #include "gtkmm2ext/click_box.h"
 #include "gtkmm2ext/fastmeter.h"
-#include "gtkmm2ext/stop_signal.h"
 #include "gtkmm2ext/popup.h"
 #include "gtkmm2ext/window_title.h"
 
@@ -295,7 +294,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
 
 /** @return true if a session was chosen and `apply' clicked, otherwise false if `cancel' was clicked */
 bool
-ARDOUR_UI::run_startup (bool should_be_new)
+ARDOUR_UI::run_startup (bool should_be_new, string load_template)
 {
        if (_startup == 0) {
                _startup = new ArdourStartup ();
@@ -308,6 +307,9 @@ ARDOUR_UI::run_startup (bool should_be_new)
        }
 
        _startup->set_new_only (should_be_new);
+        if (!load_template.empty()) {
+            _startup->set_load_template( load_template );
+        }
        _startup->present ();
 
        main().run();
@@ -347,6 +349,8 @@ ARDOUR_UI::create_engine ()
 
        engine->Halted.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::engine_halted, this, _1, false));
 
+        ARDOUR::Port::set_connecting_blocked (ARDOUR_COMMAND_LINE::no_connect_ports);
+
        post_engine ();
 
        return 0;
@@ -643,7 +647,7 @@ Please consider the possibilities, and perhaps (re)start JACK."));
 void
 ARDOUR_UI::startup ()
 {
-       if (get_session_parameters (true, ARDOUR_COMMAND_LINE::new_session)) {
+       if (get_session_parameters (true, ARDOUR_COMMAND_LINE::new_session, ARDOUR_COMMAND_LINE::load_template)) {
                exit (1);
        }
 
@@ -769,17 +773,18 @@ If you still wish to quit, please use the\n\n\
                _session = 0;
        }
 
-       ArdourDialog::close_all_dialogs ();
-       engine->stop (true);
         cerr << "Save before quit\n";
        save_ardour_state ();
+
+       ArdourDialog::close_all_dialogs ();
+       engine->stop (true);
        quit ();
 }
 
 int
 ARDOUR_UI::ask_about_saving_session (const string & what)
 {
-       ArdourDialog window (_("ardour: save session?"));
+       ArdourDialog window (_("Unsaved Session"));
        Gtk::HBox dhbox;  // the hbox for the image and text
        Gtk::Label  prompt_label;
        Gtk::Image* dimage = manage (new Gtk::Image(Stock::DIALOG_WARNING,  Gtk::ICON_SIZE_DIALOG));
@@ -1979,7 +1984,7 @@ ARDOUR_UI::snapshot_session (bool switch_to_it)
        prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
        prompter.set_title (_("Take Snapshot"));
        prompter.set_title (_("Take Snapshot"));
-       prompter.set_prompt (_("Name of New Snapshot"));
+       prompter.set_prompt (_("Name of new snapshot"));
 
         if (!switch_to_it) {
                 char timebuf[128];
@@ -2020,7 +2025,7 @@ ARDOUR_UI::snapshot_session (bool switch_to_it)
                vector<string> n = get_file_names_no_extension (p);
                if (find (n.begin(), n.end(), snapname) != n.end()) {
 
-                       ArdourDialog confirm (_("Confirm snapshot overwrite"), true);
+                       ArdourDialog confirm (_("Confirm Snapshot Overwrite"), true);
                        Label m (_("A snapshot already exists with that name.  Do you want to overwrite it?"));
                        confirm.get_vbox()->pack_start (m, true, true);
                        confirm.add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
@@ -2388,7 +2393,7 @@ ARDOUR_UI::loading_message (const std::string& /*msg*/)
 
 /** @param quit_on_cancel true if exit() should be called if the user clicks `cancel' in the new session dialog */
 int
-ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new)
+ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, string load_template)
 {
        Glib::ustring session_name;
        Glib::ustring session_path;
@@ -2396,6 +2401,11 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new)
        int ret = -1;
        bool likely_new = false;
 
+        if (! load_template.empty()) {
+            should_be_new = true;
+            template_name = load_template;
+        }
+
        while (ret != 0) {
 
                if (!should_be_new && !ARDOUR_COMMAND_LINE::session_name.empty()) {
@@ -2415,7 +2425,7 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new)
 
                } else {
 
-                       bool const apply = run_startup (should_be_new);
+                       bool const apply = run_startup (should_be_new, load_template);
                        if (!apply) {
                                if (quit_on_cancel) {
                                        exit (1);
@@ -2777,7 +2787,7 @@ require some unused files to continue to exist."));
                return;
        }
 
-       ArdourDialog results (_("ardour: cleanup"), true, false);
+       ArdourDialog results (_("Clean-up"), true, false);
 
        struct CleanupResultsModelColumns : public Gtk::TreeModel::ColumnRecord {
            CleanupResultsModelColumns() {