diff --git a/cockatrice/src/client/tabs/tab_supervisor.cpp b/cockatrice/src/client/tabs/tab_supervisor.cpp index 97bc0f33a..b197105b4 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")); @@ -313,8 +318,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 +386,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 +503,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 +840,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);