aboutsummaryrefslogtreecommitdiff
path: root/core/src/UI/UI_Items.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/UI/UI_Items.cpp')
-rw-r--r--core/src/UI/UI_Items.cpp117
1 files changed, 116 insertions, 1 deletions
diff --git a/core/src/UI/UI_Items.cpp b/core/src/UI/UI_Items.cpp
index 371e682..a990a96 100644
--- a/core/src/UI/UI_Items.cpp
+++ b/core/src/UI/UI_Items.cpp
@@ -1,9 +1,124 @@
#include "UI.hpp"
+#include "Model/GlobalStates.hpp"
+#include "Model/Project.hpp"
#include "UI/Localization.hpp"
+#include "UI/States.hpp"
+#include <IconsFontAwesome.h>
#include <imgui.h>
+#include <imgui_stdlib.h>
-void UI::ItemsTab() {
+namespace {
+/// Specialized for each item type.
+template <class T>
+void AddToItemListDialog(ItemList<T>& list);
+/// Specialized for each item type.
+template <class T>
+void ItemListEntries(ItemList<T>& list);
+
+template <>
+void AddToItemListDialog<ProductItem>(ItemList<ProductItem>& list) {
+ static std::string productName;
+ static std::string description;
+
+ auto ls = LocaleStrings::Instance.get();
+ auto& uis = UIState::GetInstance();
+ ImGui::InputText(ls->ProductNameColumn.Get(), &productName);
+ ImGui::InputText(ls->ProductDescriptionColumn.Get(), &description);
+
+ if (ImGui::Button(ls->DialogConfirm.Get())) {
+ auto& product = uis.CurrentProject->Products.Insert(std::move(productName));
+ product.SetDescription(std::move(description));
+
+ productName.clear();
+ description.clear();
+
+ ImGui::CloseCurrentPopup();
+ }
+ ImGui::SameLine();
+ if (ImGui::Button(ls->DialogCancel.Get())) {
+ ImGui::CloseCurrentPopup();
+ }
+}
+
+template <>
+void AddToItemListDialog<FactoryItem>(ItemList<FactoryItem>& list) {
// TODO
}
+
+template <>
+void AddToItemListDialog<CustomerItem>(ItemList<CustomerItem>& list) {
+ // TODO
+}
+
+template <>
+void ItemListEntries<ProductItem>(ItemList<ProductItem>& list) {
+ auto ls = LocaleStrings::Instance.get();
+ if (ImGui::BeginTable("ItemListEntries", 2)) {
+
+ ImGui::TableSetupColumn(ls->ProductNameColumn.Get());
+ ImGui::TableSetupColumn(ls->ProductDescriptionColumn.Get());
+ ImGui::TableHeadersRow();
+
+ for (auto& entry : list) {
+ ImGui::TableNextRow();
+
+ ImGui::TableNextColumn();
+ ImGui::Text("%s", entry.GetName().c_str());
+ ImGui::TableNextColumn();
+ ImGui::Text("%.8s", entry.GetDescription().c_str());
+ if (ImGui::Button(ICON_FA_EDIT)) {
+ // TODO
+ }
+ }
+ ImGui::EndTable();
+ }
+}
+
+template <>
+void ItemListEntries<FactoryItem>(ItemList<FactoryItem>& list) {
+ // TODO
+}
+
+template <>
+void ItemListEntries<CustomerItem>(ItemList<CustomerItem>& list) {
+ // TODO
+}
+
+template <class T>
+void ItemListEditor(ItemList<T>& list) {
+ auto ls = LocaleStrings::Instance.get();
+
+ if (ImGui::Button(ls->AddItem.Get())) {
+ ImGui::SetNextWindowCentered();
+ ImGui::OpenPopup(ls->AddItemDialogTitle.Get());
+ }
+ if (ImGui::BeginPopupModal(ls->AddItemDialogTitle.Get())) {
+ AddToItemListDialog<T>(list);
+ ImGui::EndPopup();
+ }
+
+ ImGui::SameLine();
+ if (ImGui::Button(ls->DeleteItem.Get())) {
+ // TODO
+ }
+
+ ItemListEntries<T>(list);
+}
+} // namespace
+
+void UI::ItemsTab() {
+ auto ls = LocaleStrings::Instance.get();
+ auto& uis = UIState::GetInstance();
+
+ if (ImGui::CollapsingHeader(ls->ProductCategoryName.Get())) {
+ ItemListEditor(uis.CurrentProject->Products);
+ }
+ if (ImGui::CollapsingHeader(ls->FactoryCategoryName.Get())) {
+ ItemListEditor(uis.CurrentProject->Factories);
+ }
+ if (ImGui::CollapsingHeader(ls->CustomerCategoryName.Get())) {
+ ItemListEditor(uis.CurrentProject->Customers);
+ }
+}