diff options
Diffstat (limited to 'core/src/UI/UI_Items.cpp')
-rw-r--r-- | core/src/UI/UI_Items.cpp | 117 |
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); + } +} |