[TabDeckEditor] Refactor card database view into own class (#6967)

* rename method

* [TabDeckEditor] Refactor card database view into own class

* fix include guard

* directly get key signals for eventFilter

* fix includes
This commit is contained in:
RickyRister 2026-06-05 10:20:46 -07:00 committed by GitHub
parent 0da2ac4087
commit c14a008080
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 392 additions and 252 deletions

View file

@ -1,5 +1,6 @@
#include "visual_database_display_filter_toolbar_widget.h"
#include "../deck_editor/card_database_view.h"
#include "visual_database_display_widget.h"
#include <QGroupBox>

View file

@ -5,7 +5,7 @@
#include "../../../filters/syntax_help.h"
#include "../../pixel_map_generator.h"
#include "../cards/card_info_picture_with_text_overlay_widget.h"
#include "../quick_settings/settings_button_widget.h"
#include "../deck_editor/card_database_view.h"
#include "../utility/custom_line_edit.h"
#include "visual_database_display_color_filter_widget.h"
#include "visual_database_display_filter_save_load_widget.h"
@ -23,18 +23,21 @@
#include <utility>
VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
AbstractTabDeckEditor *_deckEditor,
CardDatabaseModel *database_model,
CardDatabaseDisplayModel *database_display_model,
DeckListModel *deckListModel)
: QWidget(parent), deckEditor(_deckEditor), databaseModel(database_model),
databaseDisplayModel(database_display_model)
: QWidget(parent)
{
debounceTimer = new QTimer(this);
debounceTimer->setSingleShot(true); // Ensure it only fires once after the timeout
connect(debounceTimer, &QTimer::timeout, this, &VisualDatabaseDisplayWidget::onSearchModelChanged);
// Create display model
databaseDisplayModel = new CardDatabaseDisplayModel(this);
databaseDisplayModel->setObjectName("databaseDisplayModel");
databaseDisplayModel->setSourceModel(database_model);
databaseDisplayModel->setFilterKeyColumn(0);
cards = new QList<ExactCard>;
connect(databaseDisplayModel, &CardDatabaseDisplayModel::modelDirty, this,
&VisualDatabaseDisplayWidget::modelDirty);
@ -61,7 +64,6 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
searchEdit->addAction(loadColorAdjustedPixmap("theme:icons/search"), QLineEdit::LeadingPosition);
auto help = searchEdit->addAction(QPixmap("theme:icons/info"), QLineEdit::TrailingPosition);
connect(help, &QAction::triggered, this, [this] { createSearchSyntaxHelpWindow(searchEdit); });
searchEdit->installEventFilter(&searchKeySignals);
setFocusProxy(searchEdit);
setFocusPolicy(Qt::ClickFocus);
@ -76,37 +78,25 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
filterModel = new FilterTreeModel();
filterModel->setObjectName("filterModel");
searchKeySignals.setObjectName("searchKeySignals");
connect(searchEdit, &SearchLineEdit::textChanged, this, &VisualDatabaseDisplayWidget::updateSearch);
connect(searchEdit, &SearchLineEdit::textChanged, databaseDisplayModel, &CardDatabaseDisplayModel::setStringFilter);
DeckEditorDatabaseDisplayWidget *databaseDisplayWidget = deckEditor->cardDatabaseDockWidget->databaseDisplayWidget;
connect(&searchKeySignals, &KeySignals::onEnter, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck);
connect(&searchKeySignals, &KeySignals::onCtrlAltEqual, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck);
connect(&searchKeySignals, &KeySignals::onCtrlAltRBracket, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
connect(&searchKeySignals, &KeySignals::onCtrlAltMinus, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actDecrementCardFromMainDeck);
connect(&searchKeySignals, &KeySignals::onCtrlAltLBracket, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actDecrementCardFromSideboard);
connect(&searchKeySignals, &KeySignals::onCtrlAltEnter, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
connect(&searchKeySignals, &KeySignals::onCtrlEnter, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
connect(&searchKeySignals, &KeySignals::onCtrlC, databaseDisplayWidget,
&DeckEditorDatabaseDisplayWidget::copyDatabaseCellContents);
connect(help, &QAction::triggered, this, [this] { createSearchSyntaxHelpWindow(searchEdit); });
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::cardAdded, this,
&VisualDatabaseDisplayWidget::highlightAllSearchEdit);
databaseView = databaseDisplayWidget->getDatabaseView();
databaseView = new CardDatabaseView(this, databaseDisplayModel);
databaseView->setObjectName("databaseView");
databaseView->setFocusProxy(searchEdit);
databaseView->setItemDelegate(nullptr);
databaseView->setVisible(false);
searchEdit->setTreeView(databaseView);
searchEdit->installEventFilter(databaseView->getKeySignals());
connect(databaseView, &CardDatabaseView::cardChanged, this, &VisualDatabaseDisplayWidget::onSelectedCardChanged);
connect(databaseView, &CardDatabaseView::cardAdded, this, &VisualDatabaseDisplayWidget::actAddCard);
connect(databaseView, &CardDatabaseView::cardDecremented, this, &VisualDatabaseDisplayWidget::actDecrementCard);
connect(databaseView, &CardDatabaseView::edhrecClicked, this, &VisualDatabaseDisplayWidget::edhrecRequested);
connect(databaseView, &CardDatabaseView::selectPrintingClicked, this,
&VisualDatabaseDisplayWidget::printingSelectorRequested);
connect(databaseView, &CardDatabaseView::relatedCardClicked, this,
&VisualDatabaseDisplayWidget::onRelatedCardClicked);
colorFilterWidget = new VisualDatabaseDisplayColorFilterWidget(this, filterModel);
@ -225,7 +215,7 @@ void VisualDatabaseDisplayWidget::onHover(const ExactCard &hoveredCard)
emit cardHoveredDatabaseDisplay(hoveredCard);
}
void VisualDatabaseDisplayWidget::addCard(const ExactCard &cardToAdd)
void VisualDatabaseDisplayWidget::addCardToDisplay(const ExactCard &cardToAdd)
{
cards->append(cardToAdd);
auto *display = new CardInfoPictureWithTextOverlayWidget(flowWidget, false);
@ -237,16 +227,6 @@ void VisualDatabaseDisplayWidget::addCard(const ExactCard &cardToAdd)
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, display, &CardInfoPictureWidget::setScaleFactor);
}
void VisualDatabaseDisplayWidget::updateSearch(const QString &search) const
{
databaseDisplayModel->setStringFilter(search);
QModelIndexList sel = databaseView->selectionModel()->selectedRows();
if (sel.isEmpty() && databaseDisplayModel->rowCount()) {
databaseView->selectionModel()->setCurrentIndex(databaseDisplayModel->index(0, 0),
QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
}
}
bool VisualDatabaseDisplayWidget::isVisualDisplayMode() const
{
return !displayModeButton->isChecked();
@ -268,6 +248,30 @@ void VisualDatabaseDisplayWidget::onSearchModelChanged()
}
}
void VisualDatabaseDisplayWidget::onSelectedCardChanged(const QString &cardName)
{
emit cardHoveredDatabaseDisplay(CardDatabaseManager::query()->getPreferredCard(cardName));
}
void VisualDatabaseDisplayWidget::actAddCard(const QString &cardName, const QString &zoneName)
{
highlightAllSearchEdit();
ExactCard exactCard = CardDatabaseManager::query()->getPreferredCard(cardName);
emit cardAdded(exactCard, zoneName);
}
void VisualDatabaseDisplayWidget::actDecrementCard(const QString &cardName, const QString &zoneName)
{
ExactCard exactCard = CardDatabaseManager::query()->getPreferredCard(cardName);
emit cardDecremented(exactCard, zoneName);
}
void VisualDatabaseDisplayWidget::onRelatedCardClicked(const QString &relatedCard)
{
ExactCard exactCard = CardDatabaseManager::query()->guessCard({relatedCard});
emit cardInfoRequested(exactCard);
}
bool VisualDatabaseDisplayWidget::nearEndOfPage() const
{
if (!flowWidget->isVisible()) {
@ -334,12 +338,12 @@ void VisualDatabaseDisplayWidget::loadPage(int start, int end)
for (const CardFilter *setFilter : setFilters) {
if (setMap.contains(setFilter->term())) {
for (PrintingInfo printing : setMap[setFilter->term()]) {
addCard(ExactCard(info, printing));
addCardToDisplay(ExactCard(info, printing));
}
}
}
} else {
addCard(CardDatabaseManager::query()->getPreferredCard(info));
addCardToDisplay(CardDatabaseManager::query()->getPreferredCard(info));
}
} else {
qCDebug(VisualDatabaseDisplayLog) << "Card not found in database!";

View file

@ -34,9 +34,7 @@ class VisualDatabaseDisplayWidget : public QWidget
public:
explicit VisualDatabaseDisplayWidget(QWidget *parent,
AbstractTabDeckEditor *deckEditor,
CardDatabaseModel *database_model,
CardDatabaseDisplayModel *database_display_model,
DeckListModel *deckListModel = nullptr);
void retranslateUi();
@ -53,7 +51,7 @@ public:
return databaseDisplayModel;
}
QTreeView *getDatabaseView()
CardDatabaseView *getDatabaseView()
{
return databaseView;
}
@ -75,16 +73,26 @@ signals:
void cardClickedDatabaseDisplay(QMouseEvent *event, const ExactCard &card);
void cardHoveredDatabaseDisplay(const ExactCard &hoveredCard);
void cardAdded(const ExactCard &card, const QString &zoneName);
void cardDecremented(const ExactCard &card, const QString &zoneName);
void edhrecRequested(const CardInfoPtr &cardInfo, bool isCommander);
void printingSelectorRequested();
void cardInfoRequested(const ExactCard &cardName);
protected slots:
void initialize();
void onClick(QMouseEvent *event, const ExactCard &card);
void onHover(const ExactCard &hoveredCard);
void addCard(const ExactCard &cardToAdd);
void addCardToDisplay(const ExactCard &cardToAdd);
void databaseDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
void modelDirty() const;
void updateSearch(const QString &search) const;
void onDisplayModeChanged(bool checked);
void onSelectedCardChanged(const QString &cardName);
void actAddCard(const QString &cardName, const QString &zoneName);
void actDecrementCard(const QString &cardName, const QString &zoneName);
void onRelatedCardClicked(const QString &relatedCard);
private:
FlowWidget *searchContainer;
SearchLineEdit *searchEdit;
@ -96,11 +104,8 @@ private:
QToolButton *clearFilterWidget;
VisualDatabaseDisplayFilterToolbarWidget *filterContainer;
KeySignals searchKeySignals;
AbstractTabDeckEditor *deckEditor;
CardDatabaseModel *databaseModel;
CardDatabaseDisplayModel *databaseDisplayModel;
QTreeView *databaseView;
CardDatabaseView *databaseView;
QList<ExactCard> *cards;
QVBoxLayout *mainLayout;
QScrollArea *scrollArea;