#pragma once #include "ccm/domain/DigiBattle99Card.hpp" #include "ccm/games/IGameModule.hpp" #include "ccm/services/CardPreviewService.hpp" #include "ccm/services/CollectionService.hpp" #include "ccm/services/ConfigService.hpp" #include "ccm/services/DigiBattle99SetCatalogService.hpp" #include "ccm/services/ImageService.hpp" #include "ccm/services/SetService.hpp" #include "ccm/ui/IGameView.hpp" #include #include #include #include class wxBitmapButton; class wxBoxSizer; class wxPanel; class wxSimplebook; class wxSplitterWindow; class wxStaticText; class wxTextCtrl; namespace ccm::ui { class DigiBattle99CardListPanel; class DigiBattle99SelectedCardPanel; class DigiBattle99SetCompletionPanel; class DigiBattle99GameView final : public IGameView { public: DigiBattle99GameView(ConfigService& config, CollectionService& collection, SetService& sets, ImageService& images, CardPreviewService& cardPreview, IGameModule& module, DigiBattle99SetCatalogService& catalogStore); [[nodiscard]] Game gameId() const noexcept override { return Game::DigiBattle99; } [[nodiscard]] std::string displayName() const override { return "Digimon (Digi-Battle)"; } wxPanel* listPanel(wxWindow* parent) override; wxPanel* selectedPanel(wxWindow* parent) override; wxPanel* contentPanel(wxWindow* parent) override; [[nodiscard]] wxPanel* contentPanelIfCreated() const noexcept override { return contentPanel_; } [[nodiscard]] bool hostsOwnLayout() const noexcept override { return true; } void refreshCollection(std::optional selectId = std::nullopt) override; void onAddCard(wxWindow* parentWindow) override; void onEditCard(wxWindow* parentWindow) override; void onDeleteCard(wxWindow* parentWindow) override; std::string onUpdateSets(wxWindow* parentWindow) override; void setFilter(std::string_view filter) override; void nudgeSelection(int delta) override; void applyTheme(const ThemePalette& palette) override; [[nodiscard]] std::string updateSetsMenuLabel() const override { return "Update Digimon (Digi-Battle)"; } private: void syncEditToolbarVisibility(); void ensureSetsLoaded(); const std::vector& setsForDialog(); void ensureSingleCardsMounted(wxWindow* splitterParent); void buildSingleCardsToolbar(wxWindow* parent, wxBoxSizer* pageSizer); void buildTabBar(wxWindow* parent, wxBoxSizer* rootSizer); void selectTab(int index); void refreshToolbarIcons(const ThemePalette& palette); void refreshTabBarTheme(const ThemePalette& palette); ConfigService& config_; CollectionService& collection_; SetService& sets_; ImageService& images_; CardPreviewService& cardPreview_; IGameModule& module_; DigiBattle99SetCatalogService& catalogStore_; wxPanel* contentPanel_{nullptr}; wxPanel* tabBar_{nullptr}; wxSimplebook* book_{nullptr}; wxSplitterWindow* singleSplitter_{nullptr}; DigiBattle99CardListPanel* listPanel_{nullptr}; DigiBattle99SelectedCardPanel* selectedPanel_{nullptr}; DigiBattle99SetCompletionPanel* setCompletionPanel_{nullptr}; std::array tabPanels_{{nullptr, nullptr}}; std::array tabLabels_{{nullptr, nullptr}}; int activeTab_{0}; std::array toolbarButtons_{{nullptr, nullptr, nullptr}}; wxTextCtrl* filterInput_{nullptr}; std::vector setsCache_; bool attemptedInitialSetLoad_{false}; }; } // namespace ccm::ui