diff --git a/src/plugins/clangtools/clazychecks.ui b/src/plugins/clangtools/clazychecks.ui
index 5704a6c2429..0eca019f1f7 100644
--- a/src/plugins/clangtools/clazychecks.ui
+++ b/src/plugins/clangtools/clazychecks.ui
@@ -63,13 +63,23 @@
- Topic Filter
+ Filters
+ -
+
+
+
+ 0
+ 0
+
+
+
+
-
- Reset Filter
+ Reset Topic Filter
@@ -162,6 +172,11 @@ Set a valid executable first.
QLabel
+
+ Utils::FancyLineEdit
+ QLineEdit
+
+
diff --git a/src/plugins/clangtools/diagnosticconfigswidget.cpp b/src/plugins/clangtools/diagnosticconfigswidget.cpp
index 2f12dcdf393..1407e8b8767 100644
--- a/src/plugins/clangtools/diagnosticconfigswidget.cpp
+++ b/src/plugins/clangtools/diagnosticconfigswidget.cpp
@@ -734,6 +734,9 @@ public:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
{
+ if (!QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent))
+ return false;
+
const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
if (!index.isValid())
return false;
@@ -823,7 +826,16 @@ DiagnosticConfigsWidget::DiagnosticConfigsWidget(const ClangDiagnosticConfigs &c
m_clazyChecks->invalidExecutableLabel->setElideMode(Qt::ElideNone);
m_clazySortFilterProxyModel = new ClazyChecksSortFilterModel(this);
m_clazySortFilterProxyModel->setSourceModel(m_clazyTreeModel.get());
+ m_clazySortFilterProxyModel->setRecursiveFilteringEnabled(true);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ m_clazySortFilterProxyModel->setAutoAcceptChildRows(true);
+#endif
setupTreeView(m_clazyChecks->checksView, m_clazySortFilterProxyModel, 2);
+ m_clazyChecks->filterLineEdit->setFiltering(true);
+ m_clazyChecks->filterLineEdit->setPlaceholderText(tr("Textual Filter"));
+ connect(m_clazyChecks->filterLineEdit, &Utils::FancyLineEdit::filterChanged,
+ m_clazySortFilterProxyModel,
+ qOverload(&QSortFilterProxyModel::setFilterRegularExpression));
m_clazyChecks->checksView->setSortingEnabled(true);
m_clazyChecks->checksView->sortByColumn(0, Qt::AscendingOrder);
auto topicsModel = new QStringListModel(Utils::toList(m_clazyTreeModel->topics()), this);
@@ -865,11 +877,21 @@ DiagnosticConfigsWidget::DiagnosticConfigsWidget(const ClangDiagnosticConfigs &c
m_tidyChecks->setupUi(m_tidyChecksWidget);
m_tidyChecks->invalidExecutableLabel->setType(Utils::InfoLabel::Warning);
m_tidyChecks->invalidExecutableLabel->setElideMode(Qt::ElideNone);
- setupTreeView(m_tidyChecks->checksPrefixesTree, m_tidyTreeModel.get());
+ const auto tidyFilterModel = new QSortFilterProxyModel(this);
+ tidyFilterModel->setRecursiveFilteringEnabled(true);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ tidyFilterModel->setAutoAcceptChildRows(true);
+#endif
+ tidyFilterModel->setSourceModel(m_tidyTreeModel.get());
+ setupTreeView(m_tidyChecks->checksPrefixesTree, tidyFilterModel);
+ m_tidyChecks->filterLineEdit->setFiltering(true);
+ connect(m_tidyChecks->filterLineEdit, &Utils::FancyLineEdit::filterChanged, tidyFilterModel,
+ qOverload(&QSortFilterProxyModel::setFilterRegularExpression));
connect(m_tidyChecks->checksPrefixesTree,
&QTreeView::clicked,
- [this](const QModelIndex &index) {
+ [this, tidyFilterModel](const QModelIndex &proxyIndex) {
+ const QModelIndex index = tidyFilterModel->mapToSource(proxyIndex);
if (index.column() == 2) {
if (m_tidyTreeModel->hasChildren(index))
return;
diff --git a/src/plugins/clangtools/tidychecks.ui b/src/plugins/clangtools/tidychecks.ui
index 5acdc1682f3..907b9c5a400 100644
--- a/src/plugins/clangtools/tidychecks.ui
+++ b/src/plugins/clangtools/tidychecks.ui
@@ -49,6 +49,9 @@
+ -
+
+
-
@@ -164,6 +167,11 @@ Set a valid executable first.
QLabel
+
+ Utils::FancyLineEdit
+ QLineEdit
+
+