From 31950890c939862f79c817053c106bf711c63a64 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Tue, 30 Mar 2021 19:40:11 -0700 Subject: Product items and misc stuff --- core/src/UI/UI_Items.cpp | 117 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 1 deletion(-) (limited to 'core/src/UI/UI_Items.cpp') 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 #include +#include -void UI::ItemsTab() { +namespace { +/// Specialized for each item type. +template +void AddToItemListDialog(ItemList& list); +/// Specialized for each item type. +template +void ItemListEntries(ItemList& list); + +template <> +void AddToItemListDialog(ItemList& 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(ItemList& list) { // TODO } + +template <> +void AddToItemListDialog(ItemList& list) { + // TODO +} + +template <> +void ItemListEntries(ItemList& 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(ItemList& list) { + // TODO +} + +template <> +void ItemListEntries(ItemList& list) { + // TODO +} + +template +void ItemListEditor(ItemList& 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(list); + ImGui::EndPopup(); + } + + ImGui::SameLine(); + if (ImGui::Button(ls->DeleteItem.Get())) { + // TODO + } + + ItemListEntries(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); + } +} -- cgit v1.2.3-70-g09d2