diff --git a/cockatrice/src/client/tabs/tab_supervisor.cpp b/cockatrice/src/client/tabs/tab_supervisor.cpp index 6abd5b584..163d56fe6 100644 --- a/cockatrice/src/client/tabs/tab_supervisor.cpp +++ b/cockatrice/src/client/tabs/tab_supervisor.cpp @@ -132,6 +132,9 @@ TabSupervisor::TabSupervisor(AbstractClient *_client, QMenu *tabsMenu, QWidget * aTabDeckEditor = new QAction(this); connect(aTabDeckEditor, &QAction::triggered, this, [this] { addDeckEditorTab(nullptr); }); + aTabVisualDeckEditor = new QAction(this); + connect(aTabVisualDeckEditor, &QAction::triggered, this, [this] { addVisualDeckEditorTab(nullptr); }); + aTabVisualDeckStorage = new QAction(this); aTabVisualDeckStorage->setCheckable(true); connect(aTabVisualDeckStorage, &QAction::triggered, this, &TabSupervisor::actTabVisualDeckStorage); @@ -178,6 +181,7 @@ void TabSupervisor::retranslateUi() { // tab menu actions aTabDeckEditor->setText(tr("Deck Editor")); + aTabVisualDeckEditor->setText(tr("Visual Deck Editor")); aTabVisualDeckStorage->setText(tr("&Visual Deck Storage")); aTabServer->setText(tr("Server")); aTabAccount->setText(tr("Account")); @@ -206,6 +210,9 @@ void TabSupervisor::retranslateUi() QListIterator deckEditorIterator(deckEditorTabs); while (deckEditorIterator.hasNext()) tabs.append(deckEditorIterator.next()); + QListIterator visualDeckEditorIterator(visualDeckEditorTabs); + while (visualDeckEditorIterator.hasNext()) + tabs.append(visualDeckEditorIterator.next()); QMapIterator messageIterator(messageTabs); while (messageIterator.hasNext()) tabs.append(messageIterator.next().value()); @@ -225,6 +232,7 @@ void TabSupervisor::refreshShortcuts() { ShortcutsSettings &shortcuts = SettingsCache::instance().shortcuts(); aTabDeckEditor->setShortcuts(shortcuts.getShortcut("Tabs/aTabDeckEditor")); + aTabVisualDeckEditor->setShortcuts(shortcuts.getShortcut("Tabs/aTabVisualDeckEditor")); aTabVisualDeckStorage->setShortcuts(shortcuts.getShortcut("Tabs/aTabVisualDeckStorage")); aTabServer->setShortcuts(shortcuts.getShortcut("Tabs/aTabServer")); aTabAccount->setShortcuts(shortcuts.getShortcut("Tabs/aTabAccount")); @@ -372,6 +380,7 @@ void TabSupervisor::resetTabsMenu() { tabsMenu->clear(); tabsMenu->addAction(aTabDeckEditor); + tabsMenu->addAction(aTabVisualDeckEditor); tabsMenu->addSeparator(); tabsMenu->addAction(aTabVisualDeckStorage); tabsMenu->addAction(aTabDeckStorage); @@ -806,10 +815,15 @@ TabDeckEditor *TabSupervisor::addDeckEditorTab(const DeckLoader *deckToOpen) return tab; } -TabDeckEditorVisual *TabSupervisor::addVisualDeckEditorTab() +TabDeckEditorVisual *TabSupervisor::addVisualDeckEditorTab(const DeckLoader *deckToOpen) { TabDeckEditorVisual *tab = new TabDeckEditorVisual(this); + if (deckToOpen) + tab->setDeck(new DeckLoader(*deckToOpen)); + connect(tab, &TabDeckEditorVisual::deckEditorClosing, this, &TabSupervisor::visualDeckEditorClosed); + // connect(tab, &TabDeckEditorVisual::openDeckEditor, this, &TabSupervisor::addDeckEditorTab); myAddTab(tab); + visualDeckEditorTabs.append(tab); setCurrentWidget(tab); return tab; } @@ -835,6 +849,15 @@ void TabSupervisor::deckEditorClosed(AbstractTabDeckEditor *tab) removeTab(indexOf(tab)); } +void TabSupervisor::visualDeckEditorClosed(TabDeckEditorVisual *tab) +{ + if (tab == currentWidget()) + emit setMenu(); + + visualDeckEditorTabs.removeOne(tab); + removeTab(indexOf(tab)); +} + void TabSupervisor::tabUserEvent(bool globalEvent) { Tab *tab = static_cast(sender()); diff --git a/cockatrice/src/client/tabs/tab_supervisor.h b/cockatrice/src/client/tabs/tab_supervisor.h index 64d5e3310..4651eb678 100644 --- a/cockatrice/src/client/tabs/tab_supervisor.h +++ b/cockatrice/src/client/tabs/tab_supervisor.h @@ -91,10 +91,11 @@ private: QList replayTabs; QMap messageTabs; QList deckEditorTabs; + QList visualDeckEditorTabs; bool isLocalGame; - QAction *aTabDeckEditor, *aTabVisualDeckStorage, *aTabServer, *aTabAccount, *aTabDeckStorage, *aTabReplays, - *aTabAdmin, *aTabLog; + QAction *aTabDeckEditor, *aTabVisualDeckEditor, *aTabVisualDeckStorage, *aTabServer, *aTabAccount, *aTabDeckStorage, + *aTabReplays, *aTabAdmin, *aTabLog; int myAddTab(Tab *tab, QAction *manager = nullptr); void addCloseButtonToTab(Tab *tab, int tabIndex, QAction *manager); @@ -151,9 +152,9 @@ signals: public slots: TabDeckEditor *addDeckEditorTab(const DeckLoader *deckToOpen); + TabDeckEditorVisual *addVisualDeckEditorTab(const DeckLoader *deckToOpen); TabEdhRec *addEdhrecTab(const CardInfoPtr &cardToQuery, bool isCommander = false); TabDeckStorageVisual *addVisualDeckStorageTab(); - TabDeckEditorVisual *addVisualDeckEditorTab(); void openReplay(GameReplay *replay); void maximizeMainWindow(); private slots: @@ -188,6 +189,7 @@ private slots: void processUserJoined(const ServerInfo_User &userInfo); void talkLeft(TabMessage *tab); void deckEditorClosed(AbstractTabDeckEditor *tab); + void visualDeckEditorClosed(TabDeckEditorVisual *tab); void tabUserEvent(bool globalEvent); void updateTabText(Tab *tab, const QString &newTabText); void processRoomEvent(const RoomEvent &event); diff --git a/cockatrice/src/client/ui/window_main.cpp b/cockatrice/src/client/ui/window_main.cpp index 7273eda2b..ca74815f9 100644 --- a/cockatrice/src/client/ui/window_main.cpp +++ b/cockatrice/src/client/ui/window_main.cpp @@ -878,8 +878,8 @@ MainWindow::MainWindow(QWidget *parent) connect(&SettingsCache::instance().shortcuts(), &ShortcutsSettings::shortCutChanged, this, &MainWindow::refreshShortcuts); refreshShortcuts(); - connect(CardDatabaseManager::getInstance(), SIGNAL(cardDatabaseLoadingFinished()), tabSupervisor, - SLOT(addVisualDeckEditorTab())); + connect(CardDatabaseManager::getInstance(), &CardDatabase::cardDatabaseLoadingFinished, this, + [this]() { tabSupervisor->addVisualDeckEditorTab(nullptr); }); connect(CardDatabaseManager::getInstance(), &CardDatabase::cardDatabaseLoadingFailed, this, &MainWindow::cardDatabaseLoadingFailed);