From ef505452a2b7063bf06605b22486316be91e0d9f Mon Sep 17 00:00:00 2001 From: Torben Hohn Date: Wed, 2 Jun 2010 14:36:10 +0000 Subject: [PATCH] basic -T option git-svn-id: svn://localhost/ardour2/branches/3.0@7208 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.cc | 16 ++++++++++++---- gtk2_ardour/ardour_ui.h | 4 ++-- gtk2_ardour/ardour_ui_ed.cc | 2 +- gtk2_ardour/opts.cc | 7 ++++++- gtk2_ardour/opts.h | 1 + gtk2_ardour/startup.cc | 15 +++++++++++++++ gtk2_ardour/startup.h | 2 ++ 7 files changed, 39 insertions(+), 8 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 8baa74b160..bf8fcb0709 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -294,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 (); @@ -307,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(); @@ -642,7 +645,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); } @@ -2388,7 +2391,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 +2399,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 +2423,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); diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 3a7e3d7751..643202a32b 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -107,7 +107,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr ARDOUR_UI (int *argcp, char **argvp[]); ~ARDOUR_UI(); - bool run_startup (bool should_be_new); + bool run_startup (bool should_be_new, std::string load_template); void show (); bool shown() { return shown_flag; } @@ -137,7 +137,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr _will_create_new_session_automatically = yn; } - int get_session_parameters (bool quit_on_cancel, bool should_be_new = false); + int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = ""); void parse_cmdline_path (const Glib::ustring& cmdline_path, Glib::ustring& session_name, Glib::ustring& session_path, bool& existing_session); int load_cmdline_session (const Glib::ustring& session_name, const Glib::ustring& session_path, bool& existing_session); int build_session_from_nsd (const Glib::ustring& session_name, const Glib::ustring& session_path); diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index fddc1a74c9..cba9c8ee2d 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -113,7 +113,7 @@ ARDOUR_UI::install_actions () /* the real actions */ - act = ActionManager::register_action (main_actions, X_("New"), _("New..."), hide_return (sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::get_session_parameters), false, true))); + act = ActionManager::register_action (main_actions, X_("New"), _("New..."), hide_return (sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::get_session_parameters), false, true, ""))); ActionManager::register_action (main_actions, X_("Open"), _("Open..."), sigc::mem_fun(*this, &ARDOUR_UI::open_session)); ActionManager::register_action (main_actions, X_("Recent"), _("Recent..."), sigc::mem_fun(*this, &ARDOUR_UI::open_recent_session)); diff --git a/gtk2_ardour/opts.cc b/gtk2_ardour/opts.cc index 1392cb3f48..037e3b9967 100644 --- a/gtk2_ardour/opts.cc +++ b/gtk2_ardour/opts.cc @@ -45,6 +45,7 @@ Glib::ustring ARDOUR_COMMAND_LINE::menus_file = "ardour.menus"; bool ARDOUR_COMMAND_LINE::finder_invoked_ardour = false; string ARDOUR_COMMAND_LINE::immediate_save; string ARDOUR_COMMAND_LINE::jack_session_uuid; +string ARDOUR_COMMAND_LINE::load_template; using namespace ARDOUR_COMMAND_LINE; @@ -78,7 +79,7 @@ print_help (const char *execname) int ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[]) { - const char *optstring = "bc:C:dD:hk:E:m:N:nOp:SU:vV"; + const char *optstring = "bc:C:dD:hk:E:m:N:nOp:ST:U:vV"; const char *execname = strrchr (argv[0], '/'); if (getenv ("ARDOUR_SAE")) { @@ -107,6 +108,7 @@ ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[]) { "curvetest", 1, 0, 'C' }, { "save", 1, 0, 'E' }, { "uuid", 1, 0, 'U' }, + { "template", 1, 0, 'T' }, { 0, 0, 0, 0 } }; @@ -162,6 +164,9 @@ ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[]) case 'S': // ; just pass this through to gtk it will figure it out break; + case 'T': + load_template = optarg; + break; case 'N': new_session = true; diff --git a/gtk2_ardour/opts.h b/gtk2_ardour/opts.h index ffb309a088..c0b6e96aac 100644 --- a/gtk2_ardour/opts.h +++ b/gtk2_ardour/opts.h @@ -40,6 +40,7 @@ extern Glib::ustring menus_file; extern bool finder_invoked_ardour; extern std::string immediate_save; extern std::string jack_session_uuid; +extern std::string load_template; extern int32_t parse_opts (int argc, char *argv[]); diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc index b0a0233adb..d1fce023b2 100644 --- a/gtk2_ardour/startup.cc +++ b/gtk2_ardour/startup.cc @@ -142,9 +142,19 @@ ArdourStartup::set_new_only (bool yn) } } +void +ArdourStartup::set_load_template( string load_template ) +{ + use_template_button.set_active( false ); + load_template_override = load_template; +} + bool ArdourStartup::use_session_template () { + if (!load_template_override.empty()) + return true; + if (use_template_button.get_active()) { return template_chooser.get_active_row_number() > 0; } else { @@ -155,6 +165,11 @@ ArdourStartup::use_session_template () Glib::ustring ArdourStartup::session_template_name () { + if (!load_template_override.empty()) { + string the_path = (ARDOUR::user_template_directory()/ (load_template_override + ".template")).to_string(); + return the_path; + } + if (ic_existing_session_button.get_active()) { return ustring(); } diff --git a/gtk2_ardour/startup.h b/gtk2_ardour/startup.h index 8867c2dfb3..79c59544c5 100644 --- a/gtk2_ardour/startup.h +++ b/gtk2_ardour/startup.h @@ -30,6 +30,7 @@ class ArdourStartup : public Gtk::Assistant { ~ArdourStartup (); void set_new_only (bool); + void set_load_template( std::string load_template ); Glib::ustring session_name (bool& should_be_new); Glib::ustring session_folder (); @@ -177,6 +178,7 @@ class ArdourStartup : public Gtk::Assistant { Gtk::RadioButtonGroup session_template_group; Gtk::RadioButton use_session_as_template_button; Gtk::RadioButton use_template_button; + std::string load_template_override; void more_new_session_options_button_clicked(); void new_name_changed (); -- 2.30.2