mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-15 06:52:15 -07:00
Add a name filter.
This commit is contained in:
parent
6b154634e5
commit
000f0c4b49
3 changed files with 106 additions and 0 deletions
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue