[TabDeckEditor] Make card database a dock widget (#6472)

* [TabDeckEditor] Make card database a dock widget

* delete eventFilter implementation in abstract
This commit is contained in:
RickyRister 2026-01-05 00:06:22 -08:00 committed by GitHub
parent d50297bbe6
commit ee2699413c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 171 additions and 86 deletions

View file

@ -170,6 +170,7 @@ set(cockatrice_SOURCES
src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.cpp src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.cpp
src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.cpp src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.cpp
src/interface/widgets/deck_editor/deck_list_history_manager_widget.cpp src/interface/widgets/deck_editor/deck_list_history_manager_widget.cpp
src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.cpp
src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.cpp src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.cpp
src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp
src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.cpp src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.cpp

View file

@ -0,0 +1,65 @@
#include "deck_editor_card_database_dock_widget.h"
DeckEditorCardDatabaseDockWidget::DeckEditorCardDatabaseDockWidget(AbstractTabDeckEditor *parent) : QDockWidget(parent)
{
setObjectName("databaseDisplayDock");
setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
createDatabaseDisplayDock(parent);
retranslateUi();
}
void DeckEditorCardDatabaseDockWidget::createDatabaseDisplayDock(AbstractTabDeckEditor *deckEditor)
{
databaseDisplayWidget = new DeckEditorDatabaseDisplayWidget(this, deckEditor);
auto *frame = new QVBoxLayout;
frame->setObjectName("databaseDisplayFrame");
frame->addWidget(databaseDisplayWidget);
auto *dockContents = new QWidget();
dockContents->setObjectName("databaseDisplayDockContents");
dockContents->setLayout(frame);
setWidget(dockContents);
installEventFilter(deckEditor);
connect(this, &QDockWidget::topLevelChanged, deckEditor, &AbstractTabDeckEditor::dockTopLevelChanged);
// connect signals
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::cardChanged, deckEditor,
&AbstractTabDeckEditor::updateCard);
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::addCardToMainDeck, deckEditor,
&AbstractTabDeckEditor::actAddCard);
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::addCardToSideboard, deckEditor,
&AbstractTabDeckEditor::actAddCardToSideboard);
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::decrementCardFromMainDeck, deckEditor,
&AbstractTabDeckEditor::actDecrementCard);
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::decrementCardFromSideboard, deckEditor,
&AbstractTabDeckEditor::actDecrementCardFromSideboard);
}
CardDatabase *DeckEditorCardDatabaseDockWidget::getDatabase() const
{
return databaseDisplayWidget->databaseModel->getDatabase();
}
void DeckEditorCardDatabaseDockWidget::retranslateUi()
{
setWindowTitle(tr("Card Database"));
}
void DeckEditorCardDatabaseDockWidget::setFilterTree(FilterTree *filterTree)
{
databaseDisplayWidget->setFilterTree(filterTree);
}
void DeckEditorCardDatabaseDockWidget::clearAllDatabaseFilters()
{
databaseDisplayWidget->clearAllDatabaseFilters();
}
void DeckEditorCardDatabaseDockWidget::highlightAllSearchEdit()
{
databaseDisplayWidget->searchEdit->setSelection(0, databaseDisplayWidget->searchEdit->text().length());
}

View file

@ -0,0 +1,32 @@
#ifndef COCKATRICE_DECK_EDITOR_CARD_DATABASE_DOCK_WIDGET_H
#define COCKATRICE_DECK_EDITOR_CARD_DATABASE_DOCK_WIDGET_H
#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h"
#include <QDockWidget>
class AbstractTabDeckEditor;
class CardDatabase;
class DeckEditorDatabaseDisplayWidget;
class FilterTree;
class DeckEditorCardDatabaseDockWidget : public QDockWidget
{
public:
explicit DeckEditorCardDatabaseDockWidget(AbstractTabDeckEditor *parent);
DeckEditorDatabaseDisplayWidget *databaseDisplayWidget;
CardDatabase *getDatabase() const;
void setFilterTree(FilterTree *filterTree);
public slots:
void retranslateUi();
void clearAllDatabaseFilters();
void highlightAllSearchEdit();
private:
void createDatabaseDisplayDock(AbstractTabDeckEditor *deckEditor);
};
#endif // COCKATRICE_DECK_EDITOR_CARD_DATABASE_DOCK_WIDGET_H

View file

