From a180e1b56025c6b7d81d2e587ad90531d29de44c Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sat, 5 Jun 2021 19:44:54 -0700 Subject: Initial work on asset system (does not compile) --- core/src/Model/Workflow/Workflow.hpp | 25 +++++++++----- core/src/Model/Workflow/Workflow_Main.cpp | 56 ++++++++++++++++++++++++++++--- core/src/Model/Workflow/fwd.hpp | 2 +- 3 files changed, 68 insertions(+), 15 deletions(-) (limited to 'core/src/Model/Workflow') diff --git a/core/src/Model/Workflow/Workflow.hpp b/core/src/Model/Workflow/Workflow.hpp index c57ac31..51596e5 100644 --- a/core/src/Model/Workflow/Workflow.hpp +++ b/core/src/Model/Workflow/Workflow.hpp @@ -1,5 +1,6 @@ #pragma once +#include "Model/Assets.hpp" #include "Model/Workflow/Value.hpp" #include "Utils/Vector.hpp" #include "cplt_fwd.hpp" @@ -174,17 +175,12 @@ protected: void OnDetach(); }; -struct WorkflowInfo +class Workflow : public Asset { - std::filesystem::path Path; - std::string Name; - std::string PathStringCache = Path.string(); - - std::unique_ptr LoadFromDisk() const; -}; +public: + using CategoryType = WorkflowAssetCategory; + static constinit const WorkflowAssetCategory Category; -class Workflow -{ private: friend class WorkflowNode; friend class WorkflowEvaluationContext; @@ -279,3 +275,14 @@ private: std::pair AllocWorkflowConnection(); std::pair&, size_t> AllocWorkflowStep(); }; + +class WorkflowAssetCategory : public AssetCategory +{ +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 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 61cd510..0875f11 100644 --- a/core/src/Model/Workflow/Workflow_Main.cpp +++ b/core/src/Model/Workflow/Workflow_Main.cpp @@ -1,5 +1,8 @@ #include "Workflow.hpp" +#include "Model/GlobalStates.hpp" +#include "Model/Project.hpp" + #include #include #include @@ -9,6 +12,7 @@ #include #include +using namespace std::literals::string_view_literals; namespace ImNodes = ax::NodeEditor; WorkflowConnection::WorkflowConnection() @@ -320,17 +324,49 @@ void WorkflowNode::OnDetach() { } -std::unique_ptr WorkflowInfo::LoadFromDisk() const +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(this->Path); + std::ifstream ifs(diskForm.Path); if (!ifs) return nullptr; auto workflow = std::make_unique(); - if (workflow->ReadFrom(ifs) == Workflow::RR_Success) { - return workflow; + if (workflow->ReadFrom(ifs) != Workflow::RR_Success) { + return nullptr; } - 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 @@ -717,6 +753,16 @@ 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) { diff --git a/core/src/Model/Workflow/fwd.hpp b/core/src/Model/Workflow/fwd.hpp index d118fe8..8f0263d 100644 --- a/core/src/Model/Workflow/fwd.hpp +++ b/core/src/Model/Workflow/fwd.hpp @@ -18,5 +18,5 @@ class BaseObjectValue; // Workflow.hpp class WorkflowConnection; class WorkflowNode; -struct WorkflowInfo; class Workflow; +class WorkflowAssetCategory; -- cgit v1.2.3-70-g09d2