From ee2699413ca4a48dcd7e72f9ded81b760b05d111 Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Mon, 5 Jan 2026 00:06:22 -0800 Subject: [PATCH] [TabDeckEditor] Make card database a dock widget (#6472) * [TabDeckEditor] Make card database a dock widget * delete eventFilter implementation in abstract --- cockatrice/CMakeLists.txt | 1 + .../deck_editor_card_database_dock_widget.cpp | 65 +++++++++++++++++++ .../deck_editor_card_database_dock_widget.h | 32 +++++++++ .../deck_editor_database_display_widget.cpp | 6 +- .../deck_editor_database_display_widget.h | 2 +- .../widgets/tabs/abstract_tab_deck_editor.cpp | 63 ++---------------- .../widgets/tabs/abstract_tab_deck_editor.h | 18 ++--- .../widgets/tabs/tab_deck_editor.cpp | 36 +++++++++- .../tabs/tab_visual_database_display.cpp | 6 +- .../tab_deck_editor_visual.cpp | 8 +-- .../visual_database_display_widget.cpp | 20 +++--- 11 files changed, 171 insertions(+), 86 deletions(-) create mode 100644 cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.cpp create mode 100644 cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.h diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index 8ebd177db..85e1cd00f 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -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_category_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_database_display_widget.cpp src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.cpp diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.cpp new file mode 100644 index 000000000..5abc6e619 --- /dev/null +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.cpp @@ -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()); +} diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.h b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.h new file mode 100644 index 000000000..6ad442075 --- /dev/null +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.h @@ -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 + +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 diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp index f5549a98c..590fd1d1b 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp @@ -21,10 +21,10 @@ static bool canBeCommander(const CardInfo &cardInfo) cardInfo.getText().contains("can be your commander", Qt::CaseInsensitive); } -DeckEditorDatabaseDisplayWidget::DeckEditorDatabaseDisplayWidget(AbstractTabDeckEditor *parent) - : QWidget(parent), deckEditor(parent) +DeckEditorDatabaseDisplayWidget::DeckEditorDatabaseDisplayWidget(QWidget *parent, AbstractTabDeckEditor *deckEditor) + : QWidget(parent), deckEditor(deckEditor) { - setObjectName("centralWidget"); + setObjectName("databaseDisplayWidget"); centralFrame = new QVBoxLayout(this); centralFrame->setObjectName("centralFrame"); diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.h b/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.h index 593be7825..16ae6e255 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.h @@ -23,7 +23,7 @@ class DeckEditorDatabaseDisplayWidget : public QWidget Q_OBJECT public: - explicit DeckEditorDatabaseDisplayWidget(AbstractTabDeckEditor *parent); + explicit DeckEditorDatabaseDisplayWidget(QWidget *parent, AbstractTabDeckEditor *deckEditor); AbstractTabDeckEditor *deckEditor; SearchLineEdit *searchEdit; CardDatabaseModel *databaseModel; 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 29bcc1ab1..53540b6f9 100644 --- a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp +++ b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp @@ -55,7 +55,7 @@ AbstractTabDeckEditor::AbstractTabDeckEditor(TabSupervisor *_tabSupervisor) : Ta deckStateManager = new DeckStateManager(this); - databaseDisplayDockWidget = new DeckEditorDatabaseDisplayWidget(this); + cardDatabaseDockWidget = new DeckEditorCardDatabaseDockWidget(this); deckDockWidget = new DeckEditorDeckDockWidget(this); cardInfoDockWidget = new DeckEditorCardInfoDockWidget(this); filterDockWidget = new DeckEditorFilterDockWidget(this); @@ -68,21 +68,9 @@ AbstractTabDeckEditor::AbstractTabDeckEditor(TabSupervisor *_tabSupervisor) : Ta connect(deckStateManager, &DeckStateManager::isModifiedChanged, this, &AbstractTabDeckEditor::onDeckModified); 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(filterDockWidget, &DeckEditorFilterDockWidget::clearAllDatabaseFilters, databaseDisplayDockWidget, - &DeckEditorDatabaseDisplayWidget::clearAllDatabaseFilters); + connect(filterDockWidget, &DeckEditorFilterDockWidget::clearAllDatabaseFilters, cardDatabaseDockWidget, + &DeckEditorCardDatabaseDockWidget::clearAllDatabaseFilters); // Connect shortcut changes connect(&SettingsCache::instance().shortcuts(), &ShortcutsSettings::shortCutChanged, this, @@ -122,7 +110,7 @@ void AbstractTabDeckEditor::addCardHelper(const ExactCard &card, const QString & { 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. */ void AbstractTabDeckEditor::actAnalyzeDeckDeckstats() { - auto *interface = new DeckStatsInterface(*databaseDisplayDockWidget->databaseModel->getDatabase(), this); + auto *interface = new DeckStatsInterface(*cardDatabaseDockWidget->getDatabase(), this); interface->analyzeDeck(deckStateManager->getDeckList()); } /** @brief Analyzes the deck using TappedOut. */ void AbstractTabDeckEditor::actAnalyzeDeckTappedout() { - auto *interface = new TappedOutInterface(*databaseDisplayDockWidget->databaseModel->getDatabase(), this); + auto *interface = new TappedOutInterface(*cardDatabaseDockWidget->getDatabase(), this); interface->analyzeDeck(deckStateManager->getDeckList()); } /** @brief Applies a new filter tree to the database display. */ void AbstractTabDeckEditor::filterTreeChanged(FilterTree *filterTree) { - databaseDisplayDockWidget->setFilterTree(filterTree); + cardDatabaseDockWidget->setFilterTree(filterTree); } /** @@ -571,43 +559,6 @@ void AbstractTabDeckEditor::closeEvent(QCloseEvent *event) 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. */ bool AbstractTabDeckEditor::confirmClose() { 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 69b2b4a1c..025a65cad 100644 --- a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.h +++ b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.h @@ -8,6 +8,7 @@ #ifndef 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_database_display_widget.h" #include "../interface/widgets/deck_editor/deck_editor_deck_dock_widget.h" @@ -27,7 +28,7 @@ class CardInfoFrameWidget; class DeckLoader; class DeckEditorMenu; class DeckEditorCardInfoDockWidget; -class DeckEditorDatabaseDisplayWidget; +class DeckEditorCardDatabaseDockWidget; class DeckEditorDeckDockWidget; class DeckEditorFilterDockWidget; class DeckEditorPrintingSelectorDockWidget; @@ -126,7 +127,7 @@ public: // UI Elements DeckStateManager *deckStateManager; DeckEditorMenu *deckMenu; ///< Menu for deck operations - DeckEditorDatabaseDisplayWidget *databaseDisplayDockWidget; ///< Database dock + DeckEditorCardDatabaseDockWidget *cardDatabaseDockWidget; ///< Database dock DeckEditorCardInfoDockWidget *cardInfoDockWidget; ///< Card info dock DeckEditorDeckDockWidget *deckDockWidget; ///< Deck dock DeckEditorFilterDockWidget *filterDockWidget; ///< Filter dock @@ -245,9 +246,6 @@ protected slots: /** @brief Handles dock close events. */ 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. */ virtual void dockVisibleTriggered() = 0; @@ -295,11 +293,15 @@ protected: virtual void openDeckFromFile(const QString &fileName, DeckOpenLocation deckOpenLocation); // UI Menu Elements - QMenu *viewMenu, *cardInfoDockMenu, *deckDockMenu, *filterDockMenu, *printingSelectorDockMenu; + QMenu *viewMenu, *cardInfoDockMenu, *cardDatabaseDockMenu, *deckDockMenu, *filterDockMenu, + *printingSelectorDockMenu; QAction *aResetLayout; - QAction *aCardInfoDockVisible, *aCardInfoDockFloating, *aDeckDockVisible, *aDeckDockFloating; - QAction *aFilterDockVisible, *aFilterDockFloating, *aPrintingSelectorDockVisible, *aPrintingSelectorDockFloating; + QAction *aCardInfoDockVisible, *aCardInfoDockFloating; + QAction *aCardDatabaseDockVisible, *aCardDatabaseDockFloating; + QAction *aDeckDockVisible, *aDeckDockFloating; + QAction *aFilterDockVisible, *aFilterDockFloating; + QAction *aPrintingSelectorDockVisible, *aPrintingSelectorDockFloating; }; #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 286252e13..defd7827a 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_deck_editor.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_deck_editor.cpp @@ -55,6 +55,7 @@ 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()); @@ -67,6 +68,14 @@ void TabDeckEditor::createMenus() 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); @@ -126,18 +135,22 @@ void TabDeckEditor::retranslateUi() { deckMenu->retranslateUi(); cardInfoDockWidget->retranslateUi(); + cardDatabaseDockWidget->retranslateUi(); deckDockWidget->retranslateUi(); filterDockWidget->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")); @@ -171,7 +184,6 @@ void TabDeckEditor::showPrintingSelector() void TabDeckEditor::loadLayout() { LayoutsSettings &layouts = SettingsCache::instance().layouts(); - setCentralWidget(databaseDisplayDockWidget); auto &layoutState = layouts.getDeckEditorLayoutState(); if (layoutState.isNull()) @@ -189,16 +201,19 @@ void TabDeckEditor::loadLayout() } aCardInfoDockVisible->setChecked(!cardInfoDockWidget->isHidden()); + aCardDatabaseDockVisible->setChecked(!cardDatabaseDockWidget->isHidden()); aFilterDockVisible->setChecked(!filterDockWidget->isHidden()); aDeckDockVisible->setChecked(!deckDockWidget->isHidden()); aPrintingSelectorDockVisible->setChecked(!printingSelectorDockWidget->isHidden()); aCardInfoDockFloating->setEnabled(aCardInfoDockVisible->isChecked()); + aCardDatabaseDockFloating->setChecked(aCardDatabaseDockVisible->isChecked()); aDeckDockFloating->setEnabled(aDeckDockVisible->isChecked()); aFilterDockFloating->setEnabled(aFilterDockVisible->isChecked()); aPrintingSelectorDockFloating->setEnabled(aPrintingSelectorDockVisible->isChecked()); aCardInfoDockFloating->setChecked(cardInfoDockWidget->isFloating()); + aCardDatabaseDockFloating->setChecked(cardDatabaseDockWidget->isFloating()); aFilterDockFloating->setChecked(filterDockWidget->isFloating()); aDeckDockFloating->setChecked(deckDockWidget->isFloating()); aPrintingSelectorDockFloating->setChecked(printingSelectorDockWidget->isFloating()); @@ -226,27 +241,31 @@ void TabDeckEditor::restartLayout() // Update menu checkboxes aCardInfoDockVisible->setChecked(true); + aCardDatabaseDockVisible->setChecked(true); aDeckDockVisible->setChecked(true); aFilterDockVisible->setChecked(true); aPrintingSelectorDockVisible->setChecked(!SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference()); aCardInfoDockFloating->setChecked(false); + aCardDatabaseDockFloating->setChecked(false); aDeckDockFloating->setChecked(false); aFilterDockFloating->setChecked(false); aPrintingSelectorDockFloating->setChecked(false); - setCentralWidget(databaseDisplayDockWidget); + addDockWidget(Qt::LeftDockWidgetArea, cardDatabaseDockWidget); addDockWidget(Qt::RightDockWidgetArea, deckDockWidget); addDockWidget(Qt::RightDockWidgetArea, cardInfoDockWidget); 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); @@ -269,6 +288,9 @@ void TabDeckEditor::freeDocksSize() deckDockWidget->setMinimumSize(minSize); deckDockWidget->setMaximumSize(maxSize); + cardDatabaseDockWidget->setMinimumSize(minSize); + cardDatabaseDockWidget->setMaximumSize(maxSize); + cardInfoDockWidget->setMinimumSize(minSize); cardInfoDockWidget->setMaximumSize(maxSize); @@ -286,6 +308,9 @@ void TabDeckEditor::dockVisibleTriggered() 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()); @@ -304,6 +329,8 @@ 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) @@ -318,6 +345,8 @@ 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) @@ -338,6 +367,9 @@ bool TabDeckEditor::eventFilter(QObject *o, QEvent *e) 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); diff --git a/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.cpp b/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.cpp index d45cdded0..5e8fb8670 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.cpp @@ -6,9 +6,9 @@ TabVisualDatabaseDisplay::TabVisualDatabaseDisplay(TabSupervisor *_tabSupervisor { deckEditor = new TabDeckEditor(_tabSupervisor); deckEditor->setHidden(true); - visualDatabaseDisplayWidget = - new VisualDatabaseDisplayWidget(this, deckEditor, deckEditor->databaseDisplayDockWidget->databaseModel, - deckEditor->databaseDisplayDockWidget->databaseDisplayModel); + visualDatabaseDisplayWidget = new VisualDatabaseDisplayWidget( + this, deckEditor, deckEditor->cardDatabaseDockWidget->databaseDisplayWidget->databaseModel, + deckEditor->cardDatabaseDockWidget->databaseDisplayWidget->databaseDisplayModel); setCentralWidget(visualDatabaseDisplayWidget); 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 82f96860d..b24013319 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 @@ -50,7 +50,7 @@ TabDeckEditorVisual::TabDeckEditorVisual(TabSupervisor *_tabSupervisor) : Abstra refreshShortcuts(); loadLayout(); - databaseDisplayDockWidget->setHidden(true); + cardDatabaseDockWidget->setHidden(true); } /** @brief Creates the central frame containing the tab container. */ @@ -62,9 +62,9 @@ void TabDeckEditorVisual::createCentralFrame() centralFrame = new QVBoxLayout; centralWidget->setLayout(centralFrame); - tabContainer = new TabDeckEditorVisualTabWidget(centralWidget, this, deckStateManager->getModel(), - databaseDisplayDockWidget->databaseModel, - databaseDisplayDockWidget->databaseDisplayModel); + tabContainer = new TabDeckEditorVisualTabWidget( + centralWidget, this, deckStateManager->getModel(), cardDatabaseDockWidget->databaseDisplayWidget->databaseModel, + cardDatabaseDockWidget->databaseDisplayWidget->databaseDisplayModel); connect(tabContainer, &TabDeckEditorVisualTabWidget::cardChanged, this, &TabDeckEditorVisual::changeModelIndexAndCardInfo); diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp index c5eaa171a..6112faedf 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp @@ -74,25 +74,27 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent, searchKeySignals.setObjectName("searchKeySignals"); 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); - connect(&searchKeySignals, &KeySignals::onCtrlAltEqual, deckEditor->databaseDisplayDockWidget, + connect(&searchKeySignals, &KeySignals::onCtrlAltEqual, databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck); - connect(&searchKeySignals, &KeySignals::onCtrlAltRBracket, deckEditor->databaseDisplayDockWidget, + connect(&searchKeySignals, &KeySignals::onCtrlAltRBracket, databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); - connect(&searchKeySignals, &KeySignals::onCtrlAltMinus, deckEditor->databaseDisplayDockWidget, + connect(&searchKeySignals, &KeySignals::onCtrlAltMinus, databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::actDecrementCardFromMainDeck); - connect(&searchKeySignals, &KeySignals::onCtrlAltLBracket, deckEditor->databaseDisplayDockWidget, + connect(&searchKeySignals, &KeySignals::onCtrlAltLBracket, databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::actDecrementCardFromSideboard); - connect(&searchKeySignals, &KeySignals::onCtrlAltEnter, deckEditor->databaseDisplayDockWidget, + connect(&searchKeySignals, &KeySignals::onCtrlAltEnter, databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); - connect(&searchKeySignals, &KeySignals::onCtrlEnter, deckEditor->databaseDisplayDockWidget, + connect(&searchKeySignals, &KeySignals::onCtrlEnter, databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); - connect(&searchKeySignals, &KeySignals::onCtrlC, deckEditor->databaseDisplayDockWidget, + connect(&searchKeySignals, &KeySignals::onCtrlC, databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::copyDatabaseCellContents); connect(help, &QAction::triggered, this, [this] { createSearchSyntaxHelpWindow(searchEdit); }); - databaseView = deckEditor->databaseDisplayDockWidget->getDatabaseView(); + databaseView = databaseDisplayWidget->getDatabaseView(); databaseView->setFocusProxy(searchEdit); databaseView->setItemDelegate(nullptr); databaseView->setVisible(false);