diff options
author | rtk0c <[email protected]> | 2021-04-19 14:00:47 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2021-04-19 14:00:47 -0700 |
commit | 1e09caaa2980fe901453b4b90985967a51157887 (patch) | |
tree | df61974f9a5efa9a6732bd6d7b1ec1e6d1af182a /core/src/UI | |
parent | b00b306de1140cb7b759ed0f639e8210fd7dffa6 (diff) |
Split workflow into multiple files, fix unity build
Diffstat (limited to 'core/src/UI')
-rw-r--r-- | core/src/UI/UI_Workflows.cpp | 96 |
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(); } }; |