diff --git a/cockatrice/src/settings/shortcut_treeview.cpp b/cockatrice/src/settings/shortcut_treeview.cpp index 78bb60f32..58bb6dce8 100644 --- a/cockatrice/src/settings/shortcut_treeview.cpp +++ b/cockatrice/src/settings/shortcut_treeview.cpp @@ -4,7 +4,22 @@ #include "shortcuts_settings.h" #include -#include + +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); diff --git a/cockatrice/src/settings/shortcut_treeview.h b/cockatrice/src/settings/shortcut_treeview.h index a38c5adbf..19c9327e7 100644 --- a/cockatrice/src/settings/shortcut_treeview.h +++ b/cockatrice/src/settings/shortcut_treeview.h @@ -2,10 +2,23 @@ #define SHORTCUT_TREEVIEW_H #include +#include #include #include -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: