diff --git a/mdlviewer/src/gearlistwidget.cpp b/mdlviewer/src/gearlistwidget.cpp index 4bd8506..51faf9f 100644 --- a/mdlviewer/src/gearlistwidget.cpp +++ b/mdlviewer/src/gearlistwidget.cpp @@ -1,5 +1,7 @@ #include "gearlistwidget.h" +#include +#include #include #include @@ -9,13 +11,26 @@ GearListWidget::GearListWidget(GameData* data, QWidget* parent) : data(data) { auto layout = new QVBoxLayout(); 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->setModel(model); + listWidget->setModel(searchModel); - connect(listWidget, &QTreeView::clicked, [this, model](const QModelIndex& item) { - if (auto gear = model->getGearFromIndex(item)) { + connect(listWidget, &QTreeView::clicked, [this, searchModel, originalModel](const QModelIndex& item) { + if (auto gear = originalModel->getGearFromIndex(searchModel->mapToSource(item))) { Q_EMIT gearSelected(*gear); } });