diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.cpp index 96317258f..b2daa2032 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.cpp @@ -97,12 +97,18 @@ DeckPreviewTagDialog::DeckPreviewTagDialog(const QStringList &knownTags, const Q }; // Merge knownTags with defaultTags, ensuring no duplicates - QStringList combinedTags = knownTags + defaultTags + activeTags; + QStringList combinedTags = defaultTags + knownTags + activeTags; combinedTags.removeDuplicates(); // Main layout auto *mainLayout = new QVBoxLayout(this); + // Filter bar + filterInput_ = new QLineEdit(this); + mainLayout->addWidget(filterInput_); + + connect(filterInput_, &QLineEdit::textChanged, this, &DeckPreviewTagDialog::filterTags); + // Instruction label instructionLabel = new QLabel(this); instructionLabel->setWordWrap(true); @@ -151,6 +157,7 @@ void DeckPreviewTagDialog::retranslateUi() instructionLabel->setText(tr("Manage your deck tags. Check or uncheck tags as needed, or add new ones:")); newTagInput_->setPlaceholderText(tr("Add a new tag (e.g., Aggro️)")); addTagButton_->setText(tr("Add Tag")); + filterInput_->setPlaceholderText(tr("Filter tags...")); okButton->setText(tr("OK")); cancelButton->setText(tr("Cancel")); } @@ -191,6 +198,18 @@ void DeckPreviewTagDialog::addTag() newTagInput_->clear(); } +void DeckPreviewTagDialog::filterTags(const QString &text) +{ + for (int i = 0; i < tagListView_->count(); ++i) { + auto *item = tagListView_->item(i); + auto *tagWidget = qobject_cast(tagListView_->itemWidget(item)); + if (tagWidget) { + bool matches = tagWidget->checkBox()->text().contains(text, Qt::CaseInsensitive); + item->setHidden(!matches); + } + } +} + void DeckPreviewTagDialog::onCheckboxStateChanged() { activeTags_.clear(); diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.h index 3377be221..8b528d445 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.h @@ -18,6 +18,7 @@ public: const QStringList &activeTags, QWidget *parent = nullptr); QStringList getActiveTags() const; + void filterTags(const QString &text); private slots: void addTag(); @@ -27,6 +28,7 @@ private slots: private: QLabel *instructionLabel; QListWidget *tagListView_; + QLineEdit *filterInput_; QLineEdit *newTagInput_; QPushButton *addTagButton_; QPushButton *okButton;