[VDE] Allow visual database display to toggle to table based display. (#6357)

This commit is contained in:
BruebachL
2025-11-27 23:03:30 +01:00
committed by GitHub
parent c75a483ee6
commit bac6beeb50
4 changed files with 78 additions and 34 deletions

View File

@@ -29,10 +29,23 @@ public:
CardDatabaseModel *databaseModel; CardDatabaseModel *databaseModel;
CardDatabaseDisplayModel *databaseDisplayModel; CardDatabaseDisplayModel *databaseDisplayModel;
QTreeView *getDatabaseView()
{
return databaseView;
};
public slots: public slots:
ExactCard currentCard() const; ExactCard currentCard() const;
void setFilterTree(FilterTree *filterTree); void setFilterTree(FilterTree *filterTree);
void clearAllDatabaseFilters(); void clearAllDatabaseFilters();
void updateSearch(const QString &search);
void updateCard(const QModelIndex &current, const QModelIndex &);
void actAddCardToMainDeck();
void actAddCardToSideboard();
void actDecrementCardFromMainDeck();
void actDecrementCardFromSideboard();
void databaseCustomMenu(QPoint point);
void copyDatabaseCellContents();
signals: signals:
void addCardToMainDeck(const ExactCard &card); void addCardToMainDeck(const ExactCard &card);
@@ -51,14 +64,6 @@ private:
private slots: private slots:
void retranslateUi(); void retranslateUi();
void updateSearch(const QString &search);
void updateCard(const QModelIndex &current, const QModelIndex &);
void actAddCardToMainDeck();
void actAddCardToSideboard();
void actDecrementCardFromMainDeck();
void actDecrementCardFromSideboard();
void databaseCustomMenu(QPoint point);
void copyDatabaseCellContents();
void saveDbHeaderState(); void saveDbHeaderState();
}; };

View File

@@ -25,7 +25,8 @@ public:
void retranslateUi() override; void retranslateUi() override;
[[nodiscard]] QString getTabText() const override [[nodiscard]] QString getTabText() const override
{ {
return tr("Visual Database Display"); return visualDatabaseDisplayWidget->displayModeButton->isChecked() ? tr("Database Display")
: tr("Visual Database Display");
} }
}; };

View File

