From d3fa128d5408673b0ea8d3ba3435c38b258a5e7a Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sat, 5 Jun 2021 14:58:09 -0700 Subject: Merge UIState into GlobalStates --- core/src/Model/GlobalStates.cpp | 25 +++++++++++++++++++++++++ core/src/Model/GlobalStates.hpp | 5 +++++ 2 files changed, 30 insertions(+) (limited to 'core/src/Model') 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) +{ + 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 mRecentProjects; + std::unique_ptr 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); + // TODO async autosaving to prevent data loss on crash void WriteToDisk() const; -- cgit v1.2.3-70-g09d2