From bac6beeb5026fe70952294530f28919e928d83c9 Mon Sep 17 00:00:00 2001 From: BruebachL <44814898+BruebachL@users.noreply.github.com> Date: Thu, 27 Nov 2025 23:03:30 +0100 Subject: [PATCH] [VDE] Allow visual database display to toggle to table based display. (#6357) --- .../deck_editor_database_display_widget.h | 21 +++-- .../tabs/tab_visual_database_display.h | 3 +- .../visual_database_display_widget.cpp | 86 +++++++++++++------ .../visual_database_display_widget.h | 2 + 4 files changed, 78 insertions(+), 34 deletions(-) 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 efac97eae..0d3ce9f4c 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 @@ -29,10 +29,23 @@ public: CardDatabaseModel *databaseModel; CardDatabaseDisplayModel *databaseDisplayModel; + QTreeView *getDatabaseView() + { + return databaseView; + }; + public slots: ExactCard currentCard() const; void setFilterTree(FilterTree *filterTree); void clearAllDatabaseFilters(); + void updateSearch(const QString &search); + void updateCard(const QModelIndex ¤t, const QModelIndex &); + void actAddCardToMainDeck(); + void actAddCardToSideboard(); + void actDecrementCardFromMainDeck(); + void actDecrementCardFromSideboard(); + void databaseCustomMenu(QPoint point); + void copyDatabaseCellContents(); signals: void addCardToMainDeck(const ExactCard &card); @@ -51,14 +64,6 @@ private: private slots: void retranslateUi(); - void updateSearch(const QString &search); - void updateCard(const QModelIndex ¤t, const QModelIndex &); - void actAddCardToMainDeck(); - void actAddCardToSideboard(); - void actDecrementCardFromMainDeck(); - void actDecrementCardFromSideboard(); - void databaseCustomMenu(QPoint point); - void copyDatabaseCellContents(); void saveDbHeaderState(); }; diff --git a/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.h b/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.h index dd6128885..b01f3ab06 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.h +++ b/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.h @@ -25,7 +25,8 @@ public: void retranslateUi() override; [[nodiscard]] QString getTabText() const override { - return tr("Visual Database Display"); + return visualDatabaseDisplayWidget->displayModeButton->isChecked() ? tr("Database Display") + : tr("Visual Database Display"); } }; 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 d371d0ed3..66f6238b9 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 @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -60,28 +61,39 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent, setFocusProxy(searchEdit); setFocusPolicy(Qt::ClickFocus); + displayModeButton = new QPushButton(tr("Visual"), this); + displayModeButton->setCheckable(true); // Toggle button + + connect(displayModeButton, &QPushButton::toggled, this, &VisualDatabaseDisplayWidget::onDisplayModeChanged); + + displayModeButton->setChecked(false); // Start in Visual mode + filterModel = new FilterTreeModel(); filterModel->setObjectName("filterModel"); searchKeySignals.setObjectName("searchKeySignals"); - connect(searchEdit, &QLineEdit::textChanged, this, &VisualDatabaseDisplayWidget::updateSearch); - /*connect(&searchKeySignals, SIGNAL(onEnter()), this, SLOT(actAddCard())); - connect(&searchKeySignals, SIGNAL(onCtrlAltEqual()), this, SLOT(actAddCard())); - connect(&searchKeySignals, SIGNAL(onCtrlAltRBracket()), this, SLOT(actAddCardToSideboard())); - connect(&searchKeySignals, SIGNAL(onCtrlAltMinus()), this, SLOT(actDecrementCard())); - connect(&searchKeySignals, SIGNAL(onCtrlAltLBracket()), this, SLOT(actDecrementCardFromSideboard())); - connect(&searchKeySignals, SIGNAL(onCtrlAltEnter()), this, SLOT(actAddCardToSideboard())); - connect(&searchKeySignals, SIGNAL(onCtrlEnter()), this, SLOT(actAddCardToSideboard())); - connect(&searchKeySignals, SIGNAL(onCtrlC()), this, SLOT(copyDatabaseCellContents()));*/ + connect(searchEdit, &SearchLineEdit::textChanged, this, &VisualDatabaseDisplayWidget::updateSearch); + connect(&searchKeySignals, &KeySignals::onEnter, deckEditor->databaseDisplayDockWidget, + &DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck); + connect(&searchKeySignals, &KeySignals::onCtrlAltEqual, deckEditor->databaseDisplayDockWidget, + &DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck); + connect(&searchKeySignals, &KeySignals::onCtrlAltRBracket, deckEditor->databaseDisplayDockWidget, + &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); + connect(&searchKeySignals, &KeySignals::onCtrlAltMinus, deckEditor->databaseDisplayDockWidget, + &DeckEditorDatabaseDisplayWidget::actDecrementCardFromMainDeck); + connect(&searchKeySignals, &KeySignals::onCtrlAltLBracket, deckEditor->databaseDisplayDockWidget, + &DeckEditorDatabaseDisplayWidget::actDecrementCardFromSideboard); + connect(&searchKeySignals, &KeySignals::onCtrlAltEnter, deckEditor->databaseDisplayDockWidget, + &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); + connect(&searchKeySignals, &KeySignals::onCtrlEnter, deckEditor->databaseDisplayDockWidget, + &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); + connect(&searchKeySignals, &KeySignals::onCtrlC, deckEditor->databaseDisplayDockWidget, + &DeckEditorDatabaseDisplayWidget::copyDatabaseCellContents); + connect(help, &QAction::triggered, this, [this] { createSearchSyntaxHelpWindow(searchEdit); }); - databaseView = new QTreeView(this); - databaseView->setObjectName("databaseView"); + databaseView = deckEditor->databaseDisplayDockWidget->getDatabaseView(); databaseView->setFocusProxy(searchEdit); - databaseView->setRootIsDecorated(false); databaseView->setItemDelegate(nullptr); - databaseView->setSortingEnabled(true); - databaseView->sortByColumn(0, Qt::AscendingOrder); - databaseView->setModel(databaseDisplayModel); databaseView->setVisible(false); searchEdit->setTreeView(databaseView); @@ -168,11 +180,14 @@ void VisualDatabaseDisplayWidget::initialize() searchLayout->addWidget(colorFilterWidget); searchLayout->addWidget(clearFilterWidget); searchLayout->addWidget(searchEdit); + searchLayout->addWidget(displayModeButton); mainLayout->addWidget(searchContainer); mainLayout->addWidget(filterContainer); + mainLayout->addWidget(databaseView); + mainLayout->addWidget(flowWidget); mainLayout->addWidget(cardSizeWidget); @@ -213,6 +228,25 @@ void VisualDatabaseDisplayWidget::resizeEvent(QResizeEvent *event) loadCurrentPage(); } +void VisualDatabaseDisplayWidget::onDisplayModeChanged(bool checked) +{ + if (checked) { + // Table mode + displayModeButton->setText(tr("Table")); + flowWidget->setVisible(false); + cardSizeWidget->setVisible(false); + databaseView->setItemDelegate(new QStyledItemDelegate(databaseView)); + databaseView->setVisible(true); + } else { + // Visual mode + displayModeButton->setText(tr("Visual")); + flowWidget->setVisible(true); + cardSizeWidget->setVisible(true); + databaseView->setVisible(false); + populateCards(); + } +} + void VisualDatabaseDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance) { emit cardClickedDatabaseDisplay(event, instance); @@ -246,17 +280,19 @@ void VisualDatabaseDisplayWidget::updateSearch(const QString &search) const void VisualDatabaseDisplayWidget::searchModelChanged() { - // Clear the current page and prepare for new data - flowWidget->clearLayout(); // Clear existing cards - cards->clear(); // Clear the card list - // Reset scrollbar position to the top after loading new cards - if (QScrollBar *scrollBar = flowWidget->scrollArea->verticalScrollBar()) { - scrollBar->setValue(0); // Reset scrollbar to top - } + if (flowWidget->isVisible()) { + // Clear the current page and prepare for new data + flowWidget->clearLayout(); // Clear existing cards + cards->clear(); // Clear the card list + // Reset scrollbar position to the top after loading new cards + if (QScrollBar *scrollBar = flowWidget->scrollArea->verticalScrollBar()) { + scrollBar->setValue(0); // Reset scrollbar to top + } - currentPage = 0; - loadCurrentPage(); - qCDebug(VisualDatabaseDisplayLog) << "Search model changed"; + currentPage = 0; + loadCurrentPage(); + qCDebug(VisualDatabaseDisplayLog) << "Search model changed"; + } } void VisualDatabaseDisplayWidget::loadCurrentPage() diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.h index c05c755f1..65eab99a4 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.h @@ -57,6 +57,7 @@ public: QWidget *searchContainer; QHBoxLayout *searchLayout; SearchLineEdit *searchEdit; + QPushButton *displayModeButton; FilterTreeModel *filterModel; VisualDatabaseDisplayColorFilterWidget *colorFilterWidget; @@ -76,6 +77,7 @@ protected slots: void wheelEvent(QWheelEvent *event) override; void modelDirty() const; void updateSearch(const QString &search) const; + void onDisplayModeChanged(bool checked); private: QLabel *databaseLoadIndicator;