From 5d4ad01b58531a520805420be4b076aa119f8869 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 24 Mar 2020 10:38:24 -0600 Subject: [PATCH] introduce the idea of an "unnamed" session (GUI edition) --- gtk2_ardour/ardour_ui.h | 6 +++--- gtk2_ardour/ardour_ui_session.cc | 18 +++++++++--------- gtk2_ardour/ardour_ui_startup.cc | 3 ++- gtk2_ardour/startup_fsm.cc | 2 ++ gtk2_ardour/startup_fsm.h | 2 ++ 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 7d55b976af..3daa145ff8 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -212,7 +212,7 @@ public: int load_session (const std::string& path, const std::string& snapshot, std::string mix_template = std::string()); bool session_load_in_progress; - int build_session (std::string const& path, std::string const& snapshot, std::string const& session_template, ARDOUR::BusProfile const&, bool from_startup_fsm = false); + int build_session (std::string const& path, std::string const& snapshot, std::string const& session_template, ARDOUR::BusProfile const&, bool from_startup_fsm, bool unnamed); bool session_is_new() const { return _session_is_new; } ARDOUR::Session* the_session() { return _session; } @@ -445,8 +445,8 @@ private: void audio_midi_setup_reconfigure_done (int response, std::string path, std::string snapshot, std::string mix_template); int load_session_stage_two (const std::string& path, const std::string& snapshot, std::string mix_template = std::string()); - void audio_midi_setup_for_new_session_done (int response, std::string path, std::string snapshot, std::string session_template, ARDOUR::BusProfile const&); - int build_session_stage_two (std::string const& path, std::string const& snapshot, std::string const& session_template, ARDOUR::BusProfile const&); + void audio_midi_setup_for_new_session_done (int response, std::string path, std::string snapshot, std::string session_template, ARDOUR::BusProfile const&, bool unnamed); + int build_session_stage_two (std::string const& path, std::string const& snapshot, std::string const& session_template, ARDOUR::BusProfile const&, bool unnamed); sigc::connection _engine_dialog_connection; void save_session_at_its_request (std::string); diff --git a/gtk2_ardour/ardour_ui_session.cc b/gtk2_ardour/ardour_ui_session.cc index 3c7060d1e7..2cd8dc5940 100644 --- a/gtk2_ardour/ardour_ui_session.cc +++ b/gtk2_ardour/ardour_ui_session.cc @@ -120,7 +120,7 @@ ARDOUR_UI::build_session_from_dialog (SessionDialog& sd, const std::string& sess bus_profile.master_out_channels = (uint32_t) sd.master_channel_count(); } - build_session (session_path, session_name, session_template, bus_profile); + build_session (session_path, session_name, session_template, bus_profile, false, !sd.was_new_name_edited()); } /** This is only ever used once Ardour is already running with a session @@ -552,7 +552,7 @@ ARDOUR_UI::load_session_stage_two (const std::string& path, const std::string& s } int -ARDOUR_UI::build_session (const std::string& path, const std::string& snap_name, const std::string& session_template, BusProfile const& bus_profile, bool from_startup_fsm) +ARDOUR_UI::build_session (const std::string& path, const std::string& snap_name, const std::string& session_template, BusProfile const& bus_profile, bool from_startup_fsm, bool unnamed) { int x; @@ -571,11 +571,11 @@ ARDOUR_UI::build_session (const std::string& path, const std::string& snap_name, * asked for the SR (even if try-autostart-engine is set) */ if (from_startup_fsm && AudioEngine::instance()->running ()) { - return build_session_stage_two (path, snap_name, session_template, bus_profile); + return build_session_stage_two (path, snap_name, session_template, bus_profile, unnamed); } /* Sample-rate cannot be changed when JACK is running */ if (!ARDOUR::AudioEngine::instance()->setup_required () && AudioEngine::instance()->running ()) { - return build_session_stage_two (path, snap_name, session_template, bus_profile); + return build_session_stage_two (path, snap_name, session_template, bus_profile, unnamed); } /* Work-around missing "OK" button: @@ -591,7 +591,7 @@ ARDOUR_UI::build_session (const std::string& path, const std::string& snap_name, audio_midi_setup->set_position (WIN_POS_CENTER); audio_midi_setup->set_modal (); audio_midi_setup->present (); - _engine_dialog_connection = audio_midi_setup->signal_response().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::audio_midi_setup_for_new_session_done), path, snap_name, session_template, bus_profile)); + _engine_dialog_connection = audio_midi_setup->signal_response().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::audio_midi_setup_for_new_session_done), path, snap_name, session_template, bus_profile, unnamed)); /* not done yet, but we're avoiding modal dialogs */ return 0; @@ -599,7 +599,7 @@ ARDOUR_UI::build_session (const std::string& path, const std::string& snap_name, void -ARDOUR_UI::audio_midi_setup_for_new_session_done (int response, std::string path, std::string snap_name, std::string template_name, BusProfile const& bus_profile) +ARDOUR_UI::audio_midi_setup_for_new_session_done (int response, std::string path, std::string snap_name, std::string template_name, BusProfile const& bus_profile, bool unnamed) { _engine_dialog_connection.disconnect (); @@ -617,18 +617,18 @@ ARDOUR_UI::audio_midi_setup_for_new_session_done (int response, std::string path audio_midi_setup->set_modal (false); audio_midi_setup->hide(); - build_session_stage_two (path, snap_name, template_name, bus_profile); + build_session_stage_two (path, snap_name, template_name, bus_profile, unnamed); } int -ARDOUR_UI::build_session_stage_two (std::string const& path, std::string const& snap_name, std::string const& session_template, BusProfile const& bus_profile) +ARDOUR_UI::build_session_stage_two (std::string const& path, std::string const& snap_name, std::string const& session_template, BusProfile const& bus_profile, bool unnamed) { Session* new_session; bool meta_session = !session_template.empty() && session_template.substr (0, 11) == "urn:ardour:"; try { - new_session = new Session (*AudioEngine::instance(), path, snap_name, bus_profile.master_out_channels > 0 ? &bus_profile : NULL, meta_session ? "" : session_template); + new_session = new Session (*AudioEngine::instance(), path, snap_name, bus_profile.master_out_channels > 0 ? &bus_profile : NULL, meta_session ? "" : session_template, unnamed); } catch (SessionException const& e) { stringstream ss; diff --git a/gtk2_ardour/ardour_ui_startup.cc b/gtk2_ardour/ardour_ui_startup.cc index 6178282a21..080b12fc4f 100644 --- a/gtk2_ardour/ardour_ui_startup.cc +++ b/gtk2_ardour/ardour_ui_startup.cc @@ -525,12 +525,13 @@ ARDOUR_UI::load_session_from_startup_fsm () const string session_template = startup_fsm->session_template; const bool session_is_new = startup_fsm->session_is_new; const BusProfile bus_profile = startup_fsm->bus_profile; + const bool session_was_not_named = !startup_fsm->session_name_edited; std::cerr << " loading from " << session_path << " as " << session_name << " templ " << session_template << " is_new " << session_is_new << " bp " << bus_profile.master_out_channels << std::endl; if (session_is_new) { - if (build_session (session_path, session_name, session_template, bus_profile, true)) { + if (build_session (session_path, session_name, session_template, bus_profile, true, session_was_not_named)) { return -1; } return 0; diff --git a/gtk2_ardour/startup_fsm.cc b/gtk2_ardour/startup_fsm.cc index 6f05fe2f71..40b6814cea 100644 --- a/gtk2_ardour/startup_fsm.cc +++ b/gtk2_ardour/startup_fsm.cc @@ -69,6 +69,7 @@ using std::vector; StartupFSM::StartupFSM (EngineControl& amd) : session_existing_sample_rate (0) , session_is_new (false) + , session_name_edited (false) , new_user (NewUserWizard::required()) , new_session_required (ARDOUR_COMMAND_LINE::new_session || (!ARDOUR::Profile->get_mixbus() && new_user)) , _state (new_user ? WaitingForNewUser : WaitingForSessionPath) @@ -657,6 +658,7 @@ StartupFSM::check_session_parameters (bool must_be_new) session_name = session_dialog->session_name (requested_new); session_path = session_dialog->session_folder (); + session_name_edited = session_dialog->was_new_name_edited (); if (must_be_new) { assert (requested_new); diff --git a/gtk2_ardour/startup_fsm.h b/gtk2_ardour/startup_fsm.h index 21ad940d34..3757fc919d 100644 --- a/gtk2_ardour/startup_fsm.h +++ b/gtk2_ardour/startup_fsm.h @@ -67,6 +67,8 @@ class StartupFSM : public sigc::trackable std::string session_template; int session_existing_sample_rate; bool session_is_new; + bool session_name_edited; + ARDOUR::BusProfile bus_profile; /* It's not a dialog but we provide this to make it behave like a (non-modal)