diff options
Diffstat (limited to 'gtk2_ardour/startup_fsm.h')
-rw-r--r-- | gtk2_ardour/startup_fsm.h | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/gtk2_ardour/startup_fsm.h b/gtk2_ardour/startup_fsm.h index ed3fc6ca00..54576ea2e8 100644 --- a/gtk2_ardour/startup_fsm.h +++ b/gtk2_ardour/startup_fsm.h @@ -25,9 +25,11 @@ #include "ardour/types.h" +class ArdourDialog; class NewUserWizard; class EngineControl; class SessionDialog; +class PluginScanDialog; class StartupFSM : public sigc::trackable { @@ -36,7 +38,8 @@ class StartupFSM : public sigc::trackable PreReleaseDialog, NewUserDialog, NewSessionDialog, - AudioMIDISetup + AudioMIDISetup, + PluginDialog }; enum Result { @@ -44,11 +47,19 @@ class StartupFSM : public sigc::trackable ExitProgram, }; + enum MainState { + WaitingForPreRelease, + WaitingForNewUser, + WaitingForSessionPath, + WaitingForEngineParams, + WaitingForPlugins + }; + StartupFSM (EngineControl&); ~StartupFSM (); void start (); - void end (); + void reset (); std::string session_path; std::string session_name; @@ -66,24 +77,21 @@ class StartupFSM : public sigc::trackable bool brand_new_user() const { return new_user; } private: - enum MainState { - NeedPreRelease, - NeedWizard, - NeedSessionPath, - NeedEngineParams, - }; - bool new_user; - bool new_session; + bool new_session_required; MainState _state; + void set_state (MainState); void dialog_response_handler (int response, DialogID); + template<typename T> void end_dialog (T**); + template<typename T> void end_dialog (T&); - void show_new_user_wizard (); + void show_new_user_dialog (); void show_session_dialog (bool new_session_required); void show_audiomidi_dialog (); void show_pre_release_dialog (); + void show_plugin_scan_dialog (); void copy_demo_sessions (); void load_from_application_api (std::string const &); @@ -93,11 +101,19 @@ class StartupFSM : public sigc::trackable bool ask_about_loading_existing_session (const std::string& session_path); int check_session_parameters (bool must_be_new); void start_audio_midi_setup (); + void engine_running (); + + /* the Audio/MIDI dialog needs to be persistent and is thus owned by + * ARDOUR_UI and we use it by reference. All other dialogs can be + * created and destroyed within the scope of startup. + */ - NewUserWizard* new_user_wizard; EngineControl& audiomidi_dialog; + NewUserWizard* new_user_dialog; SessionDialog* session_dialog; ArdourDialog* pre_release_dialog; + PluginScanDialog* plugin_scan_dialog; + sigc::connection current_dialog_connection; sigc::signal1<void,Result> _signal_response; |