diff options
Diffstat (limited to 'core/src/Model')
-rw-r--r-- | core/src/Model/GlobalStates.cpp | 25 | ||||
-rw-r--r-- | core/src/Model/GlobalStates.hpp | 5 |
2 files changed, 30 insertions, 0 deletions
diff --git a/core/src/Model/GlobalStates.cpp b/core/src/Model/GlobalStates.cpp index 2230367..a449afb 100644 --- a/core/src/Model/GlobalStates.cpp +++ b/core/src/Model/GlobalStates.cpp @@ -56,6 +56,9 @@ void GlobalStates::Init(std::filesystem::path userDataDir) void GlobalStates::Shutdown() { if (!globalStateInstance) return; + + globalStateInstance->SetCurrentProject(nullptr); + if (globalStateInstance->mDirty) { globalStateInstance->WriteToDisk(); } @@ -111,6 +114,28 @@ void GlobalStates::RemoveRecentProject(int idx) MarkDirty(); } +bool GlobalStates::HasCurrentProject() const +{ + return mCurrentProject != nullptr; +} + +Project* GlobalStates::GetCurrentProject() const +{ + return mCurrentProject.get(); +} + +void GlobalStates::SetCurrentProject(std::unique_ptr<Project> project) +{ + if (mCurrentProject) { + mCurrentProject->WriteToDisk(); + mCurrentProject = nullptr; + } + if (project) { + MoveProjectToTop(*project); + } + mCurrentProject = std::move(project); +} + void GlobalStates::WriteToDisk() const { Json::Value root; diff --git a/core/src/Model/GlobalStates.hpp b/core/src/Model/GlobalStates.hpp index 6970642..cc41bd5 100644 --- a/core/src/Model/GlobalStates.hpp +++ b/core/src/Model/GlobalStates.hpp @@ -28,6 +28,7 @@ public: private: std::vector<RecentProject> mRecentProjects; + std::unique_ptr<Project> mCurrentProject; mutable bool mDirty = false; public: @@ -40,6 +41,10 @@ public: void MoveProjectToTop(const Project& project); void RemoveRecentProject(int idx); + bool HasCurrentProject() const; + Project* GetCurrentProject() const; + void SetCurrentProject(std::unique_ptr<Project> project); + // TODO async autosaving to prevent data loss on crash void WriteToDisk() const; |