aboutsummaryrefslogtreecommitdiff
path: root/core/src/UI
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2021-04-19 14:00:47 -0700
committerrtk0c <[email protected]>2021-04-19 14:00:47 -0700
commit1e09caaa2980fe901453b4b90985967a51157887 (patch)
treedf61974f9a5efa9a6732bd6d7b1ec1e6d1af182a /core/src/UI
parentb00b306de1140cb7b759ed0f639e8210fd7dffa6 (diff)
Split workflow into multiple files, fix unity build
Diffstat (limited to 'core/src/UI')
-rw-r--r--core/src/UI/UI_Workflows.cpp96
1 files changed, 78 insertions, 18 deletions
diff --git a/core/src/UI/UI_Workflows.cpp b/core/src/UI/UI_Workflows.cpp
index 101fa7b..0adfdc2 100644
--- a/core/src/UI/UI_Workflows.cpp
+++ b/core/src/UI/UI_Workflows.cpp
@@ -1,11 +1,16 @@
#include "UI.hpp"
-#include "Model/Workflow.hpp"
-#include "Model/WorkflowNodes.hpp"
+#include "Model/Workflow/Nodes/DocumentNodes.hpp"
+#include "Model/Workflow/Nodes/NumericNodes.hpp"
+#include "Model/Workflow/Nodes/TextNodes.hpp"
+#include "Model/Workflow/Nodes/UserInputNodes.hpp"
+#include "Model/Workflow/Workflow.hpp"
#include "UI/Localization.hpp"
+#include "Utils/Macros.hpp"
#include <imgui.h>
#include <memory>
+#include <span>
#include <vector>
namespace {
@@ -13,12 +18,41 @@ class WorkflowCreationMenu {
private:
using WorkflowNodeConstructor = std::unique_ptr<WorkflowNode> (*)();
+ enum Category {
+ NumericCategory,
+ TextCategory,
+ DocumentsCategory,
+ UserInputCategory,
+ SystemInputCategory,
+ OutputCategory,
+ };
+
struct Candidate {
WorkflowNodeConstructor Constructor;
+ std::string Name;
+ Category Category;
};
std::vector<Candidate> mCandidates;
+#define SUB_RANGE_ACCESS(Type, AccessorName, storage, begin, nextBegin) \
+ std::span<Type> AccessorName() { return { &storage[begin], (size_t)(nextBegin - begin) }; }
+
+ int mTextOffset;
+ int mDocumentOffset;
+ int mUserInputOffset;
+ int mSystemInputNodes;
+ int mOutputOffset;
+
+ SUB_RANGE_ACCESS(Candidate, GetNumericNodes, mCandidates, 0, mTextOffset);
+ SUB_RANGE_ACCESS(Candidate, GetTextNodes, mCandidates, mTextOffset, mDocumentOffset);
+ SUB_RANGE_ACCESS(Candidate, GetDocumentNodes, mCandidates, mDocumentOffset, mUserInputOffset);
+ SUB_RANGE_ACCESS(Candidate, GetUserInputNodes, mCandidates, mUserInputOffset, mSystemInputNodes);
+ SUB_RANGE_ACCESS(Candidate, GetSystemInputNodes, mCandidates, mSystemInputNodes, mOutputOffset);
+ SUB_RANGE_ACCESS(Candidate, GetOutputNodes, mCandidates, mOutputOffset, mCandidates.size());
+
+#undef SUB_RANGE_ACCESS
+
public:
WorkflowCreationMenu() {
SetupCandidates();
@@ -26,41 +60,67 @@ public:
private:
void SetupCandidates() {
+ // Numeric nodes offset start at 0
mCandidates.push_back(Candidate{
.Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericOperationNode>(NumericOperationNode::Addition); },
+ .Name = "Add",
+ .Category = NumericCategory,
});
-
mCandidates.push_back(Candidate{
.Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericOperationNode>(NumericOperationNode::Subtraction); },
+ .Name = "Subtract",
+ .Category = NumericCategory,
});
-
mCandidates.push_back(Candidate{
.Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericOperationNode>(NumericOperationNode::Multiplication); },
+ .Name = "Multiply",
+ .Category = NumericCategory,
});
-
mCandidates.push_back(Candidate{
.Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericOperationNode>(NumericOperationNode::Division); },
+ .Name = "Divide",
+ .Category = NumericCategory,
+ });
+ mCandidates.push_back(Candidate{
+ .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericExpressionNode>(); },
+ .Name = "Evaluate expression",
+ .Category = NumericCategory,
});
-// mCandidates.push_back(Candidate{
-// .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericExpressionNode>(); },
-// });
-
+ mTextOffset = mCandidates.size();
mCandidates.push_back(Candidate{
.Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<TextFormatterNode>(); },
+ .Name = "Fill template text",
+ .Category = TextCategory,
+ });
+
+ mDocumentOffset = mCandidates.size();
+ mCandidates.push_back(Candidate{
+ .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<DocumentTemplateExpansionNode>(); },
+ .Name = "Document template",
+ .Category = Category::DocumentsCategory,
+ });
+
+ /* Inputs */
+
+ mUserInputOffset = mCandidates.size();
+ mCandidates.push_back(Candidate{
+ .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<FormInputNode>(); },
+ .Name = "Input: form",
+ .Category = Category::UserInputCategory,
+ });
+
+ mCandidates.push_back(Candidate{
+ .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<DatabaseRowsInputNode>(); },
+ .Name = "Input: database rows",
+ .Category = Category::UserInputCategory,
});
-// mCandidates.push_back(Candidate{
-// .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<DocumentTemplateExpansionNode>(); },
-// });
+ mSystemInputNodes = mCandidates.size();
-// mCandidates.push_back(Candidate{
-// .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<FormInputNode>(); },
-// });
+ /* Outputs */
-// mCandidates.push_back(Candidate{
-// .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<DatabaseRowsInputNode>(); },
-// });
+ mOutputOffset = mCandidates.size();
}
};