@@ -16,6 +16,7 @@
#include <QHeaderView> #include <QHeaderView>
#include <QScrollBar> #include <QScrollBar>
#include <QStyledItemDelegate>
#include <libcockatrice/card/card_info_comparator.h> #include <libcockatrice/card/card_info_comparator.h>
#include <libcockatrice/card/database/card_database.h> #include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/card/database/card_database_manager.h> #include <libcockatrice/card/database/card_database_manager.h>
@@ -60,28 +61,39 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
setFocusProxy(searchEdit); setFocusProxy(searchEdit);
setFocusPolicy(Qt::ClickFocus); 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 = new FilterTreeModel();
filterModel->setObjectName("filterModel"); filterModel->setObjectName("filterModel");
searchKeySignals.setObjectName("searchKeySignals"); searchKeySignals.setObjectName("searchKeySignals");
connect(searchEdit, &QLineEdit::textChanged, this, &VisualDatabaseDisplayWidget::updateSearch); connect(searchEdit, &SearchLineEdit::textChanged, this, &VisualDatabaseDisplayWidget::updateSearch);
/*connect(&searchKeySignals, SIGNAL(onEnter()), this, SLOT(actAddCard())); connect(&searchKeySignals, &KeySignals::onEnter, deckEditor->databaseDisplayDockWidget,
connect(&searchKeySignals, SIGNAL(onCtrlAltEqual()), this, SLOT(actAddCard())); &DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck);
connect(&searchKeySignals, SIGNAL(onCtrlAltRBracket()), this, SLOT(actAddCardToSideboard())); connect(&searchKeySignals, &KeySignals::onCtrlAltEqual, deckEditor->databaseDisplayDockWidget,
connect(&searchKeySignals, SIGNAL(onCtrlAltMinus()), this, SLOT(actDecrementCard())); &DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck);
connect(&searchKeySignals, SIGNAL(onCtrlAltLBracket()), this, SLOT(actDecrementCardFromSideboard())); connect(&searchKeySignals, &KeySignals::onCtrlAltRBracket, deckEditor->databaseDisplayDockWidget,
connect(&searchKeySignals, SIGNAL(onCtrlAltEnter()), this, SLOT(actAddCardToSideboard())); &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
connect(&searchKeySignals, SIGNAL(onCtrlEnter()), this, SLOT(actAddCardToSideboard())); connect(&searchKeySignals, &KeySignals::onCtrlAltMinus, deckEditor->databaseDisplayDockWidget,
connect(&searchKeySignals, SIGNAL(onCtrlC()), this, SLOT(copyDatabaseCellContents()));*/ &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 = deckEditor->databaseDisplayDockWidget->getDatabaseView();
databaseView->setObjectName("databaseView");
databaseView->setFocusProxy(searchEdit); databaseView->setFocusProxy(searchEdit);
databaseView->setRootIsDecorated(false);
databaseView->setItemDelegate(nullptr); databaseView->setItemDelegate(nullptr);
databaseView->setSortingEnabled(true);
databaseView->sortByColumn(0, Qt::AscendingOrder);
databaseView->setModel(databaseDisplayModel);
databaseView->setVisible(false); databaseView->setVisible(false);
searchEdit->setTreeView(databaseView); searchEdit->setTreeView(databaseView);
@@ -168,11 +180,14 @@ void VisualDatabaseDisplayWidget::initialize()
searchLayout->addWidget(colorFilterWidget); searchLayout->addWidget(colorFilterWidget);
searchLayout->addWidget(clearFilterWidget); searchLayout->addWidget(clearFilterWidget);
searchLayout->addWidget(searchEdit); searchLayout->addWidget(searchEdit);
searchLayout->addWidget(displayModeButton);
mainLayout->addWidget(searchContainer); mainLayout->addWidget(searchContainer);
mainLayout->addWidget(filterContainer); mainLayout->addWidget(filterContainer);
mainLayout->addWidget(databaseView);
mainLayout->addWidget(flowWidget); mainLayout->addWidget(flowWidget);
mainLayout->addWidget(cardSizeWidget); mainLayout->addWidget(cardSizeWidget);
@@ -213,6 +228,25 @@ void VisualDatabaseDisplayWidget::resizeEvent(QResizeEvent *event)
loadCurrentPage(); 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) void VisualDatabaseDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance)
{ {
emit cardClickedDatabaseDisplay(event, instance); emit cardClickedDatabaseDisplay(event, instance);
@@ -246,17 +280,19 @@ void VisualDatabaseDisplayWidget::updateSearch(const QString &search) const
void VisualDatabaseDisplayWidget::searchModelChanged() void VisualDatabaseDisplayWidget::searchModelChanged()
{ {
// Clear the current page and prepare for new data if (flowWidget->isVisible()) {
flowWidget->clearLayout(); // Clear existing cards // Clear the current page and prepare for new data
cards->clear(); // Clear the card list flowWidget->clearLayout(); // Clear existing cards
// Reset scrollbar position to the top after loading new cards cards->clear(); // Clear the card list
if (QScrollBar *scrollBar = flowWidget->scrollArea->verticalScrollBar()) { // Reset scrollbar position to the top after loading new cards
scrollBar->setValue(0); // Reset scrollbar to top if (QScrollBar *scrollBar = flowWidget->scrollArea->verticalScrollBar()) {
} scrollBar->setValue(0); // Reset scrollbar to top
}
currentPage = 0; currentPage = 0;
loadCurrentPage(); loadCurrentPage();
qCDebug(VisualDatabaseDisplayLog) << "Search model changed"; qCDebug(VisualDatabaseDisplayLog) << "Search model changed";
}
} }
void VisualDatabaseDisplayWidget::loadCurrentPage() void VisualDatabaseDisplayWidget::loadCurrentPage()

View File

@@ -57,6 +57,7 @@ public:
QWidget *searchContainer; QWidget *searchContainer;
QHBoxLayout *searchLayout; QHBoxLayout *searchLayout;
SearchLineEdit *searchEdit; SearchLineEdit *searchEdit;
QPushButton *displayModeButton;
FilterTreeModel *filterModel; FilterTreeModel *filterModel;
VisualDatabaseDisplayColorFilterWidget *colorFilterWidget; VisualDatabaseDisplayColorFilterWidget *colorFilterWidget;
@@ -76,6 +77,7 @@ protected slots:
void wheelEvent(QWheelEvent *event) override; void wheelEvent(QWheelEvent *event) override;
void modelDirty() const; void modelDirty() const;
void updateSearch(const QString &search) const; void updateSearch(const QString &search) const;
void onDisplayModeChanged(bool checked);
private: private:
QLabel *databaseLoadIndicator; QLabel *databaseLoadIndicator;