1
Fork 0
mirror of https://github.com/redstrate/Novus.git synced 2025-06-08 14:17:45 +00:00

Add search box to gear list widget

This commit is contained in:
Joshua Goins 2023-07-08 09:25:30 -04:00
parent 10996a7f5a
commit 99ea8585d0

View file

@ -1,5 +1,7 @@
#include "gearlistwidget.h" #include "gearlistwidget.h"
#include <QLineEdit>
#include <QSortFilterProxyModel>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <magic_enum.hpp> #include <magic_enum.hpp>
@ -9,13 +11,26 @@ GearListWidget::GearListWidget(GameData* data, QWidget* parent) : data(data) {
auto layout = new QVBoxLayout(); auto layout = new QVBoxLayout();
setLayout(layout); setLayout(layout);
auto model = new GearListModel(data); auto searchModel = new QSortFilterProxyModel();
searchModel->setRecursiveFilteringEnabled(true);
searchModel->setFilterCaseSensitivity(Qt::CaseSensitivity::CaseInsensitive);
auto searchEdit = new QLineEdit();
searchEdit->setPlaceholderText("Search...");
searchEdit->setClearButtonEnabled(true);
connect(searchEdit, &QLineEdit::textChanged, this, [=](const QString& text) {
searchModel->setFilterRegularExpression(text);
});
layout->addWidget(searchEdit);
auto originalModel = new GearListModel(data);
searchModel->setSourceModel(originalModel);
listWidget = new QTreeView(); listWidget = new QTreeView();
listWidget->setModel(model); listWidget->setModel(searchModel);
connect(listWidget, &QTreeView::clicked, [this, model](const QModelIndex& item) { connect(listWidget, &QTreeView::clicked, [this, searchModel, originalModel](const QModelIndex& item) {
if (auto gear = model->getGearFromIndex(item)) { if (auto gear = originalModel->getGearFromIndex(searchModel->mapToSource(item))) {
Q_EMIT gearSelected(*gear); Q_EMIT gearSelected(*gear);
} }
}); });