aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Workflow
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2021-06-05 19:44:54 -0700
committerrtk0c <[email protected]>2021-06-05 19:44:54 -0700
commita180e1b56025c6b7d81d2e587ad90531d29de44c (patch)
tree1c88361320371b508c81b52a28ae0579fcdd1fd7 /core/src/Model/Workflow
parentd3fa128d5408673b0ea8d3ba3435c38b258a5e7a (diff)
Initial work on asset system (does not compile)
Diffstat (limited to 'core/src/Model/Workflow')
-rw-r--r--core/src/Model/Workflow/Workflow.hpp25
-rw-r--r--core/src/Model/Workflow/Workflow_Main.cpp56
-rw-r--r--core/src/Model/Workflow/fwd.hpp2
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;