aboutsummaryrefslogtreecommitdiff
path: root/core/src/UI/UI_Workflows.cpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2021-06-13 17:16:46 -0700
committerrtk0c <[email protected]>2021-06-13 17:16:46 -0700
commitd3a9d7565b18404b2042c9dc025cc690250cb50c (patch)
tree4ae8a189326ff21bdf762b7d1bcb8f960aa5ea29 /core/src/UI/UI_Workflows.cpp
parentcf05728bc11aae1bb9545d4b0242a36dd14c7061 (diff)
Move UI_Workflows.cpp > WorkflowCategory to be a part of WorkflowNode's RTTI
(cherry picked from commit f45084562cfc95392b4dfb968dd215c25be3fc67)
Diffstat (limited to 'core/src/UI/UI_Workflows.cpp')
-rw-r--r--core/src/UI/UI_Workflows.cpp143
1 files changed, 9 insertions, 134 deletions
diff --git a/core/src/UI/UI_Workflows.cpp b/core/src/UI/UI_Workflows.cpp
index 68fd3ee..e61e934 100644
--- a/core/src/UI/UI_Workflows.cpp
+++ b/core/src/UI/UI_Workflows.cpp
@@ -21,126 +21,10 @@
namespace ImNodes = ax::NodeEditor;
namespace {
-enum class WorkflowCategory
-{
- Numeric,
- Text,
- Documents,
- UserInput,
- SystemInput,
- Output,
-};
-
-class WorkflowDatabase
-{
-public:
- using WorkflowNodeConstructor = std::unique_ptr<WorkflowNode> (*)();
-
- struct Candidate
- {
- WorkflowNodeConstructor Constructor;
- std::string Name;
- WorkflowCategory Category;
- };
-
-private:
- std::vector<Candidate> mCandidates;
-
- int mTextOffset;
- int mDocumentOffset;
- int mUserInputOffset;
- int mSystemInputNodes;
- int mOutputOffset;
-
-public:
- // clang-format off
- std::span<Candidate> GetNumericNodes() { return { &mCandidates[0], (size_t)(mTextOffset - 0) }; };
- std::span<Candidate> GetTextNodes() { return { &mCandidates[mTextOffset], (size_t)(mDocumentOffset - mTextOffset) }; };
- std::span<Candidate> GetDocumentNodes() { return { &mCandidates[mDocumentOffset], (size_t)(mUserInputOffset - mDocumentOffset) }; };
- std::span<Candidate> GetUserInputNodes() { return { &mCandidates[mUserInputOffset], (size_t)(mSystemInputNodes - mUserInputOffset) }; };
- std::span<Candidate> GetSystemInputNodes() { return { &mCandidates[mSystemInputNodes], (size_t)(mOutputOffset - mSystemInputNodes) }; };
- std::span<Candidate> GetOutputNodes() { return { &mCandidates[mOutputOffset], (size_t)(mCandidates.size() - mOutputOffset) }; };
- // clang-format on
-
-public:
- static WorkflowDatabase& GetInstance()
- {
- static WorkflowDatabase database;
- return database;
- }
-
-public:
- WorkflowDatabase()
- {
- // Numeric nodes offset start at 0
- mCandidates.push_back(Candidate{
- .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericOperationNode>(NumericOperationNode::Addition); },
- .Name = I18N_TEXT("Add", L10N_WORKFLOW_ADD),
- .Category = WorkflowCategory::Numeric,
- });
- mCandidates.push_back(Candidate{
- .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericOperationNode>(NumericOperationNode::Subtraction); },
- .Name = I18N_TEXT("Subtract", L10N_WORKFLOW_SUB),
- .Category = WorkflowCategory::Numeric,
- });
- mCandidates.push_back(Candidate{
- .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericOperationNode>(NumericOperationNode::Multiplication); },
- .Name = I18N_TEXT("Multiply", L10N_WORKFLOW_MUL),
- .Category = WorkflowCategory::Numeric,
- });
- mCandidates.push_back(Candidate{
- .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericOperationNode>(NumericOperationNode::Division); },
- .Name = I18N_TEXT("Divide", L10N_WORKFLOW_DIV),
- .Category = WorkflowCategory::Numeric,
- });
- mCandidates.push_back(Candidate{
- .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<NumericExpressionNode>(); },
- .Name = I18N_TEXT("Evaluate expression", L10N_WORKFLOW_EVAL),
- .Category = WorkflowCategory::Numeric,
- });
-
- mTextOffset = mCandidates.size();
- mCandidates.push_back(Candidate{
- .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<TextFormatterNode>(); },
- .Name = I18N_TEXT("Format text", L10N_WORKFLOW_FMT),
- .Category = WorkflowCategory::Text,
- });
-
- mDocumentOffset = mCandidates.size();
- mCandidates.push_back(Candidate{
- .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<DocumentTemplateExpansionNode>(); },
- .Name = I18N_TEXT("Expand template", L10N_WORKFLOW_INSTANTIATE_TEMPLATE),
- .Category = WorkflowCategory::Documents,
- });
-
- /* Inputs */
-
- mUserInputOffset = mCandidates.size();
- mCandidates.push_back(Candidate{
- .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<FormInputNode>(); },
- .Name = I18N_TEXT("Form input", L10N_WORKFLOW_FORM_INPUT),
- .Category = WorkflowCategory::UserInput,
- });
-
- mCandidates.push_back(Candidate{
- .Constructor = []() -> std::unique_ptr<WorkflowNode> { return std::make_unique<DatabaseRowsInputNode>(); },
- .Name = I18N_TEXT("Database input", L10N_WORKFLOW_DB_INPUT),
- .Category = WorkflowCategory::UserInput,
- });
-
- mSystemInputNodes = mCandidates.size();
-
- /* Outputs */
-
- mOutputOffset = mCandidates.size();
- }
-};
-
class WorkflowUI
{
private:
std::unique_ptr<Workflow> mWorkflow;
- WorkflowDatabase* mWorkflowDb;
ImNodes::EditorContext* mContext;
@@ -152,7 +36,6 @@ public:
WorkflowUI(std::unique_ptr<Workflow> workflow)
: mWorkflow{ std::move(workflow) }
{
- mWorkflowDb = &WorkflowDatabase::GetInstance();
mContext = ImNodes::CreateEditor();
}
@@ -325,25 +208,21 @@ public:
}
if (ImGui::BeginPopup("CreateNodeCtxMenu")) {
- auto DisplayCandidatesCategory = [&](const char* name, std::span<const WorkflowDatabase::Candidate> candidates) {
- if (ImGui::BeginMenu(name)) {
- for (auto& candidate : candidates) {
- if (ImGui::MenuItem(candidate.Name.c_str())) {
+ for (int i = WorkflowNode::CG_Numeric; i < WorkflowNode::InvalidCategory; ++i) {
+ auto category = (WorkflowNode::Category)i;
+ auto members = WorkflowNode::QueryCategoryMembers(category);
+
+ if (ImGui::BeginMenu(WorkflowNode::FormatCategory(category))) {
+ for (auto member : members) {
+ if (ImGui::MenuItem(WorkflowNode::FormatKind(member))) {
// Create node
- auto uptr = candidate.Constructor();
+ auto uptr = WorkflowNode::CreateByKind(member);
mWorkflow->AddNode(std::move(uptr));
}
}
ImGui::EndMenu();
}
- };
-
- DisplayCandidatesCategory(I18N_TEXT("Numeric", L10N_WORKFLOW_CATEGORY_NUMERIC), mWorkflowDb->GetNumericNodes());
- DisplayCandidatesCategory(I18N_TEXT("Text", L10N_WORKFLOW_CATEGORY_TEXT), mWorkflowDb->GetTextNodes());
- DisplayCandidatesCategory(I18N_TEXT("Document", L10N_WORKFLOW_CATEGORY_DOCUMENT), mWorkflowDb->GetDocumentNodes());
- DisplayCandidatesCategory(I18N_TEXT("User input", L10N_WORKFLOW_CATEGORY_USER_INPUT), mWorkflowDb->GetUserInputNodes());
- DisplayCandidatesCategory(I18N_TEXT("System input", L10N_WORKFLOW_CATEGORY_SYS_INPUT), mWorkflowDb->GetSystemInputNodes());
- DisplayCandidatesCategory(I18N_TEXT("Output", L10N_WORKFLOW_CATEGORY_OUTPUT), mWorkflowDb->GetOutputNodes());
+ }
ImGui::EndPopup();
}
@@ -356,10 +235,6 @@ public:
ImNodes::End();
}
-
- void DisplayNodeList()
- {
- }
};
} // namespace