aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Workflow
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/Model/Workflow')
-rw-r--r--core/src/Model/Workflow/Workflow.hpp16
-rw-r--r--core/src/Model/Workflow/Workflow_Main.cpp14
-rw-r--r--core/src/Model/Workflow/fwd.hpp11
3 files changed, 36 insertions, 5 deletions
diff --git a/core/src/Model/Workflow/Workflow.hpp b/core/src/Model/Workflow/Workflow.hpp
index 0aabcdc..99e4e90 100644
--- a/core/src/Model/Workflow/Workflow.hpp
+++ b/core/src/Model/Workflow/Workflow.hpp
@@ -7,6 +7,7 @@
#include <imgui_node_editor.h>
#include <cstddef>
#include <cstdint>
+#include <filesystem>
#include <iosfwd>
#include <limits>
#include <memory>
@@ -135,14 +136,14 @@ public:
void DisconnectInput(uint32_t pinId);
void DrawInputPinDebugInfo(uint32_t pinId) const;
- const InputPin& GetInputPin(uint32_t pinId)const ;
+ const InputPin& GetInputPin(uint32_t pinId) const;
ImNodes::PinId GetInputPinUniqueId(uint32_t pinId) const;
void ConnectOutput(uint32_t pinId, WorkflowNode& dstNode, uint32_t dstPinId);
void DisconnectOutput(uint32_t pinId);
- void DrawOutputPinDebugInfo(uint32_t pinId)const;
- const OutputPin& GetOutputPin(uint32_t pinId)const ;
+ void DrawOutputPinDebugInfo(uint32_t pinId) const;
+ const OutputPin& GetOutputPin(uint32_t pinId) const;
ImNodes::PinId GetOutputPinUniqueId(uint32_t pinId) const;
virtual void Evaluate(WorkflowEvaluationContext& ctx) = 0;
@@ -170,6 +171,15 @@ protected:
void OnDetach();
};
+struct WorkflowInfo
+{
+ std::string Name;
+ std::string PathStringCache = Path.string();
+ std::filesystem::path Path;
+
+ std::unique_ptr<Workflow> LoadFromDisk() const;
+};
+
class Workflow
{
private:
diff --git a/core/src/Model/Workflow/Workflow_Main.cpp b/core/src/Model/Workflow/Workflow_Main.cpp
index c9ae328..bfe007c 100644
--- a/core/src/Model/Workflow/Workflow_Main.cpp
+++ b/core/src/Model/Workflow/Workflow_Main.cpp
@@ -4,6 +4,7 @@
#include <imgui_node_editor.h>
#include <tsl/robin_set.h>
#include <cassert>
+#include <fstream>
#include <iostream>
#include <queue>
#include <utility>
@@ -319,6 +320,19 @@ void WorkflowNode::OnDetach()
{
}
+std::unique_ptr<Workflow> WorkflowInfo::LoadFromDisk() const
+{
+ std::ifstream ifs(this->Path);
+ if (!ifs) return nullptr;
+
+ auto workflow = std::make_unique<Workflow>();
+ if (workflow->ReadFrom(ifs) == Workflow::RR_Success) {
+ return workflow;
+ }
+
+ return nullptr;
+}
+
const std::vector<WorkflowConnection>& Workflow::GetConnections() const
{
return mConnections;
diff --git a/core/src/Model/Workflow/fwd.hpp b/core/src/Model/Workflow/fwd.hpp
index 2323a91..b541e52 100644
--- a/core/src/Model/Workflow/fwd.hpp
+++ b/core/src/Model/Workflow/fwd.hpp
@@ -3,12 +3,19 @@
#include "Model/Workflow/Nodes/fwd.hpp"
#include "Model/Workflow/Values/fwd.hpp"
+// Evaluation.hpp
+class WorkflowEvaluationError;
+class WorkflowEvaluationContext;
+
+// SavedWorkflow.hpp
+class SavedWorkflowCache;
+class SavedWorkflow;
+
// Value.hpp
class BaseValue;
// Workflow.hpp
class WorkflowConnection;
class WorkflowNode;
+struct WorkflowInfo;
class Workflow;
-class WorkflowEvaluationError;
-class WorkflowEvaluationContext;