Add a name filter.

This commit is contained in:
Lukas Brübach 2025-02-25 22:26:02 +01:00
parent 6b154634e5
commit 000f0c4b49
3 changed files with 106 additions and 0 deletions

View file

@ -0,0 +1,69 @@
#include "visual_database_display_name_filter_widget.h"
#include <QHBoxLayout>
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));
}
}

View file

@ -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 <QLineEdit>
#include <QMap>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
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<QString, QPushButton *> activeFilters; // Store active name filter buttons
};
#endif // VISUAL_DATABASE_DISPLAY_NAME_FILTER_WIDGET_H

View file

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