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.hpp18
-rw-r--r--core/src/Model/Workflow/Workflow_Main.cpp134
-rw-r--r--core/src/Model/Workflow/fwd.hpp2
3 files changed, 93 insertions, 61 deletions
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<std::unique_ptr<WorkflowNode>&, size_t> AllocWorkflowStep();
};
-class WorkflowAssetCategory : public AssetCategory
+class WorkflowAssetList final : public AssetListTyped<Workflow>
{
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 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 <imgui.h>
#include <imgui_node_editor.h>
#include <tsl/robin_set.h>
+#include <uuid.h>
#include <cassert>
#include <fstream>
#include <iostream>
@@ -13,6 +14,7 @@
#include <utility>
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<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(diskForm.Path);
- if (!ifs) return nullptr;
-
- auto workflow = std::make_unique<Workflow>();
- 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<WorkflowConnection>& 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<WorkflowConnection&, size_t> Workflow::AllocWorkflowConnection()
{
for (size_t idx = 0; idx < mConnections.size(); ++idx) {
@@ -793,3 +740,80 @@ std::pair<std::unique_ptr<WorkflowNode>&, size_t> Workflow::AllocWorkflowStep()
return { node, id };
}
+
+void WorkflowAssetList::DiscoverFiles(const std::function<void(SavedAsset)>& 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<Workflow>();
+ 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;