diff options
author | rtk0c <[email protected]> | 2021-06-05 19:44:54 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2021-06-05 19:44:54 -0700 |
commit | a180e1b56025c6b7d81d2e587ad90531d29de44c (patch) | |
tree | 1c88361320371b508c81b52a28ae0579fcdd1fd7 /core/src/Model/Workflow | |
parent | d3fa128d5408673b0ea8d3ba3435c38b258a5e7a (diff) |
Initial work on asset system (does not compile)
Diffstat (limited to 'core/src/Model/Workflow')
-rw-r--r-- | core/src/Model/Workflow/Workflow.hpp | 25 | ||||
-rw-r--r-- | core/src/Model/Workflow/Workflow_Main.cpp | 56 | ||||
-rw-r--r-- | core/src/Model/Workflow/fwd.hpp | 2 |
3 files changed, 68 insertions, 15 deletions
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<Workflow> 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<WorkflowConnection&, size_t> AllocWorkflowConnection(); std::pair<std::unique_ptr<WorkflowNode>&, size_t> AllocWorkflowStep(); }; + +class WorkflowAssetCategory : public AssetCategory +{ +public: + virtual void DiscoverFiles(const std::function<void(SavedAsset)>& 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 <imgui.h> #include <imgui_node_editor.h> #include <tsl/robin_set.h> @@ -9,6 +12,7 @@ #include <queue> #include <utility> +using namespace std::literals::string_view_literals; namespace ImNodes = ax::NodeEditor; WorkflowConnection::WorkflowConnection() @@ -320,17 +324,49 @@ void WorkflowNode::OnDetach() { } -std::unique_ptr<Workflow> WorkflowInfo::LoadFromDisk() const +constinit const WorkflowAssetCategory Workflow::Category{}; + +void WorkflowAssetCategory::DiscoverFiles(const std::function<void(SavedAsset)>& 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<Workflow>(); - 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<WorkflowConnection>& 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<WorkflowConnection&, size_t> 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; |