[TabDeckEditor] Consolidate dockWidget management (#6499)

This commit is contained in:
RickyRister 2026-01-14 00:48:26 -08:00 committed by GitHub
parent a0d1359860
commit b19312be70
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 178 additions and 321 deletions

View file

@ -77,6 +77,20 @@ AbstractTabDeckEditor::AbstractTabDeckEditor(TabSupervisor *_tabSupervisor) : Ta
&AbstractTabDeckEditor::refreshShortcuts); &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. * @brief Updates the card info dock and printing selector.
* @param card The card to display. * @param card The card to display.
@ -167,8 +181,8 @@ void AbstractTabDeckEditor::setDeck(const LoadedDeck &_deck)
deckStateManager->replaceDeck(_deck); deckStateManager->replaceDeck(_deck);
CardPictureLoader::cacheCardPixmaps(CardDatabaseManager::query()->getCards(_deck.deckList.getCardRefList())); CardPictureLoader::cacheCardPixmaps(CardDatabaseManager::query()->getCards(_deck.deckList.getCardRefList()));
aDeckDockVisible->setChecked(true); dockToActions.value(deckDockWidget).aVisible->setChecked(true);
deckDockWidget->setVisible(aDeckDockVisible->isChecked()); deckDockWidget->setVisible(dockToActions.value(deckDockWidget).aVisible->isChecked());
} }
/** @brief Creates a new deck. Handles opening in new tab if needed. */ /** @brief Creates a new deck. Handles opening in new tab if needed. */

View file

@ -275,6 +275,22 @@ protected:
NEW_TAB ///< Open deck in a new tab 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. /** @brief Confirms deck open action based on settings and modified state.
* @param openInSameTabIfBlank Whether to reuse same tab if blank. * @param openInSameTabIfBlank Whether to reuse same tab if blank.
* @return Selected DeckOpenLocation. * @return Selected DeckOpenLocation.
@ -293,15 +309,11 @@ protected:
virtual void openDeckFromFile(const QString &fileName, DeckOpenLocation deckOpenLocation); virtual void openDeckFromFile(const QString &fileName, DeckOpenLocation deckOpenLocation);
// UI Menu Elements // UI Menu Elements
QMenu *viewMenu, *cardInfoDockMenu, *cardDatabaseDockMenu, *deckDockMenu, *filterDockMenu, QMenu *viewMenu;
*printingSelectorDockMenu;
QAction *aResetLayout; QAction *aResetLayout;
QAction *aCardInfoDockVisible, *aCardInfoDockFloating;
QAction *aCardDatabaseDockVisible, *aCardDatabaseDockFloating; QMap<QDockWidget *, DockActions> dockToActions;
QAction *aDeckDockVisible, *aDeckDockFloating;
QAction *aFilterDockVisible, *aFilterDockFloating;
QAction *aPrintingSelectorDockVisible, *aPrintingSelectorDockFloating;
}; };
#endif // TAB_GENERIC_DECK_EDITOR_H #endif // TAB_GENERIC_DECK_EDITOR_H

View file

