From c90f78df080a9891930ee346b0ad87498ba5b697 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sun, 30 May 2021 23:00:41 -0700 Subject: Initial work on templates UI --- core/src/Model/Project.cpp | 134 ++++++++++++++++++++++-------- core/src/Model/Project.hpp | 22 ++++- core/src/Model/Template/TableTemplate.cpp | 63 ++++++++++---- core/src/Model/Template/TableTemplate.hpp | 12 ++- core/src/Model/Template/Template.hpp | 45 ++++++++++ core/src/Model/Template/Template_Main.cpp | 5 ++ core/src/Model/Template/Template_RTTI.cpp | 21 +++++ core/src/Model/Template/fwd.hpp | 4 + core/src/Model/Workflow/Workflow.hpp | 2 +- core/src/Model/fwd.hpp | 2 + 10 files changed, 253 insertions(+), 57 deletions(-) create mode 100644 core/src/Model/Template/Template.hpp create mode 100644 core/src/Model/Template/Template_Main.cpp create mode 100644 core/src/Model/Template/Template_RTTI.cpp (limited to 'core/src/Model') diff --git a/core/src/Model/Project.cpp b/core/src/Model/Project.cpp index 2d7c82a..3cb3cb4 100644 --- a/core/src/Model/Project.cpp +++ b/core/src/Model/Project.cpp @@ -25,19 +25,19 @@ void ReadItemList(ItemList& list, const fs::path& filePath) } } -Project::Project(const fs::path& rootPath) - : mRootPath{ rootPath } +Project::Project(fs::path rootPath) + : mRootPath{ std::move(rootPath) } , mRootPathString{ mRootPath.string() } , Database(*this) { // TODO better diagnostic const char* kInvalidFormatErr = "Failed to load project: invalid format."; - std::ifstream ifs(rootPath / "cplt_project.json"); + std::ifstream ifs(mRootPath / "cplt_project.json"); if (!ifs) { std::string message; message += "Failed to load project file at '"; - message += rootPath.string(); + message += mRootPath.string(); message += "'."; throw std::runtime_error(message); } @@ -81,7 +81,7 @@ Project::Project(const fs::path& rootPath) } } -Project::Project(std::filesystem::path rootPath, std::string name) +Project::Project(fs::path rootPath, std::string name) : mRootPath{ std::move(rootPath) } , mRootPathString{ mRootPath.string() } , mName{ std::move(name) } @@ -99,6 +99,36 @@ const std::string& Project::GetPathString() const return mRootPathString; } +fs::path Project::GetDatabasesDirectory() const +{ + return mRootPath / "databases"; +} + +fs::path Project::GetItemsDirectory() const +{ + return mRootPath / "items"; +} + +fs::path Project::GetWorkflowsDirectory() const +{ + return mRootPath / "workflows"; +} + +fs::path Project::GetWorkflowPath(std::string_view name) const +{ + return (mRootPath / "workflows" / name).concat(".cplt-workflow"); +} + +fs::path Project::GetTemplatesDirectory() const +{ + return mRootPath / "templates"; +} + +fs::path Project::GetTemplatePath(std::string_view name) const +{ + return (mRootPath / "templates" / name).concat(".cplt-template"); +} + const std::string& Project::GetName() const { return mName; @@ -109,7 +139,7 @@ void Project::SetName(std::string name) mName = std::move(name); } -const decltype(Project::mWorkflows)& Project::GetWorkflows() const +const tsl::array_map& Project::GetWorkflows() const { return mWorkflows; } @@ -132,11 +162,12 @@ std::unique_ptr Project::CreateWorkflow(std::string_view name) } auto workflow = std::make_unique(); - auto [it, DISCARD] = mWorkflows.insert(name, WorkflowInfo{}); - auto& info = it.value(); - - info.Name = name; - info.Path = GetWorkflowPath(name); + auto [it, DISCARD] = mWorkflows.insert( + name, + WorkflowInfo{ + .Path = GetWorkflowPath(name), + .Name = std::string(name), + }); return workflow; } @@ -155,9 +186,9 @@ bool Project::RemoveWorkflow(std::string_view name) return true; } -bool Project::RenameWorkflow(std::string_view name, std::string_view newName) +bool Project::RenameWorkflow(std::string_view oldName, std::string_view newName) { - auto iter = mWorkflows.find(name); + auto iter = mWorkflows.find(oldName); if (iter == mWorkflows.end()) return false; auto info = std::move(iter.value()); @@ -173,6 +204,63 @@ bool Project::RenameWorkflow(std::string_view name, std::string_view newName) return true; } +const tsl::array_map& Project::GetTemplates() const +{ + return mTemplates; +} + +std::unique_ptr