/** @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 ();
}
_startup->set_new_only (should_be_new);
+ if (!load_template.empty()) {
+ _startup->set_load_template( load_template );
+ }
_startup->present ();
main().run();
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);
}
/** @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;
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()) {
} 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);
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; }
_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);
/* 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));
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;
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")) {
{ "curvetest", 1, 0, 'C' },
{ "save", 1, 0, 'E' },
{ "uuid", 1, 0, 'U' },
+ { "template", 1, 0, 'T' },
{ 0, 0, 0, 0 }
};
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;
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[]);
}
}
+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 {
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();
}
~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 ();
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 ();