#pragma once #include "Model/Workflow.hpp" #include #include #include #include class NumericOperationNode : public WorkflowNode { public: enum OperationType { Addition, Subtraction, Multiplication, Division, InvalidType, TypeCount = InvalidType, }; private: OperationType mType; public: static Kind OperationTypeToNodeKind(OperationType type); static OperationType NodeKindToOperationType(Kind kind); static bool IsInstance(const WorkflowNode* node); NumericOperationNode(OperationType type); virtual void Evaluate(WorkflowEvaluationContext& ctx) override; }; class NumericExpressionNode : public WorkflowNode { public: static bool IsInstance(const WorkflowNode* node); NumericExpressionNode(); // TODO }; class FormatTextNode : public WorkflowNode { public: enum ArgumentType { NumericArgument, TextArgument, DateTimeArgument, }; private: struct Argument; using Element = std::variant; std::vector mElements; int mMinOutputChars; public: static BaseValue::Kind ArgumentTypeToValueKind(ArgumentType arg); static bool IsInstance(const WorkflowNode* node); FormatTextNode(); int GetElementCount() const; const Element& GetElement(int idx) const; void SetElement(int idx, std::string text); void SetElement(int idx, ArgumentType argument); void InsertElement(int idx, std::string text); void InsertElement(int idx, ArgumentType argument); void AppendElement(std::string text); void AppendElement(ArgumentType argument); void RemoveElement(int idx); virtual void Evaluate(WorkflowEvaluationContext& ctx) override; private: void PreRemoveElement(int idx); }; class DocumentTemplateExpansionNode : public WorkflowNode { public: static bool IsInstance(const WorkflowNode* node); DocumentTemplateExpansionNode(); // TODO }; class FormInputNode : public WorkflowNode { public: static bool IsInstance(const WorkflowNode* node); FormInputNode(); // TODO }; class DatabaseRowsInputNode : public WorkflowNode { public: static bool IsInstance(const WorkflowNode* node); DatabaseRowsInputNode(); // TODO };