@ -54,58 +54,18 @@ void TabDeckEditor::createMenus()
viewMenu = new QMenu(this); viewMenu = new QMenu(this);
cardInfoDockMenu = viewMenu->addMenu(QString()); registerDockWidget(cardInfoDockWidget);
cardDatabaseDockMenu = viewMenu->addMenu(QString()); registerDockWidget(cardDatabaseDockWidget);
deckDockMenu = viewMenu->addMenu(QString()); registerDockWidget(deckDockWidget);
filterDockMenu = viewMenu->addMenu(QString()); registerDockWidget(filterDockWidget);
printingSelectorDockMenu = viewMenu->addMenu(QString()); registerDockWidget(printingSelectorDockWidget);
// 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);
if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) { if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) {
printingSelectorDockMenu->setEnabled(false); dockToActions[printingSelectorDockWidget].menu->setEnabled(false);
} }
connect(&SettingsCache::instance(), &SettingsCache::overrideAllCardArtWithPersonalPreferenceChanged, this, connect(&SettingsCache::instance(), &SettingsCache::overrideAllCardArtWithPersonalPreferenceChanged, this,
[this](bool enabled) { printingSelectorDockMenu->setEnabled(!enabled); }); [this](bool enabled) { dockToActions[printingSelectorDockWidget].menu->setEnabled(!enabled); });
viewMenu->addSeparator(); viewMenu->addSeparator();
@ -141,22 +101,18 @@ void TabDeckEditor::retranslateUi()
printingSelectorDockWidget->retranslateUi(); printingSelectorDockWidget->retranslateUi();
viewMenu->setTitle(tr("&View")); 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")); dockToActions[cardInfoDockWidget].menu->setTitle(tr("Card Info"));
aCardInfoDockFloating->setText(tr("Floating")); dockToActions[cardDatabaseDockWidget].menu->setTitle(tr("Card Database"));
aCardDatabaseDockVisible->setText(tr("Visible")); dockToActions[deckDockWidget].menu->setTitle(tr("Deck"));
aCardDatabaseDockFloating->setText(tr("Floating")); dockToActions[filterDockWidget].menu->setTitle(tr("Filters"));
aDeckDockVisible->setText(tr("Visible")); dockToActions[printingSelectorDockWidget].menu->setTitle(tr("Printing"));
aDeckDockFloating->setText(tr("Floating"));
aFilterDockVisible->setText(tr("Visible")); for (auto &actions : dockToActions.values()) {
aFilterDockFloating->setText(tr("Floating")); actions.aVisible->setText(tr("Visible"));
aPrintingSelectorDockVisible->setText(tr("Visible")); actions.aFloating->setText(tr("Floating"));
aPrintingSelectorDockFloating->setText(tr("Floating")); }
aResetLayout->setText(tr("Reset layout")); aResetLayout->setText(tr("Reset layout"));
} }
@ -174,7 +130,7 @@ void TabDeckEditor::showPrintingSelector()
{ {
printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getCard().getCardPtr()); printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getCard().getCardPtr());
printingSelectorDockWidget->printingSelector->updateDisplay(); printingSelectorDockWidget->printingSelector->updateDisplay();
aPrintingSelectorDockVisible->setChecked(true); dockToActions[printingSelectorDockWidget].aVisible->setChecked(true);
printingSelectorDockWidget->setVisible(true); printingSelectorDockWidget->setVisible(true);
} }
@ -196,27 +152,22 @@ void TabDeckEditor::loadLayout()
if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) { if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) {
if (!printingSelectorDockWidget->isHidden()) { if (!printingSelectorDockWidget->isHidden()) {
printingSelectorDockWidget->setHidden(true); printingSelectorDockWidget->setHidden(true);
aPrintingSelectorDockVisible->setChecked(false); dockToActions[printingSelectorDockWidget].aVisible->setChecked(true);
} }
} }
aCardInfoDockVisible->setChecked(!cardInfoDockWidget->isHidden()); for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) {
aCardDatabaseDockVisible->setChecked(!cardDatabaseDockWidget->isHidden()); QDockWidget *dockWidget = it.key();
aFilterDockVisible->setChecked(!filterDockWidget->isHidden()); const DockActions &actions = it.value();
aDeckDockVisible->setChecked(!deckDockWidget->isHidden());
aPrintingSelectorDockVisible->setChecked(!printingSelectorDockWidget->isHidden());
aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); actions.aVisible->setChecked(!dockWidget->isHidden());
aCardDatabaseDockFloating->setChecked(aCardDatabaseDockVisible->isChecked()); actions.aFloating->setEnabled(actions.aVisible->isChecked());
aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); actions.aFloating->setChecked(dockWidget->isFloating());
aFilterDockFloating->setEnabled(aFilterDockVisible->isChecked()); }
aPrintingSelectorDockFloating->setEnabled(aPrintingSelectorDockVisible->isChecked());
aCardInfoDockFloating->setChecked(cardInfoDockWidget->isFloating()); // special case for cardDatabaseDock
aCardDatabaseDockFloating->setChecked(cardDatabaseDockWidget->isFloating()); auto &actions = dockToActions[cardDatabaseDockWidget];
aFilterDockFloating->setChecked(filterDockWidget->isFloating()); actions.aFloating->setChecked(actions.aVisible->isChecked());
aDeckDockFloating->setChecked(deckDockWidget->isFloating());
aPrintingSelectorDockFloating->setChecked(printingSelectorDockWidget->isFloating());
cardInfoDockWidget->setMinimumSize(layouts.getDeckEditorCardSize()); cardInfoDockWidget->setMinimumSize(layouts.getDeckEditorCardSize());
cardInfoDockWidget->setMaximumSize(layouts.getDeckEditorCardSize()); cardInfoDockWidget->setMaximumSize(layouts.getDeckEditorCardSize());
@ -240,17 +191,22 @@ void TabDeckEditor::restartLayout()
{ {
// Update menu checkboxes // Update menu checkboxes
aCardInfoDockVisible->setChecked(true); for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) {
aCardDatabaseDockVisible->setChecked(true); QDockWidget *dockWidget = it.key();
aDeckDockVisible->setChecked(true); const DockActions &actions = it.value();
aFilterDockVisible->setChecked(true);
aPrintingSelectorDockVisible->setChecked(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference());
aCardInfoDockFloating->setChecked(false); actions.aVisible->setEnabled(true);
aCardDatabaseDockFloating->setChecked(false); actions.aFloating->setEnabled(false);
aDeckDockFloating->setChecked(false);
aFilterDockFloating->setChecked(false); // Show/hide and reset floating
aPrintingSelectorDockFloating->setChecked(false); 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::LeftDockWidgetArea, cardDatabaseDockWidget);
addDockWidget(Qt::RightDockWidgetArea, deckDockWidget); addDockWidget(Qt::RightDockWidgetArea, deckDockWidget);
@ -258,19 +214,6 @@ void TabDeckEditor::restartLayout()
addDockWidget(Qt::RightDockWidgetArea, filterDockWidget); addDockWidget(Qt::RightDockWidgetArea, filterDockWidget);
addDockWidget(Qt::RightDockWidgetArea, printingSelectorDockWidget); 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(cardInfoDockWidget, printingSelectorDockWidget, Qt::Horizontal);
splitDockWidget(printingSelectorDockWidget, deckDockWidget, Qt::Horizontal); splitDockWidget(printingSelectorDockWidget, deckDockWidget, Qt::Horizontal);
splitDockWidget(cardInfoDockWidget, printingSelectorDockWidget, Qt::Horizontal); splitDockWidget(cardInfoDockWidget, printingSelectorDockWidget, Qt::Horizontal);
@ -285,41 +228,26 @@ void TabDeckEditor::freeDocksSize()
const QSize minSize(100, 100); const QSize minSize(100, 100);
const QSize maxSize(5000, 5000); const QSize maxSize(5000, 5000);
deckDockWidget->setMinimumSize(minSize); for (auto dockWidget : dockToActions.keys()) {
deckDockWidget->setMaximumSize(maxSize); dockWidget->setMinimumSize(minSize);
dockWidget->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);
} }
/** @brief Handles dock visibility toggling from menu actions. */ /** @brief Handles dock visibility toggling from menu actions. */
void TabDeckEditor::dockVisibleTriggered() void TabDeckEditor::dockVisibleTriggered()
{ {
QObject *o = sender(); QObject *o = sender();
if (o == aCardInfoDockVisible) {
cardInfoDockWidget->setHidden(!aCardInfoDockVisible->isChecked()); for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) {
aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); QDockWidget *dockWidget = it.key();
} else if (o == aCardDatabaseDockVisible) { const DockActions &actions = it.value();
cardDatabaseDockWidget->setHidden(!aCardDatabaseDockVisible->isChecked());
aCardDatabaseDockFloating->setEnabled(aCardDatabaseDockVisible->isChecked()); if (o == actions.aVisible) {
} else if (o == aDeckDockVisible) { dockWidget->setHidden(!actions.aVisible->isChecked());
deckDockWidget->setHidden(!aDeckDockVisible->isChecked()); actions.aFloating->setEnabled(actions.aVisible->isChecked());
aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); return;
} else if (o == aFilterDockVisible) { }
filterDockWidget->setHidden(!aFilterDockVisible->isChecked());
aFilterDockFloating->setEnabled(aFilterDockVisible->isChecked());
} else if (o == aPrintingSelectorDockVisible) {
printingSelectorDockWidget->setHidden(!aPrintingSelectorDockVisible->isChecked());
aPrintingSelectorDockFloating->setEnabled(aPrintingSelectorDockVisible->isChecked());
} }
} }
@ -327,32 +255,28 @@ void TabDeckEditor::dockVisibleTriggered()
void TabDeckEditor::dockFloatingTriggered() void TabDeckEditor::dockFloatingTriggered()
{ {
QObject *o = sender(); QObject *o = sender();
if (o == aCardInfoDockFloating)
cardInfoDockWidget->setFloating(aCardInfoDockFloating->isChecked()); for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) {
else if (o == aCardDatabaseDockFloating) QDockWidget *dockWidget = it.key();
cardDatabaseDockWidget->setFloating(aCardDatabaseDockFloating->isChecked()); const DockActions &actions = it.value();
else if (o == aDeckDockFloating)
deckDockWidget->setFloating(aDeckDockFloating->isChecked()); if (o == actions.aFloating) {
else if (o == aFilterDockFloating) dockWidget->setFloating(actions.aFloating->isChecked());
filterDockWidget->setFloating(aFilterDockFloating->isChecked()); return;
else if (o == aPrintingSelectorDockFloating) }
printingSelectorDockWidget->setFloating(aPrintingSelectorDockFloating->isChecked()); }
} }
/** @brief Syncs menu state with dock floating changes. */ /** @brief Syncs menu state with dock floating changes. */
void TabDeckEditor::dockTopLevelChanged(bool topLevel) void TabDeckEditor::dockTopLevelChanged(bool topLevel)
{ {
QObject *o = sender(); QObject *o = sender();
if (o == cardInfoDockWidget)
aCardInfoDockFloating->setChecked(topLevel); auto dockWidget = qobject_cast<QDockWidget *>(o);
else if (o == aCardDatabaseDockFloating) if (dockToActions.contains(dockWidget)) {
aCardDatabaseDockFloating->setChecked(topLevel); DockActions actions = dockToActions.value(dockWidget);
else if (o == deckDockWidget) actions.aFloating->setChecked(topLevel);
aDeckDockFloating->setChecked(topLevel); }
else if (o == filterDockWidget)
aFilterDockFloating->setChecked(topLevel);
else if (o == printingSelectorDockWidget)
aPrintingSelectorDockFloating->setChecked(topLevel);
} }
/** /**
@ -364,21 +288,11 @@ void TabDeckEditor::dockTopLevelChanged(bool topLevel)
bool TabDeckEditor::eventFilter(QObject *o, QEvent *e) bool TabDeckEditor::eventFilter(QObject *o, QEvent *e)
{ {
if (e->type() == QEvent::Close) { if (e->type() == QEvent::Close) {
if (o == cardInfoDockWidget) { auto dockWidget = qobject_cast<QDockWidget *>(o);
aCardInfoDockVisible->setChecked(false); if (dockToActions.contains(dockWidget)) {
aCardInfoDockFloating->setEnabled(false); DockActions actions = dockToActions.value(dockWidget);
} else if (o == cardDatabaseDockWidget) { actions.aVisible->setChecked(false);
aCardDatabaseDockVisible->setChecked(false); actions.aFloating->setEnabled(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);
} }
} }

View file

@ -97,45 +97,17 @@ void TabDeckEditorVisual::createMenus()
viewMenu = new QMenu(this); viewMenu = new QMenu(this);
cardInfoDockMenu = viewMenu->addMenu(QString()); registerDockWidget(cardInfoDockWidget);
deckDockMenu = viewMenu->addMenu(QString()); registerDockWidget(deckDockWidget);
filterDockMenu = viewMenu->addMenu(QString()); registerDockWidget(filterDockWidget);
printingSelectorDockMenu = viewMenu->addMenu(QString()); registerDockWidget(printingSelectorDockWidget);
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()));
if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) { if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) {
printingSelectorDockMenu->setEnabled(false); dockToActions[printingSelectorDockWidget].menu->setEnabled(false);
} }
connect(&SettingsCache::instance(), &SettingsCache::overrideAllCardArtWithPersonalPreferenceChanged, this, connect(&SettingsCache::instance(), &SettingsCache::overrideAllCardArtWithPersonalPreferenceChanged, this,
[this](bool enabled) { printingSelectorDockMenu->setEnabled(!enabled); }); [this](bool enabled) { dockToActions[printingSelectorDockWidget].menu->setEnabled(!enabled); });
viewMenu->addSeparator(); viewMenu->addSeparator();
@ -269,7 +241,7 @@ void TabDeckEditorVisual::showPrintingSelector()
{ {
printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getCard().getCardPtr()); printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getCard().getCardPtr());
printingSelectorDockWidget->printingSelector->updateDisplay(); printingSelectorDockWidget->printingSelector->updateDisplay();
aPrintingSelectorDockVisible->setChecked(true); dockToActions[printingSelectorDockWidget].aVisible->setChecked(true);
printingSelectorDockWidget->setVisible(true); printingSelectorDockWidget->setVisible(true);
} }
@ -311,24 +283,18 @@ void TabDeckEditorVisual::loadLayout()
if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) { if (SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()) {
if (!printingSelectorDockWidget->isHidden()) { if (!printingSelectorDockWidget->isHidden()) {
printingSelectorDockWidget->setHidden(true); printingSelectorDockWidget->setHidden(true);
aPrintingSelectorDockVisible->setChecked(false); dockToActions[printingSelectorDockWidget].aVisible->setChecked(false);
} }
} }
aCardInfoDockVisible->setChecked(!cardInfoDockWidget->isHidden()); for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) {
aFilterDockVisible->setChecked(!filterDockWidget->isHidden()); QDockWidget *dockWidget = it.key();
aDeckDockVisible->setChecked(!deckDockWidget->isHidden()); const DockActions &actions = it.value();
aPrintingSelectorDockVisible->setChecked(!printingSelectorDockWidget->isHidden());
aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); actions.aVisible->setCheckable(dockWidget->isHidden());
aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); actions.aFloating->setEnabled(actions.aVisible->isChecked());
aFilterDockFloating->setEnabled(aFilterDockVisible->isChecked()); actions.aFloating->setChecked(dockWidget->isFloating());
aPrintingSelectorDockFloating->setEnabled(aPrintingSelectorDockVisible->isChecked()); }
aCardInfoDockFloating->setChecked(cardInfoDockWidget->isFloating());
aFilterDockFloating->setChecked(filterDockWidget->isFloating());
aDeckDockFloating->setChecked(deckDockWidget->isFloating());
aPrintingSelectorDockFloating->setChecked(printingSelectorDockWidget->isFloating());
cardInfoDockWidget->setMinimumSize(layouts.getDeckEditorCardSize()); cardInfoDockWidget->setMinimumSize(layouts.getDeckEditorCardSize());
cardInfoDockWidget->setMaximumSize(layouts.getDeckEditorCardSize()); cardInfoDockWidget->setMaximumSize(layouts.getDeckEditorCardSize());
@ -348,31 +314,30 @@ void TabDeckEditorVisual::loadLayout()
/** @brief Resets the layout to default positions and dock states. */ /** @brief Resets the layout to default positions and dock states. */
void TabDeckEditorVisual::restartLayout() void TabDeckEditorVisual::restartLayout()
{ {
aCardInfoDockVisible->setChecked(true); for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) {
aDeckDockVisible->setChecked(true); QDockWidget *dockWidget = it.key();
aFilterDockVisible->setChecked(false); const DockActions &actions = it.value();
aPrintingSelectorDockVisible->setChecked(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference());
aCardInfoDockFloating->setChecked(false); actions.aFloating->setEnabled(false);
aDeckDockFloating->setChecked(false); dockWidget->setFloating(false);
aFilterDockFloating->setChecked(false); }
aPrintingSelectorDockFloating->setChecked(false);
setCentralWidget(centralWidget); dockToActions[cardInfoDockWidget].aVisible->setChecked(true);
addDockWidget(Qt::RightDockWidgetArea, deckDockWidget); dockToActions[deckDockWidget].aVisible->setChecked(true);
addDockWidget(Qt::RightDockWidgetArea, cardInfoDockWidget); dockToActions[filterDockWidget].aVisible->setChecked(false);
addDockWidget(Qt::RightDockWidgetArea, filterDockWidget); dockToActions[printingSelectorDockWidget].aVisible->setChecked(
addDockWidget(Qt::RightDockWidgetArea, printingSelectorDockWidget); !SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference());
deckDockWidget->setVisible(true); deckDockWidget->setVisible(true);
cardInfoDockWidget->setVisible(true); cardInfoDockWidget->setVisible(true);
filterDockWidget->setVisible(false); filterDockWidget->setVisible(false);
printingSelectorDockWidget->setVisible(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()); printingSelectorDockWidget->setVisible(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference());
deckDockWidget->setFloating(false); setCentralWidget(centralWidget);
cardInfoDockWidget->setFloating(false); addDockWidget(Qt::RightDockWidgetArea, deckDockWidget);
filterDockWidget->setFloating(false); addDockWidget(Qt::RightDockWidgetArea, cardInfoDockWidget);
printingSelectorDockWidget->setFloating(false); addDockWidget(Qt::RightDockWidgetArea, filterDockWidget);
addDockWidget(Qt::RightDockWidgetArea, printingSelectorDockWidget);
splitDockWidget(cardInfoDockWidget, printingSelectorDockWidget, Qt::Vertical); splitDockWidget(cardInfoDockWidget, printingSelectorDockWidget, Qt::Vertical);
splitDockWidget(cardInfoDockWidget, deckDockWidget, Qt::Horizontal); splitDockWidget(cardInfoDockWidget, deckDockWidget, Qt::Horizontal);
@ -391,22 +356,16 @@ void TabDeckEditorVisual::retranslateUi()
filterDockWidget->setWindowTitle(tr("Filters")); filterDockWidget->setWindowTitle(tr("Filters"));
viewMenu->setTitle(tr("&View")); 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")); dockToActions[cardInfoDockWidget].menu->setTitle(tr("Card Info"));
aCardInfoDockFloating->setText(tr("Floating")); dockToActions[deckDockWidget].menu->setTitle(tr("Deck"));
dockToActions[filterDockWidget].menu->setTitle(tr("Filters"));
dockToActions[printingSelectorDockWidget].menu->setTitle(tr("Printing"));
aDeckDockVisible->setText(tr("Visible")); for (auto &actions : dockToActions.values()) {
aDeckDockFloating->setText(tr("Floating")); actions.aVisible->setText(tr("Visible"));
actions.aFloating->setText(tr("Floating"));
aFilterDockVisible->setText(tr("Visible")); }
aFilterDockFloating->setText(tr("Floating"));
aPrintingSelectorDockVisible->setText(tr("Visible"));
aPrintingSelectorDockFloating->setText(tr("Floating"));
aResetLayout->setText(tr("Reset layout")); aResetLayout->setText(tr("Reset layout"));
} }
@ -419,18 +378,11 @@ void TabDeckEditorVisual::retranslateUi()
bool TabDeckEditorVisual::eventFilter(QObject *o, QEvent *e) bool TabDeckEditorVisual::eventFilter(QObject *o, QEvent *e)
{ {
if (e->type() == QEvent::Close) { if (e->type() == QEvent::Close) {
if (o == cardInfoDockWidget) { auto dockWidget = qobject_cast<QDockWidget *>(o);
aCardInfoDockVisible->setChecked(false); if (dockToActions.contains(dockWidget)) {
aCardInfoDockFloating->setEnabled(false); DockActions actions = dockToActions.value(dockWidget);
} else if (o == deckDockWidget) { actions.aVisible->setChecked(false);
aDeckDockVisible->setChecked(false); actions.aFloating->setEnabled(false);
aDeckDockFloating->setEnabled(false);
} else if (o == filterDockWidget) {
aFilterDockVisible->setChecked(false);
aFilterDockFloating->setEnabled(false);
} else if (o == printingSelectorDockWidget) {
aPrintingSelectorDockVisible->setChecked(false);
aPrintingSelectorDockFloating->setEnabled(false);
} }
} }
@ -450,28 +402,15 @@ bool TabDeckEditorVisual::eventFilter(QObject *o, QEvent *e)
void TabDeckEditorVisual::dockVisibleTriggered() void TabDeckEditorVisual::dockVisibleTriggered()
{ {
QObject *o = sender(); QObject *o = sender();
if (o == aCardInfoDockVisible) { for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) {
cardInfoDockWidget->setHidden(!aCardInfoDockVisible->isChecked()); QDockWidget *dockWidget = it.key();
aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); const DockActions &actions = it.value();
return;
}
if (o == aDeckDockVisible) { if (o == actions.aVisible) {
deckDockWidget->setHidden(!aDeckDockVisible->isChecked()); dockWidget->setHidden(!actions.aVisible->isChecked());
aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); actions.aFloating->setEnabled(actions.aVisible->isChecked());
return; 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;
} }
} }
@ -479,24 +418,15 @@ void TabDeckEditorVisual::dockVisibleTriggered()
void TabDeckEditorVisual::dockFloatingTriggered() void TabDeckEditorVisual::dockFloatingTriggered()
{ {
QObject *o = sender(); QObject *o = sender();
if (o == aCardInfoDockFloating) {
cardInfoDockWidget->setFloating(aCardInfoDockFloating->isChecked());
return;
}
if (o == aDeckDockFloating) { for (auto it = dockToActions.begin(); it != dockToActions.end(); ++it) {
deckDockWidget->setFloating(aDeckDockFloating->isChecked()); QDockWidget *dockWidget = it.key();
return; const DockActions &actions = it.value();
}
if (o == aFilterDockFloating) { if (o == actions.aFloating) {
filterDockWidget->setFloating(aFilterDockFloating->isChecked()); dockWidget->setFloating(actions.aFloating->isChecked());
return; return;
} }
if (o == aPrintingSelectorDockFloating) {
printingSelectorDockWidget->setFloating(aPrintingSelectorDockFloating->isChecked());
return;
} }
} }
@ -504,23 +434,10 @@ void TabDeckEditorVisual::dockFloatingTriggered()
void TabDeckEditorVisual::dockTopLevelChanged(bool topLevel) void TabDeckEditorVisual::dockTopLevelChanged(bool topLevel)
{ {
QObject *o = sender(); QObject *o = sender();
if (o == cardInfoDockWidget) {
aCardInfoDockFloating->setChecked(topLevel);
return;
}
if (o == deckDockWidget) { auto dockWidget = qobject_cast<QDockWidget *>(o);
aDeckDockFloating->setChecked(topLevel); if (dockToActions.contains(dockWidget)) {
return; DockActions actions = dockToActions.value(dockWidget);
} actions.aFloating->setChecked(topLevel);
if (o == filterDockWidget) {
aFilterDockFloating->setChecked(topLevel);
return;
}
if (o == printingSelectorDockWidget) {
aPrintingSelectorDockFloating->setChecked(topLevel);
return;
} }
} }