shortcut search now displays all rows in section (#5307)

This commit is contained in:
RickyRister 2024-12-23 17:29:52 -08:00 committed by GitHub
parent 205e1c7a59
commit ec17a477be
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 32 additions and 4 deletions

View file

@ -4,7 +4,22 @@
#include "shortcuts_settings.h"
#include <QHeaderView>
#include <QSortFilterProxyModel>
ShortcutFilterProxyModel::ShortcutFilterProxyModel(QObject *parent) : QSortFilterProxyModel(parent)
{
}
/**
* @return True if this row or its parent matches the search string
*/
bool ShortcutFilterProxyModel::filterAcceptsRow(const int sourceRow, const QModelIndex &sourceParent) const
{
QModelIndex nameIndex = sourceModel()->index(sourceRow, filterKeyColumn(), sourceParent);
QModelIndex parentIndex = sourceModel()->index(sourceParent.row(), filterKeyColumn(), sourceParent.parent());
return sourceModel()->data(nameIndex).toString().contains(filterRegularExpression()) ||
sourceModel()->data(parentIndex).toString().contains(filterRegularExpression());
}
ShortcutTreeView::ShortcutTreeView(QWidget *parent) : QTreeView(parent)
{
@ -14,7 +29,7 @@ ShortcutTreeView::ShortcutTreeView(QWidget *parent) : QTreeView(parent)
populateShortcutsModel();
// filter proxy
proxyModel = new QSortFilterProxyModel(this);
proxyModel = new ShortcutFilterProxyModel(this);
proxyModel->setRecursiveFilteringEnabled(true);
proxyModel->setSourceModel(shortcutsModel);
proxyModel->setDynamicSortFilter(true);

View file

@ -2,10 +2,23 @@
#define SHORTCUT_TREEVIEW_H
#include <QModelIndex>
#include <QSortFilterProxyModel>
#include <QStandardItemModel>
#include <QTreeView>
class QSortFilterProxyModel;
/**
* Custom implementation of QSortFilterProxyModel that also searches in the parent's string when filtering
*/
class ShortcutFilterProxyModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
explicit ShortcutFilterProxyModel(QObject *parent = nullptr);
protected:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
};
class ShortcutTreeView : public QTreeView
{
Q_OBJECT
@ -21,7 +34,7 @@ public slots:
private:
QStandardItemModel *shortcutsModel;
QSortFilterProxyModel *proxyModel;
ShortcutFilterProxyModel *proxyModel;
void populateShortcutsModel();
private slots: