diff --git a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp index 53540b6f9..e41feb0c1 100644 --- a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp +++ b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp @@ -77,6 +77,20 @@ AbstractTabDeckEditor::AbstractTabDeckEditor(TabSupervisor *_tabSupervisor) : Ta &AbstractTabDeckEditor::refreshShortcuts); } +void AbstractTabDeckEditor::registerDockWidget(QDockWidget *widget) +{ + QMenu *menu = viewMenu->addMenu(QString()); + + QAction *aVisible = menu->addAction(QString()); + aVisible->setCheckable(true); + connect(aVisible, &QAction::triggered, this, &AbstractTabDeckEditor::dockVisibleTriggered); + QAction *aFloating = menu->addAction(QString()); + aFloating->setCheckable(true); + connect(aFloating, &QAction::triggered, this, &AbstractTabDeckEditor::dockFloatingTriggered); + + dockToActions.insert(widget, {menu, aVisible, aFloating}); +} + /** * @brief Updates the card info dock and printing selector. * @param card The card to display. @@ -167,8 +181,8 @@ void AbstractTabDeckEditor::setDeck(const LoadedDeck &_deck) deckStateManager->replaceDeck(_deck); CardPictureLoader::cacheCardPixmaps(CardDatabaseManager::query()->getCards(_deck.deckList.getCardRefList())); - aDeckDockVisible->setChecked(true); - deckDockWidget->setVisible(aDeckDockVisible->isChecked()); + dockToActions.value(deckDockWidget).aVisible->setChecked(true); + deckDockWidget->setVisible(dockToActions.value(deckDockWidget).aVisible->isChecked()); } /** @brief Creates a new deck. Handles opening in new tab if needed. */ diff --git a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.h b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.h index 025a65cad..66a56f39b 100644 --- a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.h +++ b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.h @@ -275,6 +275,22 @@ protected: NEW_TAB ///< Open deck in a new tab }; + /** + * @brief The actions associated with managing a QDockWidget + */ + struct DockActions + { + QMenu *menu; ///< The menu containing the actions + QAction *aVisible; ///< The menu action that toggles visibility + QAction *aFloating; ///< The menu action that toggles floating + }; + + /** + * @brief registers a QDockWidget as a managed dock widget. Creates the associated actions and menu, adds them to + * the viewMenu, and connects those actions to the tab's slots. + */ + void registerDockWidget(QDockWidget *widget); + /** @brief Confirms deck open action based on settings and modified state. * @param openInSameTabIfBlank Whether to reuse same tab if blank. * @return Selected DeckOpenLocation. @@ -293,15 +309,11 @@ protected: virtual void openDeckFromFile(const QString &fileName, DeckOpenLocation deckOpenLocation); // UI Menu Elements - QMenu *viewMenu, *cardInfoDockMenu, *cardDatabaseDockMenu, *deckDockMenu, *filterDockMenu, - *printingSelectorDockMenu; + QMenu *viewMenu; QAction *aResetLayout; - QAction *aCardInfoDockVisible, *aCardInfoDockFloating; - QAction *aCardDatabaseDockVisible, *aCardDatabaseDockFloating; - QAction *aDeckDockVisible, *aDeckDockFloating; - QAction *aFilterDockVisible, *aFilterDockFloating; - QAction *aPrintingSelectorDockVisible, *aPrintingSelectorDockFloating; + + QMap dockToActions; }; #endif // TAB_GENERIC_DECK_EDITOR_H diff --git a/cockatrice/src/interface/widgets/tabs/tab_deck_editor.cpp b/cockatrice/src/interface/widgets/tabs/tab_deck_editor.cpp index defd7827a..3da078dda 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_deck_editor.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_deck_editor.cpp @@ -54,58 +54,18 @@ void TabDeckEditor::createMenus() viewMenu = new QMenu(this); - cardInfoDockMenu = viewMenu->addMenu(QString()); - cardDatabaseDockMenu = viewMenu->addMenu(QString()); - deckDockMenu = viewMenu->addMenu(QString()); - filterDockMenu = viewMenu->addMenu(QString()); - printingSelectorDockMenu = viewMenu->addMenu(QString()); - - // Card Info dock - aCardInfoDockVisible = cardInfoDockMenu->addAction(QString()); - aCardInfoDockVisible->setCheckable(true); - connect(aCardInfoDockVisible, &QAction::triggered, this, &TabDeckEditor::dockVisibleTriggered); - aCardInfoDockFloating = cardInfoDockMenu->addAction(QString()); - aCardInfoDockFloating->setCheckable(true); - connect(aCardInfoDockFloating, &QAction::triggered, this, &TabDeckEditor::dockFloatingTriggered); - - // Card Database dock - aCardDatabaseDockVisible = cardDatabaseDockMenu->addAction(QString()); - aCardDatabaseDockVisible->setCheckable(true); - connect(aCardDatabaseDockVisible, &QAction::triggered, this, &TabDeckEditor::dockVisibleTriggered); - aCardDatabaseDockFloating = cardDatabaseDockMenu->addAction(QString()); - aCardDatabaseDockFloating->setCheckable(true); - connect(aCardDatabaseDockFloating, &QAction::triggered, this, &TabDeckEditor::dockFloatingTriggered); - - // Deck dock - aDeckDockVisible = deckDockMenu->addAction(QString()); - aDeckDockVisible->setCheckable(true); - connect(aDeckDockVisible, &QAction::triggered, this, &TabDeckEditor::dockVisibleTriggered); - aDeckDockFloating = deckDockMenu->addAction(QString()); - aDeckDockFloating->setCheckable(true); - connect(aDeckDockFloating, &QAction::triggered, this, &TabDeckEditor::dockFloatingTriggered); - - // Filter dock - aFilterDockVisible = filterDockMenu->addAction(QString()); - aFilterDockVisible->setCheckable(true); - connect(aFilterDockVisible, &QAction::triggered, this, &TabDeckEditor::dockVisibleTriggered); - aFilterDockFloating = filterDockMenu->addAction(QString()); - aFilterDockFloating->setCheckable(true); - connect(aFilterDockFloating, &QAction::triggered, this, &TabDeckEditor::dockFloatingTriggered); - - // Printing selector dock - aPrintingSelectorDockVisible = printingSelectorDockMenu->addAction(QString()); - aPrintingSelectorDockVisible->setCheckable(true); - connect(aPrintingSelectorDockVisible, &QAction::triggered, this, &TabDeckEditor::dockVisibleTriggered); - aPrintingSelectorDockFloating = printingSelectorDockMenu->addAction(QString()); - aPrintingSelectorDockFloating->setCheckable(true); - connect(aPrintingSelectorDockFloating, &QAction::triggered, this, &TabDeckEditor::dockFloatingTriggered); + registerDockWidget(cardInfoDockWidget); + registerDockWidget(cardDatabaseDockWidget); + registerDockWidget(deckDockWidget); + registerDockWidget(filterDockWidget); + registerDockWidget(printingSelectorDockWidget); if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) { - printingSelectorDockMenu->setEnabled(false); + dockToActions[printingSelectorDockWidget].menu->setEnabled(false); } connect(&SettingsCache::instance(), &SettingsCache::overrideAllCardArtWithPersonalPreferenceChanged, this, - [this](bool enabled) { printingSelectorDockMenu->setEnabled(!enabled); }); + [this](bool enabled) { dockToActions[printingSelectorDockWidget].menu->setEnabled(!enabled); }); viewMenu->addSeparator(); @@ -141,22 +101,18 @@ void TabDeckEditor::retranslateUi() printingSelectorDockWidget->retranslateUi(); viewMenu->setTitle(tr("&View")); - cardInfoDockMenu->setTitle(tr("Card Info")); - cardDatabaseDockMenu->setTitle(tr("Card Database")); - deckDockMenu->setTitle(tr("Deck")); - filterDockMenu->setTitle(tr("Filters")); - printingSelectorDockMenu->setTitle(tr("Printing")); - aCardInfoDockVisible->setText(tr("Visible")); - aCardInfoDockFloating->setText(tr("Floating")); - aCardDatabaseDockVisible->setText(tr("Visible")); - aCardDatabaseDockFloating->setText(tr("Floating")); - aDeckDockVisible->setText(tr("Visible")); - aDeckDockFloating->setText(tr("Floating")); - aFilterDockVisible->setText(tr("Visible")); - aFilterDockFloating->setText(tr("Floating")); - aPrintingSelectorDockVisible->setText(tr("Visible")); - aPrintingSelectorDockFloating->setText(tr("Floating")); + dockToActions[cardInfoDockWidget].menu->setTitle(tr("Card Info")); + dockToActions[cardDatabaseDockWidget].menu->setTitle(tr("Card Database")); + dockToActions[deckDockWidget].menu->setTitle(tr("Deck")); + dockToActions[filterDockWidget].menu->setTitle(tr("Filters")); + dockToActions[printingSelectorDockWidget].menu->setTitle(tr("Printing")); + + for (auto &actions : dockToActions.values()) { + actions.aVisible->setText(tr("Visible")); + actions.aFloating->setText(tr("Floating")); + } + aResetLayout->setText(tr("Reset layout")); } @@ -174,7 +130,7 @@ void TabDeckEditor::showPrintingSelector() { printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getCard().getCardPtr()); printingSelectorDockWidget->printingSelector->updateDisplay(); - aPrintingSelectorDockVisible->setChecked(true); + dockToActions[printingSelectorDockWidget].aVisible->setChecked(true); printingSelectorDockWidget->setVisible(true); } @@ -196,27 +152,22 @@ void TabDeckEditor::loadLayout() if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) { if (!printingSelectorDockWidget->isHidden()) { printingSelectorDockWidget->setHidden(true); - aPrintingSelectorDockVisible->setChecked(false); + dockToActions[printingSelectorDockWidget].aVisible->setChecked(true); } } - aCardInfoDockVisible->setChecked(!cardInfoDockWidget->isHidden()); - aCardDatabaseDockVisible->setChecked(!cardDatabaseDockWidget->isHidden()); - aFilterDockVisible->setChecked(!filterDockWidget->isHidden()); - aDeckDockVisible->setChecked(!deckDockWidget->isHidden()); - aPrintingSelectorDockVisible->setChecked(!printingSelectorDockWidget->isHidden()); + for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) { + QDockWidget *dockWidget = it.key(); + const DockActions &actions = it.value(); - aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); - aCardDatabaseDockFloating->setChecked(aCardDatabaseDockVisible->isChecked()); - aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); - aFilterDockFloating->setEnabled(aFilterDockVisible->isChecked()); - aPrintingSelectorDockFloating->setEnabled(aPrintingSelectorDockVisible->isChecked()); + actions.aVisible->setChecked(!dockWidget->isHidden()); + actions.aFloating->setEnabled(actions.aVisible->isChecked()); + actions.aFloating->setChecked(dockWidget->isFloating()); + } - aCardInfoDockFloating->setChecked(cardInfoDockWidget->isFloating()); - aCardDatabaseDockFloating->setChecked(cardDatabaseDockWidget->isFloating()); - aFilterDockFloating->setChecked(filterDockWidget->isFloating()); - aDeckDockFloating->setChecked(deckDockWidget->isFloating()); - aPrintingSelectorDockFloating->setChecked(printingSelectorDockWidget->isFloating()); + // special case for cardDatabaseDock + auto &actions = dockToActions[cardDatabaseDockWidget]; + actions.aFloating->setChecked(actions.aVisible->isChecked()); cardInfoDockWidget->setMinimumSize(layouts.getDeckEditorCardSize()); cardInfoDockWidget->setMaximumSize(layouts.getDeckEditorCardSize()); @@ -240,17 +191,22 @@ void TabDeckEditor::restartLayout() { // Update menu checkboxes - aCardInfoDockVisible->setChecked(true); - aCardDatabaseDockVisible->setChecked(true); - aDeckDockVisible->setChecked(true); - aFilterDockVisible->setChecked(true); - aPrintingSelectorDockVisible->setChecked(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()); + for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) { + QDockWidget *dockWidget = it.key(); + const DockActions &actions = it.value(); - aCardInfoDockFloating->setChecked(false); - aCardDatabaseDockFloating->setChecked(false); - aDeckDockFloating->setChecked(false); - aFilterDockFloating->setChecked(false); - aPrintingSelectorDockFloating->setChecked(false); + actions.aVisible->setEnabled(true); + actions.aFloating->setEnabled(false); + + // Show/hide and reset floating + dockWidget->setVisible(true); + dockWidget->setFloating(false); + } + + // Printing selector special case + dockToActions[printingSelectorDockWidget].aVisible->setChecked( + !SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()); + printingSelectorDockWidget->setVisible(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()); addDockWidget(Qt::LeftDockWidgetArea, cardDatabaseDockWidget); addDockWidget(Qt::RightDockWidgetArea, deckDockWidget); @@ -258,19 +214,6 @@ void TabDeckEditor::restartLayout() addDockWidget(Qt::RightDockWidgetArea, filterDockWidget); addDockWidget(Qt::RightDockWidgetArea, printingSelectorDockWidget); - // Show/hide and reset floating - cardDatabaseDockWidget->setFloating(false); - deckDockWidget->setFloating(false); - cardInfoDockWidget->setFloating(false); - filterDockWidget->setFloating(false); - printingSelectorDockWidget->setFloating(false); - - cardDatabaseDockWidget->setVisible(true); - deckDockWidget->setVisible(true); - cardInfoDockWidget->setVisible(true); - filterDockWidget->setVisible(true); - printingSelectorDockWidget->setVisible(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()); - splitDockWidget(cardInfoDockWidget, printingSelectorDockWidget, Qt::Horizontal); splitDockWidget(printingSelectorDockWidget, deckDockWidget, Qt::Horizontal); splitDockWidget(cardInfoDockWidget, printingSelectorDockWidget, Qt::Horizontal); @@ -285,41 +228,26 @@ void TabDeckEditor::freeDocksSize() const QSize minSize(100, 100); const QSize maxSize(5000, 5000); - deckDockWidget->setMinimumSize(minSize); - deckDockWidget->setMaximumSize(maxSize); - - cardDatabaseDockWidget->setMinimumSize(minSize); - cardDatabaseDockWidget->setMaximumSize(maxSize); - - cardInfoDockWidget->setMinimumSize(minSize); - cardInfoDockWidget->setMaximumSize(maxSize); - - filterDockWidget->setMinimumSize(minSize); - filterDockWidget->setMaximumSize(maxSize); - - printingSelectorDockWidget->setMinimumSize(minSize); - printingSelectorDockWidget->setMaximumSize(maxSize); + for (auto dockWidget : dockToActions.keys()) { + dockWidget->setMinimumSize(minSize); + dockWidget->setMaximumSize(maxSize); + } } /** @brief Handles dock visibility toggling from menu actions. */ void TabDeckEditor::dockVisibleTriggered() { QObject *o = sender(); - if (o == aCardInfoDockVisible) { - cardInfoDockWidget->setHidden(!aCardInfoDockVisible->isChecked()); - aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); - } else if (o == aCardDatabaseDockVisible) { - cardDatabaseDockWidget->setHidden(!aCardDatabaseDockVisible->isChecked()); - aCardDatabaseDockFloating->setEnabled(aCardDatabaseDockVisible->isChecked()); - } else if (o == aDeckDockVisible) { - deckDockWidget->setHidden(!aDeckDockVisible->isChecked()); - aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); - } else if (o == aFilterDockVisible) { - filterDockWidget->setHidden(!aFilterDockVisible->isChecked()); - aFilterDockFloating->setEnabled(aFilterDockVisible->isChecked()); - } else if (o == aPrintingSelectorDockVisible) { - printingSelectorDockWidget->setHidden(!aPrintingSelectorDockVisible->isChecked()); - aPrintingSelectorDockFloating->setEnabled(aPrintingSelectorDockVisible->isChecked()); + + for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) { + QDockWidget *dockWidget = it.key(); + const DockActions &actions = it.value(); + + if (o == actions.aVisible) { + dockWidget->setHidden(!actions.aVisible->isChecked()); + actions.aFloating->setEnabled(actions.aVisible->isChecked()); + return; + } } } @@ -327,32 +255,28 @@ void TabDeckEditor::dockVisibleTriggered() void TabDeckEditor::dockFloatingTriggered() { QObject *o = sender(); - if (o == aCardInfoDockFloating) - cardInfoDockWidget->setFloating(aCardInfoDockFloating->isChecked()); - else if (o == aCardDatabaseDockFloating) - cardDatabaseDockWidget->setFloating(aCardDatabaseDockFloating->isChecked()); - else if (o == aDeckDockFloating) - deckDockWidget->setFloating(aDeckDockFloating->isChecked()); - else if (o == aFilterDockFloating) - filterDockWidget->setFloating(aFilterDockFloating->isChecked()); - else if (o == aPrintingSelectorDockFloating) - printingSelectorDockWidget->setFloating(aPrintingSelectorDockFloating->isChecked()); + + for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) { + QDockWidget *dockWidget = it.key(); + const DockActions &actions = it.value(); + + if (o == actions.aFloating) { + dockWidget->setFloating(actions.aFloating->isChecked()); + return; + } + } } /** @brief Syncs menu state with dock floating changes. */ void TabDeckEditor::dockTopLevelChanged(bool topLevel) { QObject *o = sender(); - if (o == cardInfoDockWidget) - aCardInfoDockFloating->setChecked(topLevel); - else if (o == aCardDatabaseDockFloating) - aCardDatabaseDockFloating->setChecked(topLevel); - else if (o == deckDockWidget) - aDeckDockFloating->setChecked(topLevel); - else if (o == filterDockWidget) - aFilterDockFloating->setChecked(topLevel); - else if (o == printingSelectorDockWidget) - aPrintingSelectorDockFloating->setChecked(topLevel); + + auto dockWidget = qobject_cast(o); + if (dockToActions.contains(dockWidget)) { + DockActions actions = dockToActions.value(dockWidget); + actions.aFloating->setChecked(topLevel); + } } /** @@ -364,21 +288,11 @@ void TabDeckEditor::dockTopLevelChanged(bool topLevel) bool TabDeckEditor::eventFilter(QObject *o, QEvent *e) { if (e->type() == QEvent::Close) { - if (o == cardInfoDockWidget) { - aCardInfoDockVisible->setChecked(false); - aCardInfoDockFloating->setEnabled(false); - } else if (o == cardDatabaseDockWidget) { - aCardDatabaseDockVisible->setChecked(false); - aCardDatabaseDockFloating->setEnabled(false); - } else if (o == deckDockWidget) { - aDeckDockVisible->setChecked(false); - aDeckDockFloating->setEnabled(false); - } else if (o == filterDockWidget) { - aFilterDockVisible->setChecked(false); - aFilterDockFloating->setEnabled(false); - } else if (o == printingSelectorDockWidget) { - aPrintingSelectorDockVisible->setChecked(false); - aPrintingSelectorDockFloating->setEnabled(false); + auto dockWidget = qobject_cast(o); + if (dockToActions.contains(dockWidget)) { + DockActions actions = dockToActions.value(dockWidget); + actions.aVisible->setChecked(false); + actions.aFloating->setEnabled(false); } } diff --git a/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.cpp b/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.cpp index b24013319..8a92e1bc2 100644 --- a/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.cpp +++ b/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.cpp @@ -97,45 +97,17 @@ void TabDeckEditorVisual::createMenus() viewMenu = new QMenu(this); - cardInfoDockMenu = viewMenu->addMenu(QString()); - deckDockMenu = viewMenu->addMenu(QString()); - filterDockMenu = viewMenu->addMenu(QString()); - printingSelectorDockMenu = viewMenu->addMenu(QString()); - - aCardInfoDockVisible = cardInfoDockMenu->addAction(QString()); - aCardInfoDockVisible->setCheckable(true); - connect(aCardInfoDockVisible, SIGNAL(triggered()), this, SLOT(dockVisibleTriggered())); - aCardInfoDockFloating = cardInfoDockMenu->addAction(QString()); - aCardInfoDockFloating->setCheckable(true); - connect(aCardInfoDockFloating, SIGNAL(triggered()), this, SLOT(dockFloatingTriggered())); - - aDeckDockVisible = deckDockMenu->addAction(QString()); - aDeckDockVisible->setCheckable(true); - connect(aDeckDockVisible, SIGNAL(triggered()), this, SLOT(dockVisibleTriggered())); - aDeckDockFloating = deckDockMenu->addAction(QString()); - aDeckDockFloating->setCheckable(true); - connect(aDeckDockFloating, SIGNAL(triggered()), this, SLOT(dockFloatingTriggered())); - - aFilterDockVisible = filterDockMenu->addAction(QString()); - aFilterDockVisible->setCheckable(true); - connect(aFilterDockVisible, SIGNAL(triggered()), this, SLOT(dockVisibleTriggered())); - aFilterDockFloating = filterDockMenu->addAction(QString()); - aFilterDockFloating->setCheckable(true); - connect(aFilterDockFloating, SIGNAL(triggered()), this, SLOT(dockFloatingTriggered())); - - aPrintingSelectorDockVisible = printingSelectorDockMenu->addAction(QString()); - aPrintingSelectorDockVisible->setCheckable(true); - connect(aPrintingSelectorDockVisible, SIGNAL(triggered()), this, SLOT(dockVisibleTriggered())); - aPrintingSelectorDockFloating = printingSelectorDockMenu->addAction(QString()); - aPrintingSelectorDockFloating->setCheckable(true); - connect(aPrintingSelectorDockFloating, SIGNAL(triggered()), this, SLOT(dockFloatingTriggered())); + registerDockWidget(cardInfoDockWidget); + registerDockWidget(deckDockWidget); + registerDockWidget(filterDockWidget); + registerDockWidget(printingSelectorDockWidget); if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) { - printingSelectorDockMenu->setEnabled(false); + dockToActions[printingSelectorDockWidget].menu->setEnabled(false); } connect(&SettingsCache::instance(), &SettingsCache::overrideAllCardArtWithPersonalPreferenceChanged, this, - [this](bool enabled) { printingSelectorDockMenu->setEnabled(!enabled); }); + [this](bool enabled) { dockToActions[printingSelectorDockWidget].menu->setEnabled(!enabled); }); viewMenu->addSeparator(); @@ -269,7 +241,7 @@ void TabDeckEditorVisual::showPrintingSelector() { printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getCard().getCardPtr()); printingSelectorDockWidget->printingSelector->updateDisplay(); - aPrintingSelectorDockVisible->setChecked(true); + dockToActions[printingSelectorDockWidget].aVisible->setChecked(true); printingSelectorDockWidget->setVisible(true); } @@ -311,24 +283,18 @@ void TabDeckEditorVisual::loadLayout() if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) { if (!printingSelectorDockWidget->isHidden()) { printingSelectorDockWidget->setHidden(true); - aPrintingSelectorDockVisible->setChecked(false); + dockToActions[printingSelectorDockWidget].aVisible->setChecked(false); } } - aCardInfoDockVisible->setChecked(!cardInfoDockWidget->isHidden()); - aFilterDockVisible->setChecked(!filterDockWidget->isHidden()); - aDeckDockVisible->setChecked(!deckDockWidget->isHidden()); - aPrintingSelectorDockVisible->setChecked(!printingSelectorDockWidget->isHidden()); + for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) { + QDockWidget *dockWidget = it.key(); + const DockActions &actions = it.value(); - aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); - aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); - aFilterDockFloating->setEnabled(aFilterDockVisible->isChecked()); - aPrintingSelectorDockFloating->setEnabled(aPrintingSelectorDockVisible->isChecked()); - - aCardInfoDockFloating->setChecked(cardInfoDockWidget->isFloating()); - aFilterDockFloating->setChecked(filterDockWidget->isFloating()); - aDeckDockFloating->setChecked(deckDockWidget->isFloating()); - aPrintingSelectorDockFloating->setChecked(printingSelectorDockWidget->isFloating()); + actions.aVisible->setCheckable(dockWidget->isHidden()); + actions.aFloating->setEnabled(actions.aVisible->isChecked()); + actions.aFloating->setChecked(dockWidget->isFloating()); + } cardInfoDockWidget->setMinimumSize(layouts.getDeckEditorCardSize()); cardInfoDockWidget->setMaximumSize(layouts.getDeckEditorCardSize()); @@ -348,31 +314,30 @@ void TabDeckEditorVisual::loadLayout() /** @brief Resets the layout to default positions and dock states. */ void TabDeckEditorVisual::restartLayout() { - aCardInfoDockVisible->setChecked(true); - aDeckDockVisible->setChecked(true); - aFilterDockVisible->setChecked(false); - aPrintingSelectorDockVisible->setChecked(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()); + for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) { + QDockWidget *dockWidget = it.key(); + const DockActions &actions = it.value(); - aCardInfoDockFloating->setChecked(false); - aDeckDockFloating->setChecked(false); - aFilterDockFloating->setChecked(false); - aPrintingSelectorDockFloating->setChecked(false); + actions.aFloating->setEnabled(false); + dockWidget->setFloating(false); + } - setCentralWidget(centralWidget); - addDockWidget(Qt::RightDockWidgetArea, deckDockWidget); - addDockWidget(Qt::RightDockWidgetArea, cardInfoDockWidget); - addDockWidget(Qt::RightDockWidgetArea, filterDockWidget); - addDockWidget(Qt::RightDockWidgetArea, printingSelectorDockWidget); + dockToActions[cardInfoDockWidget].aVisible->setChecked(true); + dockToActions[deckDockWidget].aVisible->setChecked(true); + dockToActions[filterDockWidget].aVisible->setChecked(false); + dockToActions[printingSelectorDockWidget].aVisible->setChecked( + !SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()); deckDockWidget->setVisible(true); cardInfoDockWidget->setVisible(true); filterDockWidget->setVisible(false); printingSelectorDockWidget->setVisible(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()); - deckDockWidget->setFloating(false); - cardInfoDockWidget->setFloating(false); - filterDockWidget->setFloating(false); - printingSelectorDockWidget->setFloating(false); + setCentralWidget(centralWidget); + addDockWidget(Qt::RightDockWidgetArea, deckDockWidget); + addDockWidget(Qt::RightDockWidgetArea, cardInfoDockWidget); + addDockWidget(Qt::RightDockWidgetArea, filterDockWidget); + addDockWidget(Qt::RightDockWidgetArea, printingSelectorDockWidget); splitDockWidget(cardInfoDockWidget, printingSelectorDockWidget, Qt::Vertical); splitDockWidget(cardInfoDockWidget, deckDockWidget, Qt::Horizontal); @@ -391,22 +356,16 @@ void TabDeckEditorVisual::retranslateUi() filterDockWidget->setWindowTitle(tr("Filters")); viewMenu->setTitle(tr("&View")); - cardInfoDockMenu->setTitle(tr("Card Info")); - deckDockMenu->setTitle(tr("Deck")); - filterDockMenu->setTitle(tr("Filters")); - printingSelectorDockMenu->setTitle(tr("Printing")); - aCardInfoDockVisible->setText(tr("Visible")); - aCardInfoDockFloating->setText(tr("Floating")); + dockToActions[cardInfoDockWidget].menu->setTitle(tr("Card Info")); + dockToActions[deckDockWidget].menu->setTitle(tr("Deck")); + dockToActions[filterDockWidget].menu->setTitle(tr("Filters")); + dockToActions[printingSelectorDockWidget].menu->setTitle(tr("Printing")); - aDeckDockVisible->setText(tr("Visible")); - aDeckDockFloating->setText(tr("Floating")); - - aFilterDockVisible->setText(tr("Visible")); - aFilterDockFloating->setText(tr("Floating")); - - aPrintingSelectorDockVisible->setText(tr("Visible")); - aPrintingSelectorDockFloating->setText(tr("Floating")); + for (auto &actions : dockToActions.values()) { + actions.aVisible->setText(tr("Visible")); + actions.aFloating->setText(tr("Floating")); + } aResetLayout->setText(tr("Reset layout")); } @@ -419,18 +378,11 @@ void TabDeckEditorVisual::retranslateUi() bool TabDeckEditorVisual::eventFilter(QObject *o, QEvent *e) { if (e->type() == QEvent::Close) { - if (o == cardInfoDockWidget) { - aCardInfoDockVisible->setChecked(false); - aCardInfoDockFloating->setEnabled(false); - } else if (o == deckDockWidget) { - aDeckDockVisible->setChecked(false); - aDeckDockFloating->setEnabled(false); - } else if (o == filterDockWidget) { - aFilterDockVisible->setChecked(false); - aFilterDockFloating->setEnabled(false); - } else if (o == printingSelectorDockWidget) { - aPrintingSelectorDockVisible->setChecked(false); - aPrintingSelectorDockFloating->setEnabled(false); + auto dockWidget = qobject_cast(o); + if (dockToActions.contains(dockWidget)) { + DockActions actions = dockToActions.value(dockWidget); + actions.aVisible->setChecked(false); + actions.aFloating->setEnabled(false); } } @@ -450,28 +402,15 @@ bool TabDeckEditorVisual::eventFilter(QObject *o, QEvent *e) void TabDeckEditorVisual::dockVisibleTriggered() { QObject *o = sender(); - if (o == aCardInfoDockVisible) { - cardInfoDockWidget->setHidden(!aCardInfoDockVisible->isChecked()); - aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); - return; - } + for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) { + QDockWidget *dockWidget = it.key(); + const DockActions &actions = it.value(); - if (o == aDeckDockVisible) { - deckDockWidget->setHidden(!aDeckDockVisible->isChecked()); - aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); - return; - } - - if (o == aFilterDockVisible) { - filterDockWidget->setHidden(!aFilterDockVisible->isChecked()); - aFilterDockFloating->setEnabled(aFilterDockVisible->isChecked()); - return; - } - - if (o == aPrintingSelectorDockVisible) { - printingSelectorDockWidget->setHidden(!aPrintingSelectorDockVisible->isChecked()); - aPrintingSelectorDockFloating->setEnabled(aPrintingSelectorDockVisible->isChecked()); - return; + if (o == actions.aVisible) { + dockWidget->setHidden(!actions.aVisible->isChecked()); + actions.aFloating->setEnabled(actions.aVisible->isChecked()); + return; + } } } @@ -479,24 +418,15 @@ void TabDeckEditorVisual::dockVisibleTriggered() void TabDeckEditorVisual::dockFloatingTriggered() { QObject *o = sender(); - if (o == aCardInfoDockFloating) { - cardInfoDockWidget->setFloating(aCardInfoDockFloating->isChecked()); - return; - } - if (o == aDeckDockFloating) { - deckDockWidget->setFloating(aDeckDockFloating->isChecked()); - return; - } + for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) { + QDockWidget *dockWidget = it.key(); + const DockActions &actions = it.value(); - if (o == aFilterDockFloating) { - filterDockWidget->setFloating(aFilterDockFloating->isChecked()); - return; - } - - if (o == aPrintingSelectorDockFloating) { - printingSelectorDockWidget->setFloating(aPrintingSelectorDockFloating->isChecked()); - return; + if (o == actions.aFloating) { + dockWidget->setFloating(actions.aFloating->isChecked()); + return; + } } } @@ -504,23 +434,10 @@ void TabDeckEditorVisual::dockFloatingTriggered() void TabDeckEditorVisual::dockTopLevelChanged(bool topLevel) { QObject *o = sender(); - if (o == cardInfoDockWidget) { - aCardInfoDockFloating->setChecked(topLevel); - return; - } - if (o == deckDockWidget) { - aDeckDockFloating->setChecked(topLevel); - return; - } - - if (o == filterDockWidget) { - aFilterDockFloating->setChecked(topLevel); - return; - } - - if (o == printingSelectorDockWidget) { - aPrintingSelectorDockFloating->setChecked(topLevel); - return; + auto dockWidget = qobject_cast(o); + if (dockToActions.contains(dockWidget)) { + DockActions actions = dockToActions.value(dockWidget); + actions.aFloating->setChecked(topLevel); } }