summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/CMakeLists.txt3
-rw-r--r--core/src/Model/Workflow/Value.hpp1
-rw-r--r--core/src/Model/Workflow/Value_RTTI.cpp9
-rw-r--r--core/src/Model/Workflow/Values/List.cpp100
-rw-r--r--core/src/Model/Workflow/Values/List.hpp50
5 files changed, 162 insertions, 1 deletions
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index 520210d..781140d 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -41,9 +41,9 @@ add_source_group(MODEL_MODULE_SOURCES
)
add_source_group(MODEL_TEMPLATE_SOURCES
- src/Model/Template/TableTemplate.cpp
src/Model/Template/Template_Main.cpp
src/Model/Template/Template_RTTI.cpp
+ src/Model/Template/TableTemplate.cpp
)
add_source_group(MODEL_WORKFLOW_MODULE_SOURCES
@@ -64,6 +64,7 @@ add_source_group(MODEL_WORKFLOW_NODES_MODULE_SOURCES
add_source_group(MODEL_WORKFLOW_VALUES_MODULE_SOURCES
src/Model/Workflow/Values/Basic.cpp
src/Model/Workflow/Values/Database.cpp
+ src/Model/Workflow/Values/List.cpp
)
set(UI_MODULE_SOURCES
diff --git a/core/src/Model/Workflow/Value.hpp b/core/src/Model/Workflow/Value.hpp
index ff62d43..39c0bf3 100644
--- a/core/src/Model/Workflow/Value.hpp
+++ b/core/src/Model/Workflow/Value.hpp
@@ -16,6 +16,7 @@ public:
KD_Text,
KD_DateTime,
KD_DatabaseRowId,
+ KD_List,
KD_BaseObject,
KD_SaleDatabaseRow,
diff --git a/core/src/Model/Workflow/Value_RTTI.cpp b/core/src/Model/Workflow/Value_RTTI.cpp
index 44b047c..d6721d7 100644
--- a/core/src/Model/Workflow/Value_RTTI.cpp
+++ b/core/src/Model/Workflow/Value_RTTI.cpp
@@ -2,6 +2,7 @@
#include "Model/Workflow/Values/Basic.hpp"
#include "Model/Workflow/Values/Database.hpp"
+#include "Model/Workflow/Values/List.hpp"
#include "UI/UI.hpp"
constexpr BaseValue::KindInfo kNumericInfo{
@@ -24,6 +25,11 @@ constexpr BaseValue::KindInfo kDatabaseRowIdInfo{
.PinColor = RgbaColor(216, 42, 221),
};
+constexpr BaseValue::KindInfo kListInfo{
+ .PinIcon = ImGui::IconType::Diamond,
+ .PinColor = RgbaColor(58, 154, 214),
+};
+
constexpr BaseValue::KindInfo kDatabaseRowInfo{
.PinIcon = ImGui::IconType::Square,
.PinColor = RgbaColor(15, 124, 196),
@@ -41,6 +47,7 @@ const BaseValue::KindInfo& BaseValue::QueryInfo(BaseValue::Kind kind)
case KD_Text: return kTextInfo;
case KD_DateTime: return kDateTimeInfo;
case KD_DatabaseRowId: return kDatabaseRowIdInfo;
+ case KD_List: return kListInfo;
case KD_BaseObject: return kObjectinfo;
case KD_SaleDatabaseRow:
@@ -59,6 +66,7 @@ const char* BaseValue::Format(Kind kind)
case KD_Text: return "Text";
case KD_DateTime: return "Date/time";
case KD_DatabaseRowId: return "Row id";
+ case KD_List: return "List";
case KD_BaseObject: return "Object";
case KD_SaleDatabaseRow: return "Sale record";
@@ -76,6 +84,7 @@ std::unique_ptr<BaseValue> BaseValue::CreateByKind(BaseValue::Kind kind)
case KD_Text: return std::make_unique<TextValue>();
case KD_DateTime: return std::make_unique<DateTimeValue>();
case KD_DatabaseRowId: return std::make_unique<DatabaseRowIdValue>();
+ case KD_List: return std::make_unique<ListValue>();
case KD_BaseObject: return nullptr;
case KD_SaleDatabaseRow: return std::make_unique<SaleDatabaseRowValue>();
diff --git a/core/src/Model/Workflow/Values/List.cpp b/core/src/Model/Workflow/Values/List.cpp
new file mode 100644
index 0000000..9fd6bfd
--- /dev/null
+++ b/core/src/Model/Workflow/Values/List.cpp
@@ -0,0 +1,100 @@
+#include "List.hpp"
+
+#include <utility>
+
+BaseValue* ListValue::Iterator::operator*() const
+{
+ return mIter->get();
+}
+
+BaseValue* ListValue::Iterator::operator->() const
+{
+ return mIter->get();
+}
+
+ListValue::Iterator& ListValue::Iterator::operator++()
+{
+ ++mIter;
+ return *this;
+}
+
+ListValue::Iterator ListValue::Iterator::operator++(int) const
+{
+ return Iterator(mIter + 1);
+}
+
+ListValue::Iterator& ListValue::Iterator::operator--()
+{
+ --mIter;
+ return *this;
+}
+
+ListValue::Iterator ListValue::Iterator::operator--(int) const
+{
+ return Iterator(mIter - 1);
+}
+
+bool operator==(const ListValue::Iterator& a, const ListValue::Iterator& b)
+{
+ return a.mIter == b.mIter;
+}
+
+ListValue::Iterator::Iterator(decltype(mIter) iter)
+ : mIter{ iter }
+{
+}
+
+bool ListValue::IsInstance(const BaseValue* value)
+{
+ return value->GetKind() == KD_List;
+}
+
+ListValue::ListValue()
+ : BaseValue(KD_List)
+{
+}
+
+int ListValue::GetCount() const
+{
+ return mElements.size();
+}
+
+BaseValue* ListValue::GetElement(int i) const
+{
+ return mElements[i].get();
+}
+
+void ListValue::Append(std::unique_ptr<BaseValue> element)
+{
+ mElements.push_back(std::move(element));
+}
+
+void ListValue::Insert(int i, std::unique_ptr<BaseValue> element)
+{
+ mElements.insert(mElements.begin() + i, std::move(element));
+}
+
+void ListValue::Insert(Iterator iter, std::unique_ptr<BaseValue> element)
+{
+ mElements.insert(iter.mIter, std::move(element));
+}
+
+void ListValue::Remove(int i)
+{
+ mElements.erase(mElements.begin() + i);
+}
+
+void ListValue::Remove(Iterator iter)
+{
+ mElements.erase(iter.mIter);
+}
+
+ListValue::Iterator ListValue::begin()
+{
+ return Iterator(mElements.begin());
+}
+
+ListValue::Iterator ListValue::end()
+{
+ return Iterator(mElements.end());
+}
diff --git a/core/src/Model/Workflow/Values/List.hpp b/core/src/Model/Workflow/Values/List.hpp
new file mode 100644
index 0000000..706a95c
--- /dev/null
+++ b/core/src/Model/Workflow/Values/List.hpp
@@ -0,0 +1,50 @@
+#pragma once
+
+#include "Model/Workflow/Value.hpp"
+
+#include <memory>
+#include <vector>
+
+class ListValue : public BaseValue
+{
+public:
+ class Iterator
+ {
+ private:
+ std::vector<std::unique_ptr<BaseValue>>::iterator mIter;
+
+ public:
+ BaseValue* operator*() const;
+ BaseValue* operator->() const;
+
+ Iterator& operator++();
+ Iterator operator++(int) const;
+ Iterator& operator--();
+ Iterator operator--(int) const;
+
+ friend bool operator==(const Iterator& a, const Iterator& b);
+
+ private:
+ friend class ListValue;
+ Iterator(decltype(mIter) iter);
+ };
+
+private:
+ std::vector<std::unique_ptr<BaseValue>> mElements;
+
+public:
+ static bool IsInstance(const BaseValue* value);
+ ListValue();
+
+ int GetCount() const;
+ BaseValue* GetElement(int i) const;
+
+ void Append(std::unique_ptr<BaseValue> element);
+ void Insert(int i, std::unique_ptr<BaseValue> element);
+ void Insert(Iterator iter, std::unique_ptr<BaseValue> element);
+ void Remove(int i);
+ void Remove(Iterator iter);
+
+ Iterator begin();
+ Iterator end();
+};