From a9cbd5a172103046f81adf534dcd8ecacfa1a49e Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Mon, 15 Sep 2025 03:07:57 -0700 Subject: [PATCH] Make TabHome a managed tab (#6147) * Make TabHome a managed tab * Add shortcut --- cockatrice/src/client/tabs/tab_supervisor.cpp | 41 ++++++++++++++----- cockatrice/src/client/tabs/tab_supervisor.h | 8 ++-- cockatrice/src/settings/shortcuts_settings.h | 2 + 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/cockatrice/src/client/tabs/tab_supervisor.cpp b/cockatrice/src/client/tabs/tab_supervisor.cpp index 97bc0f33a..ef7fc4e41 100644 --- a/cockatrice/src/client/tabs/tab_supervisor.cpp +++ b/cockatrice/src/client/tabs/tab_supervisor.cpp @@ -141,6 +141,10 @@ TabSupervisor::TabSupervisor(AbstractClient *_client, QMenu *tabsMenu, QWidget * aTabEdhRec = new QAction(this); connect(aTabEdhRec, &QAction::triggered, this, [this] { addEdhrecMainTab(); }); + aTabHome = new QAction(this); + aTabHome->setCheckable(true); + connect(aTabHome, &QAction::triggered, this, &TabSupervisor::actTabHome); + aTabVisualDeckStorage = new QAction(this); aTabVisualDeckStorage->setCheckable(true); connect(aTabVisualDeckStorage, &QAction::triggered, this, &TabSupervisor::actTabVisualDeckStorage); @@ -201,6 +205,7 @@ void TabSupervisor::retranslateUi() aTabDeckEditor->setText(tr("Deck Editor")); aTabVisualDeckEditor->setText(tr("Visual Deck Editor")); aTabEdhRec->setText(tr("EDHRec")); + aTabHome->setText(tr("Home")); aTabVisualDeckStorage->setText(tr("&Visual Deck Storage")); aTabVisualDatabaseDisplay->setText(tr("Visual Database Display")); aTabServer->setText(tr("Server")); @@ -250,6 +255,8 @@ void TabSupervisor::refreshShortcuts() ShortcutsSettings &shortcuts = SettingsCache::instance().shortcuts(); aTabDeckEditor->setShortcuts(shortcuts.getShortcut("Tabs/aTabDeckEditor")); aTabVisualDeckEditor->setShortcuts(shortcuts.getShortcut("Tabs/aTabVisualDeckEditor")); + + aTabHome->setShortcuts(shortcuts.getShortcut("Tabs/aTabHome")); aTabVisualDeckStorage->setShortcuts(shortcuts.getShortcut("Tabs/aTabVisualDeckStorage")); aTabServer->setShortcuts(shortcuts.getShortcut("Tabs/aTabServer")); aTabAccount->setShortcuts(shortcuts.getShortcut("Tabs/aTabAccount")); @@ -313,8 +320,8 @@ static void checkAndTrigger(QAction *checkableAction, bool checked) */ void TabSupervisor::initStartupTabs() { - auto homeTab = addHomeTab(); - setCurrentWidget(homeTab); + openTabHome(); + setCurrentWidget(tabHome); if (SettingsCache::instance().getTabVisualDeckStorageOpen()) { openTabVisualDeckStorage(); @@ -381,6 +388,7 @@ void TabSupervisor::resetTabsMenu() tabsMenu->addAction(aTabVisualDeckEditor); tabsMenu->addAction(aTabEdhRec); tabsMenu->addSeparator(); + tabsMenu->addAction(aTabHome); tabsMenu->addAction(aTabVisualDeckStorage); tabsMenu->addAction(aTabVisualDatabaseDisplay); tabsMenu->addAction(aTabDeckStorage); @@ -497,6 +505,27 @@ void TabSupervisor::stop() userInfo = nullptr; } +void TabSupervisor::actTabHome(bool checked) +{ + if (checked && !tabHome) { + openTabHome(); + setCurrentWidget(tabHome); + } else if (!checked && tabHome) { + tabHome->closeRequest(); + } +} + +void TabSupervisor::openTabHome() +{ + tabHome = new TabHome(this, client); + myAddTab(tabHome, aTabHome); + connect(tabHome, &QObject::destroyed, this, [this] { + tabHome = nullptr; + aTabHome->setChecked(false); + }); + aTabHome->setChecked(true); +} + void TabSupervisor::actTabVisualDeckStorage(bool checked) { SettingsCache::instance().setTabVisualDeckStorageOpen(checked); @@ -813,14 +842,6 @@ void TabSupervisor::talkLeft(TabMessage *tab) removeTab(indexOf(tab)); } -TabHome *TabSupervisor::addHomeTab() -{ - auto *tab = new TabHome(this, client); - myAddTab(tab); - setCurrentWidget(tab); - return tab; -} - /** * Creates a new deck editor tab and loads the deck into it. * Creates either a classic or visual deck editor tab depending on settings diff --git a/cockatrice/src/client/tabs/tab_supervisor.h b/cockatrice/src/client/tabs/tab_supervisor.h index 14c79bdca..592f0b12e 100644 --- a/cockatrice/src/client/tabs/tab_supervisor.h +++ b/cockatrice/src/client/tabs/tab_supervisor.h @@ -90,6 +90,7 @@ private: UserListManager *userListManager; QList localClients; QMenu *tabsMenu; + TabHome *tabHome; TabDeckStorageVisual *tabVisualDeckStorage; TabServer *tabServer; TabAccount *tabAccount; @@ -104,8 +105,8 @@ private: QList deckEditorTabs; bool isLocalGame; - QAction *aTabDeckEditor, *aTabVisualDeckEditor, *aTabEdhRec, *aTabVisualDeckStorage, *aTabVisualDatabaseDisplay, - *aTabServer, *aTabAccount, *aTabDeckStorage, *aTabReplays, *aTabAdmin, *aTabLog; + QAction *aTabHome, *aTabDeckEditor, *aTabVisualDeckEditor, *aTabEdhRec, *aTabVisualDeckStorage, + *aTabVisualDatabaseDisplay, *aTabServer, *aTabAccount, *aTabDeckStorage, *aTabReplays, *aTabAdmin, *aTabLog; int myAddTab(Tab *tab, QAction *manager = nullptr); void addCloseButtonToTab(Tab *tab, int tabIndex, QAction *manager); @@ -175,6 +176,7 @@ public slots: private slots: void refreshShortcuts(); + void actTabHome(bool checked); void actTabServer(bool checked); void actTabAccount(bool checked); void actTabDeckStorage(bool checked); @@ -182,6 +184,7 @@ private slots: void actTabLog(bool checked); void openTabVisualDeckStorage(); + void openTabHome(); void openTabServer(); void openTabAccount(); void openTabDeckStorage(); @@ -201,7 +204,6 @@ private slots: void processUserLeft(const QString &userName); void processUserJoined(const ServerInfo_User &userInfo); void talkLeft(TabMessage *tab); - TabHome *addHomeTab(); void deckEditorClosed(AbstractTabDeckEditor *tab); void tabUserEvent(bool globalEvent); void updateTabText(Tab *tab, const QString &newTabText); diff --git a/cockatrice/src/settings/shortcuts_settings.h b/cockatrice/src/settings/shortcuts_settings.h index fdf422783..3f7b94148 100644 --- a/cockatrice/src/settings/shortcuts_settings.h +++ b/cockatrice/src/settings/shortcuts_settings.h @@ -707,6 +707,8 @@ private: ShortcutGroup::Replays)}, {"Tabs/aTabDeckEditor", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Deck Editor"), parseSequenceString(""), ShortcutGroup::Tabs)}, + {"Tabs/aTabHome", + ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Home"), parseSequenceString(""), ShortcutGroup::Tabs)}, {"Tabs/aTabVisualDeckStorage", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Visual Deck Storage"), parseSequenceString(""), ShortcutGroup::Tabs)},