[VDD] Implement ExactMatch Name filter (#6409)

* [VDD] Implement ExactMatch Name filter

Took 7 minutes

Took 4 minutes

* Update cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp

Co-authored-by: RickyRister <42636155+RickyRister@users.noreply.github.com>

---------

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
Co-authored-by: RickyRister <42636155+RickyRister@users.noreply.github.com>
This commit is contained in:
BruebachL 2025-12-12 03:57:18 +01:00 committed by GitHub
parent 2b690f8c87
commit da70344547
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 15 additions and 4 deletions

View file

@ -51,7 +51,7 @@ VisualDatabaseDisplayNameFilterWidget::VisualDatabaseDisplayNameFilterWidget(QWi
void VisualDatabaseDisplayNameFilterWidget::retranslateUi() void VisualDatabaseDisplayNameFilterWidget::retranslateUi()
{ {
searchBox->setPlaceholderText(tr("Filter by name...")); searchBox->setPlaceholderText(tr("Filter by name... (Exact match)"));
loadFromDeckButton->setText(tr("Load from Deck")); loadFromDeckButton->setText(tr("Load from Deck"));
loadFromDeckButton->setToolTip(tr("Apply all card names in currently loaded deck as exact match name filters")); loadFromDeckButton->setToolTip(tr("Apply all card names in currently loaded deck as exact match name filters"));
loadFromClipboardButton->setText(tr("Load from Clipboard")); loadFromClipboardButton->setText(tr("Load from Clipboard"));
@ -123,14 +123,14 @@ void VisualDatabaseDisplayNameFilterWidget::updateFilterModel()
{ {
// Clear existing name filters // Clear existing name filters
emit filterModel->layoutAboutToBeChanged(); emit filterModel->layoutAboutToBeChanged();
filterModel->clearFiltersOfType(CardFilter::Attr::AttrName); filterModel->clearFiltersOfType(CardFilter::Attr::AttrNameExact);
filterModel->blockSignals(true); filterModel->blockSignals(true);
filterModel->filterTree()->blockSignals(true); filterModel->filterTree()->blockSignals(true);
for (const auto &name : activeFilters.keys()) { for (const auto &name : activeFilters.keys()) {
QString nameString = name; QString nameString = name;
filterModel->addFilter(new CardFilter(nameString, CardFilter::Type::TypeOr, CardFilter::Attr::AttrName)); filterModel->addFilter(new CardFilter(nameString, CardFilter::Type::TypeOr, CardFilter::Attr::AttrNameExact));
} }
filterModel->blockSignals(false); filterModel->blockSignals(false);
@ -146,7 +146,7 @@ void VisualDatabaseDisplayNameFilterWidget::updateFilterModel()
void VisualDatabaseDisplayNameFilterWidget::syncWithFilterModel() void VisualDatabaseDisplayNameFilterWidget::syncWithFilterModel()
{ {
QStringList currentFilters; QStringList currentFilters;
for (const auto &filter : filterModel->getFiltersOfType(CardFilter::Attr::AttrName)) { for (const auto &filter : filterModel->getFiltersOfType(CardFilter::Attr::AttrNameExact)) {
if (filter->type() == CardFilter::Type::TypeOr) { if (filter->type() == CardFilter::Type::TypeOr) {
currentFilters.append(filter->term()); currentFilters.append(filter->term());
} }

View file

@ -60,6 +60,8 @@ const QString CardFilter::attrName(Attr a)
switch (a) { switch (a) {
case AttrName: case AttrName:
return tr("Name"); return tr("Name");
case AttrNameExact:
return tr("Name (Exact)");
case AttrType: case AttrType:
return tr("Type"); return tr("Type");
case AttrColor: case AttrColor:

View file

@ -33,6 +33,7 @@ public:
AttrLoyalty, AttrLoyalty,
AttrManaCost, AttrManaCost,
AttrName, AttrName,
AttrNameExact,
AttrPow, AttrPow,
AttrRarity, AttrRarity,
AttrSet, AttrSet,

View file

@ -153,6 +153,11 @@ bool FilterItem::acceptName(const CardInfoPtr info) const
return info->getName().contains(term, Qt::CaseInsensitive); return info->getName().contains(term, Qt::CaseInsensitive);
} }
bool FilterItem::acceptNameExact(const CardInfoPtr info) const
{
return info->getName() == term;
}
bool FilterItem::acceptType(const CardInfoPtr info) const bool FilterItem::acceptType(const CardInfoPtr info) const
{ {
return info->getCardType().contains(term, Qt::CaseInsensitive); return info->getCardType().contains(term, Qt::CaseInsensitive);
@ -401,6 +406,8 @@ bool FilterItem::acceptCardAttr(const CardInfoPtr info, CardFilter::Attr attr) c
switch (attr) { switch (attr) {
case CardFilter::AttrName: case CardFilter::AttrName:
return acceptName(info); return acceptName(info);
case CardFilter::AttrNameExact:
return acceptNameExact(info);
case CardFilter::AttrType: case CardFilter::AttrType:
return acceptType(info); return acceptType(info);
case CardFilter::AttrColor: case CardFilter::AttrColor:

View file

@ -203,6 +203,7 @@ public:
} }
[[nodiscard]] bool acceptName(CardInfoPtr info) const; [[nodiscard]] bool acceptName(CardInfoPtr info) const;
[[nodiscard]] bool acceptNameExact(CardInfoPtr info) const;
[[nodiscard]] bool acceptType(CardInfoPtr info) const; [[nodiscard]] bool acceptType(CardInfoPtr info) const;
[[nodiscard]] bool acceptMainType(CardInfoPtr info) const; [[nodiscard]] bool acceptMainType(CardInfoPtr info) const;
[[nodiscard]] bool acceptSubType(CardInfoPtr info) const; [[nodiscard]] bool acceptSubType(CardInfoPtr info) const;