summaryrefslogtreecommitdiff
path: root/core/src/Model
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/Model')
-rw-r--r--core/src/Model/GlobalStates.cpp25
-rw-r--r--core/src/Model/GlobalStates.hpp5
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;