@ -21,10 +21,10 @@ static bool canBeCommander(const CardInfo &cardInfo)
cardInfo.getText().contains("can be your commander", Qt::CaseInsensitive); cardInfo.getText().contains("can be your commander", Qt::CaseInsensitive);
} }
DeckEditorDatabaseDisplayWidget::DeckEditorDatabaseDisplayWidget(AbstractTabDeckEditor *parent) DeckEditorDatabaseDisplayWidget::DeckEditorDatabaseDisplayWidget(QWidget *parent, AbstractTabDeckEditor *deckEditor)
: QWidget(parent), deckEditor(parent) : QWidget(parent), deckEditor(deckEditor)
{ {
setObjectName("centralWidget"); setObjectName("databaseDisplayWidget");
centralFrame = new QVBoxLayout(this); centralFrame = new QVBoxLayout(this);
centralFrame->setObjectName("centralFrame"); centralFrame->setObjectName("centralFrame");

View file

@ -23,7 +23,7 @@ class DeckEditorDatabaseDisplayWidget : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit DeckEditorDatabaseDisplayWidget(AbstractTabDeckEditor *parent); explicit DeckEditorDatabaseDisplayWidget(QWidget *parent, AbstractTabDeckEditor *deckEditor);
AbstractTabDeckEditor *deckEditor; AbstractTabDeckEditor *deckEditor;
SearchLineEdit *searchEdit; SearchLineEdit *searchEdit;
CardDatabaseModel *databaseModel; CardDatabaseModel *databaseModel;

View file

@ -55,7 +55,7 @@ AbstractTabDeckEditor::AbstractTabDeckEditor(TabSupervisor *_tabSupervisor) : Ta
deckStateManager = new DeckStateManager(this); deckStateManager = new DeckStateManager(this);
databaseDisplayDockWidget = new DeckEditorDatabaseDisplayWidget(this); cardDatabaseDockWidget = new DeckEditorCardDatabaseDockWidget(this);
deckDockWidget = new DeckEditorDeckDockWidget(this); deckDockWidget = new DeckEditorDeckDockWidget(this);
cardInfoDockWidget = new DeckEditorCardInfoDockWidget(this); cardInfoDockWidget = new DeckEditorCardInfoDockWidget(this);
filterDockWidget = new DeckEditorFilterDockWidget(this); filterDockWidget = new DeckEditorFilterDockWidget(this);
@ -68,21 +68,9 @@ AbstractTabDeckEditor::AbstractTabDeckEditor(TabSupervisor *_tabSupervisor) : Ta
connect(deckStateManager, &DeckStateManager::isModifiedChanged, this, &AbstractTabDeckEditor::onDeckModified); connect(deckStateManager, &DeckStateManager::isModifiedChanged, this, &AbstractTabDeckEditor::onDeckModified);
connect(deckDockWidget, &DeckEditorDeckDockWidget::selectedCardChanged, this, &AbstractTabDeckEditor::updateCard); connect(deckDockWidget, &DeckEditorDeckDockWidget::selectedCardChanged, this, &AbstractTabDeckEditor::updateCard);
// Connect database display signals to this tab
connect(databaseDisplayDockWidget, &DeckEditorDatabaseDisplayWidget::cardChanged, this,
&AbstractTabDeckEditor::updateCard);
connect(databaseDisplayDockWidget, &DeckEditorDatabaseDisplayWidget::addCardToMainDeck, this,
&AbstractTabDeckEditor::actAddCard);
connect(databaseDisplayDockWidget, &DeckEditorDatabaseDisplayWidget::addCardToSideboard, this,
&AbstractTabDeckEditor::actAddCardToSideboard);
connect(databaseDisplayDockWidget, &DeckEditorDatabaseDisplayWidget::decrementCardFromMainDeck, this,
&AbstractTabDeckEditor::actDecrementCard);
connect(databaseDisplayDockWidget, &DeckEditorDatabaseDisplayWidget::decrementCardFromSideboard, this,
&AbstractTabDeckEditor::actDecrementCardFromSideboard);
// Connect filter signals // Connect filter signals
connect(filterDockWidget, &DeckEditorFilterDockWidget::clearAllDatabaseFilters, databaseDisplayDockWidget, connect(filterDockWidget, &DeckEditorFilterDockWidget::clearAllDatabaseFilters, cardDatabaseDockWidget,
&DeckEditorDatabaseDisplayWidget::clearAllDatabaseFilters); &DeckEditorCardDatabaseDockWidget::clearAllDatabaseFilters);
// Connect shortcut changes // Connect shortcut changes
connect(&SettingsCache::instance().shortcuts(), &ShortcutsSettings::shortCutChanged, this, connect(&SettingsCache::instance().shortcuts(), &ShortcutsSettings::shortCutChanged, this,
@ -122,7 +110,7 @@ void AbstractTabDeckEditor::addCardHelper(const ExactCard &card, const QString &
{ {
deckStateManager->addCard(card, zoneName); deckStateManager->addCard(card, zoneName);
databaseDisplayDockWidget->searchEdit->setSelection(0, databaseDisplayDockWidget->searchEdit->text().length()); cardDatabaseDockWidget->highlightAllSearchEdit();
} }
/** /**
@ -544,21 +532,21 @@ void AbstractTabDeckEditor::actExportDeckDecklistXyz()
/** @brief Analyzes the deck using DeckStats. */ /** @brief Analyzes the deck using DeckStats. */
void AbstractTabDeckEditor::actAnalyzeDeckDeckstats() void AbstractTabDeckEditor::actAnalyzeDeckDeckstats()
{ {
auto *interface = new DeckStatsInterface(*databaseDisplayDockWidget->databaseModel->getDatabase(), this); auto *interface = new DeckStatsInterface(*cardDatabaseDockWidget->getDatabase(), this);
interface->analyzeDeck(deckStateManager->getDeckList()); interface->analyzeDeck(deckStateManager->getDeckList());
} }
/** @brief Analyzes the deck using TappedOut. */ /** @brief Analyzes the deck using TappedOut. */
void AbstractTabDeckEditor::actAnalyzeDeckTappedout() void AbstractTabDeckEditor::actAnalyzeDeckTappedout()
{ {
auto *interface = new TappedOutInterface(*databaseDisplayDockWidget->databaseModel->getDatabase(), this); auto *interface = new TappedOutInterface(*cardDatabaseDockWidget->getDatabase(), this);
interface->analyzeDeck(deckStateManager->getDeckList()); interface->analyzeDeck(deckStateManager->getDeckList());
} }
/** @brief Applies a new filter tree to the database display. */ /** @brief Applies a new filter tree to the database display. */
void AbstractTabDeckEditor::filterTreeChanged(FilterTree *filterTree) void AbstractTabDeckEditor::filterTreeChanged(FilterTree *filterTree)
{ {
databaseDisplayDockWidget->setFilterTree(filterTree); cardDatabaseDockWidget->setFilterTree(filterTree);
} }
/** /**
@ -571,43 +559,6 @@ void AbstractTabDeckEditor::closeEvent(QCloseEvent *event)
event->accept(); event->accept();
} }
/**
* @brief Event filter for dock visibility and geometry changes.
* @param o Object sending the event.
* @param e Event.
* @return False always.
*/
bool AbstractTabDeckEditor::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);
}
}
if (o == this && e->type() == QEvent::Hide) {
LayoutsSettings &layouts = SettingsCache::instance().layouts();
layouts.setDeckEditorLayoutState(saveState());
layouts.setDeckEditorGeometry(saveGeometry());
layouts.setDeckEditorCardSize(cardInfoDockWidget->size());
layouts.setDeckEditorFilterSize(filterDockWidget->size());
layouts.setDeckEditorDeckSize(deckDockWidget->size());
layouts.setDeckEditorPrintingSelectorSize(printingSelectorDockWidget->size());
}
return false;
}
/** @brief Shows a confirmation dialog before closing. */ /** @brief Shows a confirmation dialog before closing. */
bool AbstractTabDeckEditor::confirmClose() bool AbstractTabDeckEditor::confirmClose()
{ {

View file

@ -8,6 +8,7 @@
#ifndef TAB_GENERIC_DECK_EDITOR_H #ifndef TAB_GENERIC_DECK_EDITOR_H
#define TAB_GENERIC_DECK_EDITOR_H #define TAB_GENERIC_DECK_EDITOR_H
#include "../interface/widgets/deck_editor/deck_editor_card_database_dock_widget.h"
#include "../interface/widgets/deck_editor/deck_editor_card_info_dock_widget.h" #include "../interface/widgets/deck_editor/deck_editor_card_info_dock_widget.h"
#include "../interface/widgets/deck_editor/deck_editor_database_display_widget.h" #include "../interface/widgets/deck_editor/deck_editor_database_display_widget.h"
#include "../interface/widgets/deck_editor/deck_editor_deck_dock_widget.h" #include "../interface/widgets/deck_editor/deck_editor_deck_dock_widget.h"
@ -27,7 +28,7 @@ class CardInfoFrameWidget;
class DeckLoader; class DeckLoader;
class DeckEditorMenu; class DeckEditorMenu;
class DeckEditorCardInfoDockWidget; class DeckEditorCardInfoDockWidget;
class DeckEditorDatabaseDisplayWidget; class DeckEditorCardDatabaseDockWidget;
class DeckEditorDeckDockWidget; class DeckEditorDeckDockWidget;
class DeckEditorFilterDockWidget; class DeckEditorFilterDockWidget;
class DeckEditorPrintingSelectorDockWidget; class DeckEditorPrintingSelectorDockWidget;
@ -126,7 +127,7 @@ public:
// UI Elements // UI Elements
DeckStateManager *deckStateManager; DeckStateManager *deckStateManager;
DeckEditorMenu *deckMenu; ///< Menu for deck operations DeckEditorMenu *deckMenu; ///< Menu for deck operations
DeckEditorDatabaseDisplayWidget *databaseDisplayDockWidget; ///< Database dock DeckEditorCardDatabaseDockWidget *cardDatabaseDockWidget; ///< Database dock
DeckEditorCardInfoDockWidget *cardInfoDockWidget; ///< Card info dock DeckEditorCardInfoDockWidget *cardInfoDockWidget; ///< Card info dock
DeckEditorDeckDockWidget *deckDockWidget; ///< Deck dock DeckEditorDeckDockWidget *deckDockWidget; ///< Deck dock
DeckEditorFilterDockWidget *filterDockWidget; ///< Filter dock DeckEditorFilterDockWidget *filterDockWidget; ///< Filter dock
@ -245,9 +246,6 @@ protected slots:
/** @brief Handles dock close events. */ /** @brief Handles dock close events. */
void closeEvent(QCloseEvent *event) override; void closeEvent(QCloseEvent *event) override;
/** @brief Event filter for dock state changes. */
bool eventFilter(QObject *o, QEvent *e) override;
/** @brief Slot triggered when a dock visibility changes. Pure virtual. */ /** @brief Slot triggered when a dock visibility changes. Pure virtual. */
virtual void dockVisibleTriggered() = 0; virtual void dockVisibleTriggered() = 0;
@ -295,11 +293,15 @@ 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, *deckDockMenu, *filterDockMenu, *printingSelectorDockMenu; QMenu *viewMenu, *cardInfoDockMenu, *cardDatabaseDockMenu, *deckDockMenu, *filterDockMenu,
*printingSelectorDockMenu;
QAction *aResetLayout; QAction *aResetLayout;
QAction *aCardInfoDockVisible, *aCardInfoDockFloating, *aDeckDockVisible, *aDeckDockFloating; QAction *aCardInfoDockVisible, *aCardInfoDockFloating;
QAction *aFilterDockVisible, *aFilterDockFloating, *aPrintingSelectorDockVisible, *aPrintingSelectorDockFloating; QAction *aCardDatabaseDockVisible, *aCardDatabaseDockFloating;
QAction *aDeckDockVisible, *aDeckDockFloating;
QAction *aFilterDockVisible, *aFilterDockFloating;
QAction *aPrintingSelectorDockVisible, *aPrintingSelectorDockFloating;
}; };
#endif // TAB_GENERIC_DECK_EDITOR_H #endif // TAB_GENERIC_DECK_EDITOR_H

View file

@ -55,6 +55,7 @@ void TabDeckEditor::createMenus()
viewMenu = new QMenu(this); viewMenu = new QMenu(this);
cardInfoDockMenu = viewMenu->addMenu(QString()); cardInfoDockMenu = viewMenu->addMenu(QString());
cardDatabaseDockMenu = viewMenu->addMenu(QString());
deckDockMenu = viewMenu->addMenu(QString()); deckDockMenu = viewMenu->addMenu(QString());
filterDockMenu = viewMenu->addMenu(QString()); filterDockMenu = viewMenu->addMenu(QString());
printingSelectorDockMenu = viewMenu->addMenu(QString()); printingSelectorDockMenu = viewMenu->addMenu(QString());
@ -67,6 +68,14 @@ void TabDeckEditor::createMenus()
aCardInfoDockFloating->setCheckable(true); aCardInfoDockFloating->setCheckable(true);
connect(aCardInfoDockFloating, &QAction::triggered, this, &TabDeckEditor::dockFloatingTriggered); 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 // Deck dock
aDeckDockVisible = deckDockMenu->addAction(QString()); aDeckDockVisible = deckDockMenu->addAction(QString());
aDeckDockVisible->setCheckable(true); aDeckDockVisible->setCheckable(true);
@ -126,18 +135,22 @@ void TabDeckEditor::retranslateUi()
{ {
deckMenu->retranslateUi(); deckMenu->retranslateUi();
cardInfoDockWidget->retranslateUi(); cardInfoDockWidget->retranslateUi();
cardDatabaseDockWidget->retranslateUi();
deckDockWidget->retranslateUi(); deckDockWidget->retranslateUi();
filterDockWidget->retranslateUi(); filterDockWidget->retranslateUi();
printingSelectorDockWidget->retranslateUi(); printingSelectorDockWidget->retranslateUi();
viewMenu->setTitle(tr("&View")); viewMenu->setTitle(tr("&View"));
cardInfoDockMenu->setTitle(tr("Card Info")); cardInfoDockMenu->setTitle(tr("Card Info"));
cardDatabaseDockMenu->setTitle(tr("Card Database"));
deckDockMenu->setTitle(tr("Deck")); deckDockMenu->setTitle(tr("Deck"));
filterDockMenu->setTitle(tr("Filters")); filterDockMenu->setTitle(tr("Filters"));
printingSelectorDockMenu->setTitle(tr("Printing")); printingSelectorDockMenu->setTitle(tr("Printing"));
aCardInfoDockVisible->setText(tr("Visible")); aCardInfoDockVisible->setText(tr("Visible"));
aCardInfoDockFloating->setText(tr("Floating")); aCardInfoDockFloating->setText(tr("Floating"));
aCardDatabaseDockVisible->setText(tr("Visible"));
aCardDatabaseDockFloating->setText(tr("Floating"));
aDeckDockVisible->setText(tr("Visible")); aDeckDockVisible->setText(tr("Visible"));
aDeckDockFloating->setText(tr("Floating")); aDeckDockFloating->setText(tr("Floating"));
aFilterDockVisible->setText(tr("Visible")); aFilterDockVisible->setText(tr("Visible"));
@ -171,7 +184,6 @@ void TabDeckEditor::showPrintingSelector()
void TabDeckEditor::loadLayout() void TabDeckEditor::loadLayout()
{ {
LayoutsSettings &layouts = SettingsCache::instance().layouts(); LayoutsSettings &layouts = SettingsCache::instance().layouts();
setCentralWidget(databaseDisplayDockWidget);
auto &layoutState = layouts.getDeckEditorLayoutState(); auto &layoutState = layouts.getDeckEditorLayoutState();
if (layoutState.isNull()) if (layoutState.isNull())
@ -189,16 +201,19 @@ void TabDeckEditor::loadLayout()
} }
aCardInfoDockVisible->setChecked(!cardInfoDockWidget->isHidden()); aCardInfoDockVisible->setChecked(!cardInfoDockWidget->isHidden());
aCardDatabaseDockVisible->setChecked(!cardDatabaseDockWidget->isHidden());
aFilterDockVisible->setChecked(!filterDockWidget->isHidden()); aFilterDockVisible->setChecked(!filterDockWidget->isHidden());
aDeckDockVisible->setChecked(!deckDockWidget->isHidden()); aDeckDockVisible->setChecked(!deckDockWidget->isHidden());
aPrintingSelectorDockVisible->setChecked(!printingSelectorDockWidget->isHidden()); aPrintingSelectorDockVisible->setChecked(!printingSelectorDockWidget->isHidden());
aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked());
aCardDatabaseDockFloating->setChecked(aCardDatabaseDockVisible->isChecked());
aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked());
aFilterDockFloating->setEnabled(aFilterDockVisible->isChecked()); aFilterDockFloating->setEnabled(aFilterDockVisible->isChecked());
aPrintingSelectorDockFloating->setEnabled(aPrintingSelectorDockVisible->isChecked()); aPrintingSelectorDockFloating->setEnabled(aPrintingSelectorDockVisible->isChecked());
aCardInfoDockFloating->setChecked(cardInfoDockWidget->isFloating()); aCardInfoDockFloating->setChecked(cardInfoDockWidget->isFloating());
aCardDatabaseDockFloating->setChecked(cardDatabaseDockWidget->isFloating());
aFilterDockFloating->setChecked(filterDockWidget->isFloating()); aFilterDockFloating->setChecked(filterDockWidget->isFloating());
aDeckDockFloating->setChecked(deckDockWidget->isFloating()); aDeckDockFloating->setChecked(deckDockWidget->isFloating());
aPrintingSelectorDockFloating->setChecked(printingSelectorDockWidget->isFloating()); aPrintingSelectorDockFloating->setChecked(printingSelectorDockWidget->isFloating());
@ -226,27 +241,31 @@ void TabDeckEditor::restartLayout()
// Update menu checkboxes // Update menu checkboxes
aCardInfoDockVisible->setChecked(true); aCardInfoDockVisible->setChecked(true);
aCardDatabaseDockVisible->setChecked(true);
aDeckDockVisible->setChecked(true); aDeckDockVisible->setChecked(true);
aFilterDockVisible->setChecked(true); aFilterDockVisible->setChecked(true);
aPrintingSelectorDockVisible->setChecked(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()); aPrintingSelectorDockVisible->setChecked(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference());
aCardInfoDockFloating->setChecked(false); aCardInfoDockFloating->setChecked(false);
aCardDatabaseDockFloating->setChecked(false);
aDeckDockFloating->setChecked(false); aDeckDockFloating->setChecked(false);
aFilterDockFloating->setChecked(false); aFilterDockFloating->setChecked(false);
aPrintingSelectorDockFloating->setChecked(false); aPrintingSelectorDockFloating->setChecked(false);
setCentralWidget(databaseDisplayDockWidget); addDockWidget(Qt::LeftDockWidgetArea, cardDatabaseDockWidget);
addDockWidget(Qt::RightDockWidgetArea, deckDockWidget); addDockWidget(Qt::RightDockWidgetArea, deckDockWidget);
addDockWidget(Qt::RightDockWidgetArea, cardInfoDockWidget); addDockWidget(Qt::RightDockWidgetArea, cardInfoDockWidget);
addDockWidget(Qt::RightDockWidgetArea, filterDockWidget); addDockWidget(Qt::RightDockWidgetArea, filterDockWidget);
addDockWidget(Qt::RightDockWidgetArea, printingSelectorDockWidget); addDockWidget(Qt::RightDockWidgetArea, printingSelectorDockWidget);
// Show/hide and reset floating // Show/hide and reset floating
cardDatabaseDockWidget->setFloating(false);
deckDockWidget->setFloating(false); deckDockWidget->setFloating(false);
cardInfoDockWidget->setFloating(false); cardInfoDockWidget->setFloating(false);
filterDockWidget->setFloating(false); filterDockWidget->setFloating(false);
printingSelectorDockWidget->setFloating(false); printingSelectorDockWidget->setFloating(false);
cardDatabaseDockWidget->setVisible(true);
deckDockWidget->setVisible(true); deckDockWidget->setVisible(true);
cardInfoDockWidget->setVisible(true); cardInfoDockWidget->setVisible(true);
filterDockWidget->setVisible(true); filterDockWidget->setVisible(true);
@ -269,6 +288,9 @@ void TabDeckEditor::freeDocksSize()
deckDockWidget->setMinimumSize(minSize); deckDockWidget->setMinimumSize(minSize);
deckDockWidget->setMaximumSize(maxSize); deckDockWidget->setMaximumSize(maxSize);
cardDatabaseDockWidget->setMinimumSize(minSize);
cardDatabaseDockWidget->setMaximumSize(maxSize);
cardInfoDockWidget->setMinimumSize(minSize); cardInfoDockWidget->setMinimumSize(minSize);
cardInfoDockWidget->setMaximumSize(maxSize); cardInfoDockWidget->setMaximumSize(maxSize);
@ -286,6 +308,9 @@ void TabDeckEditor::dockVisibleTriggered()
if (o == aCardInfoDockVisible) { if (o == aCardInfoDockVisible) {
cardInfoDockWidget->setHidden(!aCardInfoDockVisible->isChecked()); cardInfoDockWidget->setHidden(!aCardInfoDockVisible->isChecked());
aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked());
} else if (o == aCardDatabaseDockVisible) {
cardDatabaseDockWidget->setHidden(!aCardDatabaseDockVisible->isChecked());
aCardDatabaseDockFloating->setEnabled(aCardDatabaseDockVisible->isChecked());
} else if (o == aDeckDockVisible) { } else if (o == aDeckDockVisible) {
deckDockWidget->setHidden(!aDeckDockVisible->isChecked()); deckDockWidget->setHidden(!aDeckDockVisible->isChecked());
aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked());
@ -304,6 +329,8 @@ void TabDeckEditor::dockFloatingTriggered()
QObject *o = sender(); QObject *o = sender();
if (o == aCardInfoDockFloating) if (o == aCardInfoDockFloating)
cardInfoDockWidget->setFloating(aCardInfoDockFloating->isChecked()); cardInfoDockWidget->setFloating(aCardInfoDockFloating->isChecked());
else if (o == aCardDatabaseDockFloating)
cardDatabaseDockWidget->setFloating(aCardDatabaseDockFloating->isChecked());
else if (o == aDeckDockFloating) else if (o == aDeckDockFloating)
deckDockWidget->setFloating(aDeckDockFloating->isChecked()); deckDockWidget->setFloating(aDeckDockFloating->isChecked());
else if (o == aFilterDockFloating) else if (o == aFilterDockFloating)
@ -318,6 +345,8 @@ void TabDeckEditor::dockTopLevelChanged(bool topLevel)
QObject *o = sender(); QObject *o = sender();
if (o == cardInfoDockWidget) if (o == cardInfoDockWidget)
aCardInfoDockFloating->setChecked(topLevel); aCardInfoDockFloating->setChecked(topLevel);
else if (o == aCardDatabaseDockFloating)
aCardDatabaseDockFloating->setChecked(topLevel);
else if (o == deckDockWidget) else if (o == deckDockWidget)
aDeckDockFloating->setChecked(topLevel); aDeckDockFloating->setChecked(topLevel);
else if (o == filterDockWidget) else if (o == filterDockWidget)
@ -338,6 +367,9 @@ bool TabDeckEditor::eventFilter(QObject *o, QEvent *e)
if (o == cardInfoDockWidget) { if (o == cardInfoDockWidget) {
aCardInfoDockVisible->setChecked(false); aCardInfoDockVisible->setChecked(false);
aCardInfoDockFloating->setEnabled(false); aCardInfoDockFloating->setEnabled(false);
} else if (o == cardDatabaseDockWidget) {
aCardDatabaseDockVisible->setChecked(false);
aCardDatabaseDockFloating->setEnabled(false);
} else if (o == deckDockWidget) { } else if (o == deckDockWidget) {
aDeckDockVisible->setChecked(false); aDeckDockVisible->setChecked(false);
aDeckDockFloating->setEnabled(false); aDeckDockFloating->setEnabled(false);

View file

@ -6,9 +6,9 @@ TabVisualDatabaseDisplay::TabVisualDatabaseDisplay(TabSupervisor *_tabSupervisor
{ {
deckEditor = new TabDeckEditor(_tabSupervisor); deckEditor = new TabDeckEditor(_tabSupervisor);
deckEditor->setHidden(true); deckEditor->setHidden(true);
visualDatabaseDisplayWidget = visualDatabaseDisplayWidget = new VisualDatabaseDisplayWidget(
new VisualDatabaseDisplayWidget(this, deckEditor, deckEditor->databaseDisplayDockWidget->databaseModel, this, deckEditor, deckEditor->cardDatabaseDockWidget->databaseDisplayWidget->databaseModel,
deckEditor->databaseDisplayDockWidget->databaseDisplayModel); deckEditor->cardDatabaseDockWidget->databaseDisplayWidget->databaseDisplayModel);
setCentralWidget(visualDatabaseDisplayWidget); setCentralWidget(visualDatabaseDisplayWidget);

View file

@ -50,7 +50,7 @@ TabDeckEditorVisual::TabDeckEditorVisual(TabSupervisor *_tabSupervisor) : Abstra
refreshShortcuts(); refreshShortcuts();
loadLayout(); loadLayout();
databaseDisplayDockWidget->setHidden(true); cardDatabaseDockWidget->setHidden(true);
} }
/** @brief Creates the central frame containing the tab container. */ /** @brief Creates the central frame containing the tab container. */
@ -62,9 +62,9 @@ void TabDeckEditorVisual::createCentralFrame()
centralFrame = new QVBoxLayout; centralFrame = new QVBoxLayout;
centralWidget->setLayout(centralFrame); centralWidget->setLayout(centralFrame);
tabContainer = new TabDeckEditorVisualTabWidget(centralWidget, this, deckStateManager->getModel(), tabContainer = new TabDeckEditorVisualTabWidget(
databaseDisplayDockWidget->databaseModel, centralWidget, this, deckStateManager->getModel(), cardDatabaseDockWidget->databaseDisplayWidget->databaseModel,
databaseDisplayDockWidget->databaseDisplayModel); cardDatabaseDockWidget->databaseDisplayWidget->databaseDisplayModel);
connect(tabContainer, &TabDeckEditorVisualTabWidget::cardChanged, this, connect(tabContainer, &TabDeckEditorVisualTabWidget::cardChanged, this,
&TabDeckEditorVisual::changeModelIndexAndCardInfo); &TabDeckEditorVisual::changeModelIndexAndCardInfo);

View file

@ -74,25 +74,27 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
searchKeySignals.setObjectName("searchKeySignals"); searchKeySignals.setObjectName("searchKeySignals");
connect(searchEdit, &SearchLineEdit::textChanged, this, &VisualDatabaseDisplayWidget::updateSearch); connect(searchEdit, &SearchLineEdit::textChanged, this, &VisualDatabaseDisplayWidget::updateSearch);
connect(&searchKeySignals, &KeySignals::onEnter, deckEditor->databaseDisplayDockWidget,
DeckEditorDatabaseDisplayWidget *databaseDisplayWidget = deckEditor->cardDatabaseDockWidget->databaseDisplayWidget;
connect(&searchKeySignals, &KeySignals::onEnter, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck); &DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck);
connect(&searchKeySignals, &KeySignals::onCtrlAltEqual, deckEditor->databaseDisplayDockWidget, connect(&searchKeySignals, &KeySignals::onCtrlAltEqual, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck); &DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck);
connect(&searchKeySignals, &KeySignals::onCtrlAltRBracket, deckEditor->databaseDisplayDockWidget, connect(&searchKeySignals, &KeySignals::onCtrlAltRBracket, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
connect(&searchKeySignals, &KeySignals::onCtrlAltMinus, deckEditor->databaseDisplayDockWidget, connect(&searchKeySignals, &KeySignals::onCtrlAltMinus, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actDecrementCardFromMainDeck); &DeckEditorDatabaseDisplayWidget::actDecrementCardFromMainDeck);
connect(&searchKeySignals, &KeySignals::onCtrlAltLBracket, deckEditor->databaseDisplayDockWidget, connect(&searchKeySignals, &KeySignals::onCtrlAltLBracket, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actDecrementCardFromSideboard); &DeckEditorDatabaseDisplayWidget::actDecrementCardFromSideboard);
connect(&searchKeySignals, &KeySignals::onCtrlAltEnter, deckEditor->databaseDisplayDockWidget, connect(&searchKeySignals, &KeySignals::onCtrlAltEnter, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
connect(&searchKeySignals, &KeySignals::onCtrlEnter, deckEditor->databaseDisplayDockWidget, connect(&searchKeySignals, &KeySignals::onCtrlEnter, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
connect(&searchKeySignals, &KeySignals::onCtrlC, deckEditor->databaseDisplayDockWidget, connect(&searchKeySignals, &KeySignals::onCtrlC, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::copyDatabaseCellContents); &DeckEditorDatabaseDisplayWidget::copyDatabaseCellContents);
connect(help, &QAction::triggered, this, [this] { createSearchSyntaxHelpWindow(searchEdit); }); connect(help, &QAction::triggered, this, [this] { createSearchSyntaxHelpWindow(searchEdit); });
databaseView = deckEditor->databaseDisplayDockWidget->getDatabaseView(); databaseView = databaseDisplayWidget->getDatabaseView();
databaseView->setFocusProxy(searchEdit); databaseView->setFocusProxy(searchEdit);
databaseView->setItemDelegate(nullptr); databaseView->setItemDelegate(nullptr);
databaseView->setVisible(false); databaseView->setVisible(false);