From 1e09caaa2980fe901453b4b90985967a51157887 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Mon, 19 Apr 2021 14:00:47 -0700 Subject: Split workflow into multiple files, fix unity build --- core/src/UI/UI_Workflows.cpp | 96 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 78 insertions(+), 18 deletions(-) (limited to 'core/src/UI/UI_Workflows.cpp') 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 #include +#include #include namespace { @@ -13,12 +18,41 @@ class WorkflowCreationMenu { private: using WorkflowNodeConstructor = std::unique_ptr (*)(); + enum Category { + NumericCategory, + TextCategory, + DocumentsCategory, + UserInputCategory, + SystemInputCategory, + OutputCategory, + }; + struct Candidate { WorkflowNodeConstructor Constructor; + std::string Name; + Category Category; }; std::vector mCandidates; +#define SUB_RANGE_ACCESS(Type, AccessorName, storage, begin, nextBegin) \ + std::span 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 { return std::make_unique(NumericOperationNode::Addition); }, + .Name = "Add", + .Category = NumericCategory, }); - mCandidates.push_back(Candidate{ .Constructor = []() -> std::unique_ptr { return std::make_unique(NumericOperationNode::Subtraction); }, + .Name = "Subtract", + .Category = NumericCategory, }); - mCandidates.push_back(Candidate{ .Constructor = []() -> std::unique_ptr { return std::make_unique(NumericOperationNode::Multiplication); }, + .Name = "Multiply", + .Category = NumericCategory, }); - mCandidates.push_back(Candidate{ .Constructor = []() -> std::unique_ptr { return std::make_unique(NumericOperationNode::Division); }, + .Name = "Divide", + .Category = NumericCategory, + }); + mCandidates.push_back(Candidate{ + .Constructor = []() -> std::unique_ptr { return std::make_unique(); }, + .Name = "Evaluate expression", + .Category = NumericCategory, }); -// mCandidates.push_back(Candidate{ -// .Constructor = []() -> std::unique_ptr { return std::make_unique(); }, -// }); - + mTextOffset = mCandidates.size(); mCandidates.push_back(Candidate{ .Constructor = []() -> std::unique_ptr { return std::make_unique(); }, + .Name = "Fill template text", + .Category = TextCategory, + }); + + mDocumentOffset = mCandidates.size(); + mCandidates.push_back(Candidate{ + .Constructor = []() -> std::unique_ptr { return std::make_unique(); }, + .Name = "Document template", + .Category = Category::DocumentsCategory, + }); + + /* Inputs */ + + mUserInputOffset = mCandidates.size(); + mCandidates.push_back(Candidate{ + .Constructor = []() -> std::unique_ptr { return std::make_unique(); }, + .Name = "Input: form", + .Category = Category::UserInputCategory, + }); + + mCandidates.push_back(Candidate{ + .Constructor = []() -> std::unique_ptr { return std::make_unique(); }, + .Name = "Input: database rows", + .Category = Category::UserInputCategory, }); -// mCandidates.push_back(Candidate{ -// .Constructor = []() -> std::unique_ptr { return std::make_unique(); }, -// }); + mSystemInputNodes = mCandidates.size(); -// mCandidates.push_back(Candidate{ -// .Constructor = []() -> std::unique_ptr { return std::make_unique(); }, -// }); + /* Outputs */ -// mCandidates.push_back(Candidate{ -// .Constructor = []() -> std::unique_ptr { return std::make_unique(); }, -// }); + mOutputOffset = mCandidates.size(); } }; -- cgit v1.2.3-70-g09d2