diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp new file mode 100644 index 000000000..83bd38b42 --- /dev/null +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp @@ -0,0 +1,69 @@ +#include "visual_database_display_name_filter_widget.h" + +#include + +VisualDatabaseDisplayNameFilterWidget::VisualDatabaseDisplayNameFilterWidget(QWidget *parent, + FilterTreeModel *_filterModel) + : QWidget(parent), filterModel(_filterModel) +{ + setMinimumWidth(300); + setMaximumHeight(300); + + layout = new QVBoxLayout(this); + setLayout(layout); + + // Create the search box + searchBox = new QLineEdit(this); + searchBox->setPlaceholderText(tr("Filter by name...")); + layout->addWidget(searchBox); + + connect(searchBox, &QLineEdit::returnPressed, this, [this]() { + QString text = searchBox->text().trimmed(); + if (!text.isEmpty() && !activeFilters.contains(text)) { + createNameFilter(text); + searchBox->clear(); + } + }); + + // Create container for active filters + flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAsNeeded); + layout->addWidget(flowWidget); +} + +void VisualDatabaseDisplayNameFilterWidget::createNameFilter(const QString &name) +{ + if (activeFilters.contains(name)) + return; + + // Create a button for the filter + auto *button = new QPushButton(name, flowWidget); + button->setStyleSheet("QPushButton { background-color: lightgray; border: 1px solid gray; padding: 5px; }" + "QPushButton:hover { background-color: red; color: white; }"); + + connect(button, &QPushButton::clicked, this, [this, name]() { removeNameFilter(name); }); + + flowWidget->addWidget(button); + activeFilters[name] = button; + + updateFilterModel(); +} + +void VisualDatabaseDisplayNameFilterWidget::removeNameFilter(const QString &name) +{ + if (activeFilters.contains(name)) { + delete activeFilters[name]; // Remove button + activeFilters.remove(name); + updateFilterModel(); + } +} + +void VisualDatabaseDisplayNameFilterWidget::updateFilterModel() +{ + // Clear existing name filters + filterModel->clearFiltersOfType(CardFilter::Attr::AttrName); + + for (const auto &name : activeFilters.keys()) { + QString nameString = name; + filterModel->addFilter(new CardFilter(nameString, CardFilter::Type::TypeOr, CardFilter::Attr::AttrName)); + } +} diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.h b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.h new file mode 100644 index 000000000..6ef632b07 --- /dev/null +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.h @@ -0,0 +1,33 @@ +#ifndef VISUAL_DATABASE_DISPLAY_NAME_FILTER_WIDGET_H +#define VISUAL_DATABASE_DISPLAY_NAME_FILTER_WIDGET_H + +#include "../../../../game/filters/filter_tree_model.h" +#include "../general/layout_containers/flow_widget.h" + +#include +#include +#include +#include +#include + +class VisualDatabaseDisplayNameFilterWidget : public QWidget +{ + Q_OBJECT +public: + explicit VisualDatabaseDisplayNameFilterWidget(QWidget *parent, FilterTreeModel *filterModel); + + void createNameFilter(const QString &name); + void removeNameFilter(const QString &name); + void updateFilterList(); + void updateFilterModel(); + +private: + FilterTreeModel *filterModel; + QVBoxLayout *layout; + QLineEdit *searchBox; + FlowWidget *flowWidget; + + QMap activeFilters; // Store active name filter buttons +}; + +#endif // VISUAL_DATABASE_DISPLAY_NAME_FILTER_WIDGET_H diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp index e81aead78..877f25fb6 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp @@ -10,6 +10,7 @@ #include "../quick_settings/settings_button_widget.h" #include "visual_database_display_color_filter_widget.h" #include "visual_database_display_main_type_filter_widget.h" +#include "visual_database_display_name_filter_widget.h" #include "visual_database_display_set_filter_widget.h" #include "visual_database_display_sub_type_filter_widget.h" @@ -52,6 +53,9 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent, filterModel->setObjectName("filterModel"); databaseDisplayModel->setFilterTree(filterModel->filterTree()); + auto nameFilterWidget = new VisualDatabaseDisplayNameFilterWidget(this, filterModel); + quickFilterWidget->addSettingsWidget(nameFilterWidget); + auto mainTypeFilterWidget = new VisualDatabaseDisplayMainTypeFilterWidget(this, filterModel); quickFilterWidget->addSettingsWidget(mainTypeFilterWidget);