summaryrefslogtreecommitdiff
path: root/gtk2_ardour/startup_fsm.h
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2019-10-24 21:14:00 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2019-10-24 21:32:46 -0600
commit48161d7f517992522af5d9179abdaf926cc75a22 (patch)
tree223fb02859ad573f9f24748ec28b63bc179220e5 /gtk2_ardour/startup_fsm.h
parenteeb57bfef18683480fa57c3c5c33f01a1f772358 (diff)
somewhat substantial changes to StartupFSM to try to get relationships betweem various dialogs, plugin scanning and splash screen correct
Added extensive comments to try to explain the nightmare of plugin discovery
Diffstat (limited to 'gtk2_ardour/startup_fsm.h')
-rw-r--r--gtk2_ardour/startup_fsm.h40
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;