#include "UI.hpp" #include "Model/GlobalStates.hpp" #include "Model/Project.hpp" #include "UI/Localization.hpp" #include "UI/States.hpp" #include #include #include 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); } }