[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;
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 &current, 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 &current, const QModelIndex &);
void actAddCardToMainDeck();
void actAddCardToSideboard();
void actDecrementCardFromMainDeck();
void actDecrementCardFromSideboard();
void databaseCustomMenu(QPoint point);
void copyDatabaseCellContents();
void saveDbHeaderState();
};

View File

@@ -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");
}
};

View File

@@ -16,6 +16,7 @@
#include <QHeaderView>
#include <QScrollBar>
#include <QStyledItemDelegate>
#include <libcockatrice/card/card_info_comparator.h>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/card/database/card_database_manager.h>
@@ -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()

View File

@@ -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;