From a417b049da404a9813869a2f8308767a1538cc0d Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Mon, 13 Jan 2025 10:42:58 -0800 Subject: [PATCH] Make Visual Deck Storage tab be managed by TabSupervisor (#5453) * remove closeRequest override * remove visualDeckStorage from WindowMain * manage visual deck storage in TabSupervisor * open on startup * refresh vds on db load finish * open deck editor tab first on startup --- cockatrice/src/client/tabs/tab_supervisor.cpp | 39 ++++++++++++++----- cockatrice/src/client/tabs/tab_supervisor.h | 6 ++- .../tab_deck_storage_visual.cpp | 5 --- .../tab_deck_storage_visual.h | 1 - .../visual_deck_storage_widget.cpp | 3 ++ cockatrice/src/client/ui/window_main.cpp | 15 ------- cockatrice/src/client/ui/window_main.h | 8 ++-- 7 files changed, 39 insertions(+), 38 deletions(-) diff --git a/cockatrice/src/client/tabs/tab_supervisor.cpp b/cockatrice/src/client/tabs/tab_supervisor.cpp index 52baacb21..2ffdf26a0 100644 --- a/cockatrice/src/client/tabs/tab_supervisor.cpp +++ b/cockatrice/src/client/tabs/tab_supervisor.cpp @@ -101,8 +101,8 @@ void CloseButton::paintEvent(QPaintEvent * /*event*/) } TabSupervisor::TabSupervisor(AbstractClient *_client, QMenu *tabsMenu, QWidget *parent) - : QTabWidget(parent), userInfo(0), client(_client), tabsMenu(tabsMenu), tabServer(0), tabUserLists(0), - tabDeckStorage(0), tabReplays(0), tabAdmin(0), tabLog(0) + : QTabWidget(parent), userInfo(0), client(_client), tabsMenu(tabsMenu), tabVisualDeckStorage(nullptr), tabServer(0), + tabUserLists(0), tabDeckStorage(0), tabReplays(0), tabAdmin(0), tabLog(0) { setElideMode(Qt::ElideRight); setMovable(true); @@ -129,6 +129,10 @@ TabSupervisor::TabSupervisor(AbstractClient *_client, QMenu *tabsMenu, QWidget * aTabDeckEditor = new QAction(this); connect(aTabDeckEditor, &QAction::triggered, this, [this] { addDeckEditorTab(nullptr); }); + aTabVisualDeckStorage = new QAction(this); + aTabVisualDeckStorage->setCheckable(true); + connect(aTabVisualDeckStorage, &QAction::toggled, this, &TabSupervisor::actTabVisualDeckStorage); + aTabServer = new QAction(this); aTabServer->setCheckable(true); connect(aTabServer, &QAction::toggled, this, &TabSupervisor::actTabServer); @@ -160,6 +164,11 @@ TabSupervisor::TabSupervisor(AbstractClient *_client, QMenu *tabsMenu, QWidget * resetTabsMenu(); retranslateUi(); + + // open always-available tabs on startup + addDeckEditorTab(nullptr); + + aTabVisualDeckStorage->setChecked(SettingsCache::instance().getVisualDeckStorageShowOnLoad()); } TabSupervisor::~TabSupervisor() @@ -171,6 +180,7 @@ void TabSupervisor::retranslateUi() { // tab menu actions aTabDeckEditor->setText(tr("Deck Editor")); + aTabVisualDeckStorage->setText(tr("&Visual Deck storage")); aTabServer->setText(tr("Server")); aTabUserLists->setText(tr("Account")); aTabDeckStorage->setText(tr("Deck storage")); @@ -272,6 +282,8 @@ void TabSupervisor::resetTabsMenu() { tabsMenu->clear(); tabsMenu->addAction(aTabDeckEditor); + tabsMenu->addSeparator(); + tabsMenu->addAction(aTabVisualDeckStorage); } void TabSupervisor::start(const ServerInfo_User &_userInfo) @@ -387,6 +399,21 @@ void TabSupervisor::stop() userInfo = 0; } +void TabSupervisor::actTabVisualDeckStorage(bool checked) +{ + if (checked && !tabVisualDeckStorage) { + tabVisualDeckStorage = new TabDeckStorageVisual(this, client); + myAddTab(tabVisualDeckStorage); + setCurrentWidget(tabVisualDeckStorage); + connect(tabVisualDeckStorage, &Tab::closed, this, [this] { + tabVisualDeckStorage = nullptr; + aTabVisualDeckStorage->setChecked(false); + }); + } else if (!checked && tabVisualDeckStorage) { + tabVisualDeckStorage->closeRequest(); + } +} + void TabSupervisor::actTabServer(bool checked) { if (checked && !tabServer) { @@ -640,14 +667,6 @@ TabDeckEditor *TabSupervisor::addDeckEditorTab(const DeckLoader *deckToOpen) return tab; } -TabDeckStorageVisual *TabSupervisor::addVisualDeckStorageTab() -{ - TabDeckStorageVisual *tab = new TabDeckStorageVisual(this, client); - myAddTab(tab); - setCurrentWidget(tab); - return tab; -} - void TabSupervisor::deckEditorClosed(TabDeckEditor *tab) { if (tab == currentWidget()) diff --git a/cockatrice/src/client/tabs/tab_supervisor.h b/cockatrice/src/client/tabs/tab_supervisor.h index 6536fef84..99a520872 100644 --- a/cockatrice/src/client/tabs/tab_supervisor.h +++ b/cockatrice/src/client/tabs/tab_supervisor.h @@ -70,6 +70,7 @@ private: AbstractClient *client; QList localClients; QMenu *tabsMenu; + TabDeckStorageVisual *tabVisualDeckStorage; TabServer *tabServer; TabUserLists *tabUserLists; TabDeckStorage *tabDeckStorage; @@ -83,7 +84,8 @@ private: QList deckEditorTabs; bool isLocalGame; - QAction *aTabDeckEditor, *aTabServer, *aTabUserLists, *aTabDeckStorage, *aTabReplays, *aTabAdmin, *aTabLog; + QAction *aTabDeckEditor, *aTabVisualDeckStorage, *aTabServer, *aTabUserLists, *aTabDeckStorage, *aTabReplays, + *aTabAdmin, *aTabLog; int myAddTab(Tab *tab); void addCloseButtonToTab(Tab *tab, int tabIndex); @@ -136,12 +138,12 @@ signals: public slots: TabDeckEditor *addDeckEditorTab(const DeckLoader *deckToOpen); - TabDeckStorageVisual *addVisualDeckStorageTab(); void openReplay(GameReplay *replay); void maximizeMainWindow(); private slots: void refreshShortcuts(); + void actTabVisualDeckStorage(bool checked); void actTabServer(bool checked); void actTabUserLists(bool checked); void actTabDeckStorage(bool checked); diff --git a/cockatrice/src/client/tabs/visual_deck_storage/tab_deck_storage_visual.cpp b/cockatrice/src/client/tabs/visual_deck_storage/tab_deck_storage_visual.cpp index 2cd3f9794..39e7a1606 100644 --- a/cockatrice/src/client/tabs/visual_deck_storage/tab_deck_storage_visual.cpp +++ b/cockatrice/src/client/tabs/visual_deck_storage/tab_deck_storage_visual.cpp @@ -58,11 +58,6 @@ TabDeckStorageVisual::TabDeckStorageVisual(TabSupervisor *_tabSupervisor, Abstra retranslateUi(); } -void TabDeckStorageVisual::closeRequest(bool /*forced*/) -{ - this->close(); -} - void TabDeckStorageVisual::retranslateUi() { aOpenLocalDeck->setText(tr("Open in deck editor")); diff --git a/cockatrice/src/client/tabs/visual_deck_storage/tab_deck_storage_visual.h b/cockatrice/src/client/tabs/visual_deck_storage/tab_deck_storage_visual.h index 93778b86a..ce2b2bc79 100644 --- a/cockatrice/src/client/tabs/visual_deck_storage/tab_deck_storage_visual.h +++ b/cockatrice/src/client/tabs/visual_deck_storage/tab_deck_storage_visual.h @@ -33,7 +33,6 @@ public: } public slots: void cardUpdateFinished(int exitCode, QProcess::ExitStatus exitStatus); - void closeRequest(bool forced) override; void actOpenLocalDeck(QMouseEvent *event, DeckPreviewWidget *instance); void actDeleteLocalDeck(); signals: diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp index 7d16d7a3e..f9c1892e1 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp @@ -39,6 +39,9 @@ VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(pare cardSizeWidget = new CardSizeWidget(this, flowWidget, SettingsCache::instance().getVisualDeckStorageCardSize()); layout->addWidget(cardSizeWidget); + + connect(CardDatabaseManager::getInstance(), &CardDatabase::cardDatabaseLoadingFinished, this, + &VisualDeckStorageWidget::refreshBannerCards); } void VisualDeckStorageWidget::showEvent(QShowEvent *event) diff --git a/cockatrice/src/client/ui/window_main.cpp b/cockatrice/src/client/ui/window_main.cpp index dac39c793..a01c5bba6 100644 --- a/cockatrice/src/client/ui/window_main.cpp +++ b/cockatrice/src/client/ui/window_main.cpp @@ -290,11 +290,6 @@ void MainWindow::localGameEnded() aSinglePlayer->setEnabled(true); } -void MainWindow::actVisualDeckStorage() -{ - tabSupervisor->addVisualDeckStorageTab(); -} - void MainWindow::actFullScreen(bool checked) { if (checked) @@ -664,7 +659,6 @@ void MainWindow::retranslateUi() aDisconnect->setText(tr("&Disconnect")); aSinglePlayer->setText(tr("Start &local game...")); aWatchReplay->setText(tr("&Watch replay...")); - aVisualDeckStorage->setText(tr("&Visual Deck storage")); aFullScreen->setText(tr("&Full screen")); aRegister->setText(tr("&Register to server...")); aForgotPassword->setText(tr("&Restore password...")); @@ -712,8 +706,6 @@ void MainWindow::createActions() connect(aSinglePlayer, &QAction::triggered, this, &MainWindow::actSinglePlayer); aWatchReplay = new QAction(this); connect(aWatchReplay, &QAction::triggered, this, &MainWindow::actWatchReplay); - aVisualDeckStorage = new QAction(this); - connect(aVisualDeckStorage, &QAction::triggered, this, &MainWindow::actVisualDeckStorage); aFullScreen = new QAction(this); aFullScreen->setCheckable(true); connect(aFullScreen, &QAction::toggled, this, &MainWindow::actFullScreen); @@ -800,8 +792,6 @@ void MainWindow::createMenus() cockatriceMenu->addAction(aSinglePlayer); cockatriceMenu->addAction(aWatchReplay); cockatriceMenu->addSeparator(); - cockatriceMenu->addAction(aVisualDeckStorage); - cockatriceMenu->addSeparator(); cockatriceMenu->addAction(aFullScreen); cockatriceMenu->addSeparator(); cockatriceMenu->addAction(aSettings); @@ -870,7 +860,6 @@ MainWindow::MainWindow(QWidget *parent) connect(tabSupervisor, &TabSupervisor::setMenu, this, &MainWindow::updateTabMenu); connect(tabSupervisor, &TabSupervisor::localGameEnded, this, &MainWindow::localGameEnded); connect(tabSupervisor, &TabSupervisor::showWindowIfHidden, this, &MainWindow::showWindowIfHidden); - tabSupervisor->addDeckEditorTab(nullptr); setCentralWidget(tabSupervisor); @@ -889,10 +878,6 @@ MainWindow::MainWindow(QWidget *parent) &MainWindow::refreshShortcuts); refreshShortcuts(); - if (SettingsCache::instance().getVisualDeckStorageShowOnLoad()) { - connect(CardDatabaseManager::getInstance(), &CardDatabase::cardDatabaseLoadingFinished, tabSupervisor, - &TabSupervisor::addVisualDeckStorageTab); - } connect(CardDatabaseManager::getInstance(), &CardDatabase::cardDatabaseLoadingFailed, this, &MainWindow::cardDatabaseLoadingFailed); connect(CardDatabaseManager::getInstance(), &CardDatabase::cardDatabaseNewSetsFound, this, diff --git a/cockatrice/src/client/ui/window_main.h b/cockatrice/src/client/ui/window_main.h index 8236b92c2..73f6c30cd 100644 --- a/cockatrice/src/client/ui/window_main.h +++ b/cockatrice/src/client/ui/window_main.h @@ -73,7 +73,6 @@ private slots: void actDisconnect(); void actSinglePlayer(); void actWatchReplay(); - void actVisualDeckStorage(); void actFullScreen(bool checked); void actRegister(); void actSettings(); @@ -131,10 +130,9 @@ private: QList tabMenus; QMenu *cockatriceMenu, *dbMenu, *tabsMenu, *helpMenu, *trayIconMenu; - QAction *aConnect, *aDisconnect, *aSinglePlayer, *aWatchReplay, *aVisualDeckStorage, *aFullScreen, *aSettings, - *aExit, *aAbout, *aTips, *aCheckCardUpdates, *aRegister, *aForgotPassword, *aUpdate, *aViewLog, *aManageSets, - *aEditTokens, *aOpenCustomFolder, *aOpenCustomsetsFolder, *aAddCustomSet, *aReloadCardDatabase, *aShow, - *aOpenSettingsFolder; + QAction *aConnect, *aDisconnect, *aSinglePlayer, *aWatchReplay, *aFullScreen, *aSettings, *aExit, *aAbout, *aTips, + *aCheckCardUpdates, *aRegister, *aForgotPassword, *aUpdate, *aViewLog, *aManageSets, *aEditTokens, + *aOpenCustomFolder, *aOpenCustomsetsFolder, *aAddCustomSet, *aReloadCardDatabase, *aShow, *aOpenSettingsFolder; TabSupervisor *tabSupervisor; WndSets *wndSets;