From d7ee2efaca226fc478e3f0c78abdbe86a887f17a Mon Sep 17 00:00:00 2001 From: rtk0c Date: Mon, 7 Jun 2021 12:19:51 -0700 Subject: Complete asset loading/saving and UI management logic --- core/src/Model/Workflow/Workflow.hpp | 18 ++-- core/src/Model/Workflow/Workflow_Main.cpp | 134 ++++++++++++++++++------------ core/src/Model/Workflow/fwd.hpp | 2 +- 3 files changed, 93 insertions(+), 61 deletions(-) (limited to 'core/src/Model/Workflow') diff --git a/core/src/Model/Workflow/Workflow.hpp b/core/src/Model/Workflow/Workflow.hpp index 51596e5..8b3db8a 100644 --- a/core/src/Model/Workflow/Workflow.hpp +++ b/core/src/Model/Workflow/Workflow.hpp @@ -178,8 +178,8 @@ protected: class Workflow : public Asset { public: - using CategoryType = WorkflowAssetCategory; - static constinit const WorkflowAssetCategory Category; + using CategoryType = WorkflowAssetList; + static constinit const WorkflowAssetList Category; private: friend class WorkflowNode; @@ -276,12 +276,20 @@ private: std::pair&, size_t> AllocWorkflowStep(); }; -class WorkflowAssetCategory : public AssetCategory +class WorkflowAssetList final : public AssetListTyped { public: virtual void DiscoverFiles(const std::function& callback) const override; - virtual Workflow* CreateEmpty(const SavedAsset& diskForm) const override; - virtual Workflow* Load(const SavedAsset& diskForm) const override; + + virtual std::string RetrieveNameFromFile(const std::filesystem::path& file) const override; + virtual uuids::uuid RetrieveUuidFromFile(const std::filesystem::path& file) const override; + virtual std::filesystem::path RetrievePathFromAsset(const SavedAsset& asset) const override; + + virtual void SaveEmptyInstance(const SavedAsset& asset) const override; + virtual Workflow* CreateEmptyInstance(const SavedAsset& diskForm) const override; + + virtual Workflow* LoadImpl(const SavedAsset& diskForm) const override; + virtual void SetupDetailsTable(const char* tableId) const override; virtual void DrawBigIcon(const SavedAsset& asset) const override; virtual void DrawDetailsTableRow(const SavedAsset& asset) const override; diff --git a/core/src/Model/Workflow/Workflow_Main.cpp b/core/src/Model/Workflow/Workflow_Main.cpp index 0875f11..202818f 100644 --- a/core/src/Model/Workflow/Workflow_Main.cpp +++ b/core/src/Model/Workflow/Workflow_Main.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -13,6 +14,7 @@ #include using namespace std::literals::string_view_literals; +namespace fs = std::filesystem; namespace ImNodes = ax::NodeEditor; WorkflowConnection::WorkflowConnection() @@ -324,51 +326,6 @@ void WorkflowNode::OnDetach() { } -constinit const WorkflowAssetCategory Workflow::Category{}; - -void WorkflowAssetCategory::DiscoverFiles(const std::function& callback) const -{ - auto& gs = GlobalStates::GetInstance(); - DiscoverFilesByExtension(callback, gs.GetCurrentProject()->GetWorkflowsDirectory(), ".cplt-workflow"sv); -} - -Workflow* WorkflowAssetCategory::CreateEmpty(const SavedAsset& diskForm) const -{ - // TODO -} - -Workflow* WorkflowAssetCategory::Load(const SavedAsset& diskForm) const -{ - std::ifstream ifs(diskForm.Path); - if (!ifs) return nullptr; - - auto workflow = std::make_unique(); - if (workflow->ReadFrom(ifs) != Workflow::RR_Success) { - return nullptr; - } - - return workflow.release(); -} - -void WorkflowAssetCategory::SetupDetailsTable(const char* tableId) const -{ - ImGui::BeginTable(tableId, 2); - - ImGui::TableSetupColumn("Name"); - ImGui::TableSetupColumn("Modified time"); - ImGui::TableHeadersRow(); -} - -void WorkflowAssetCategory::DrawBigIcon(const SavedAsset& asset) const -{ - // TODO -} - -void WorkflowAssetCategory::DrawDetailsTableRow(const SavedAsset& asset) const -{ - // TODO -} - const std::vector& Workflow::GetConnections() const { return mConnections; @@ -753,16 +710,6 @@ void Workflow::WriteTo(std::ostream& stream) } } -void Workflow::DrawBigIcon() const -{ - // TODO -} - -void Workflow::DrawDetailTableRow() const -{ - // TODO -} - std::pair Workflow::AllocWorkflowConnection() { for (size_t idx = 0; idx < mConnections.size(); ++idx) { @@ -793,3 +740,80 @@ std::pair&, size_t> Workflow::AllocWorkflowStep() return { node, id }; } + +void WorkflowAssetList::DiscoverFiles(const std::function& callback) const +{ + auto& gs = GlobalStates::GetInstance(); + DiscoverFilesByExtension(callback, gs.GetCurrentProject()->GetWorkflowsDirectory(), ".cplt-workflow"sv); +} + +std::string WorkflowAssetList::RetrieveNameFromFile(const fs::path& file) const +{ + std::ifstream ifs(file); + if (!ifs) return ""; + + std::string name; + ifs >> name; + return name; +} + +uuids::uuid WorkflowAssetList::RetrieveUuidFromFile(const fs::path& file) const +{ + return uuids::uuid::from_string(file.stem().string()); +} + +fs::path WorkflowAssetList::RetrievePathFromAsset(const SavedAsset& asset) const +{ + auto uuid = uuids::uuid_random_generator{}(); + auto fileName = uuids::to_string(uuid); + fileName.append(".cplt-workflow"); + + auto& gs = GlobalStates::GetInstance(); + return gs.GetCurrentProject()->GetTemplatePath(fileName); +} + +void WorkflowAssetList::SaveEmptyInstance(const SavedAsset& asset) const +{ + auto path = RetrievePathFromAsset(asset); + + std::ofstream ofs(path); + if (!ofs) return; + ofs << asset.Name; +} + +Workflow* WorkflowAssetList::CreateEmptyInstance(const SavedAsset& asset) const +{ + return new Workflow(); +} + +Workflow* WorkflowAssetList::LoadImpl(const SavedAsset& asset) const +{ + std::ifstream ifs(RetrievePathFromAsset(asset)); + if (!ifs) return nullptr; + + auto workflow = std::make_unique(); + if (workflow->ReadFrom(ifs) != Workflow::RR_Success) { + return nullptr; + } + + return workflow.release(); +} + +void WorkflowAssetList::SetupDetailsTable(const char* tableId) const +{ + ImGui::BeginTable(tableId, 2); + + ImGui::TableSetupColumn("Name"); + ImGui::TableSetupColumn("Modified time"); + ImGui::TableHeadersRow(); +} + +void WorkflowAssetList::DrawBigIcon(const SavedAsset& asset) const +{ + // TODO +} + +void WorkflowAssetList::DrawDetailsTableRow(const SavedAsset& asset) const +{ + // TODO +} diff --git a/core/src/Model/Workflow/fwd.hpp b/core/src/Model/Workflow/fwd.hpp index 8f0263d..ed39bdb 100644 --- a/core/src/Model/Workflow/fwd.hpp +++ b/core/src/Model/Workflow/fwd.hpp @@ -19,4 +19,4 @@ class BaseObjectValue; class WorkflowConnection; class WorkflowNode; class Workflow; -class WorkflowAssetCategory; +class WorkflowAssetList; -- cgit v1.2.3-70-g09d2