From 67788a90bb115d3cd7cc5245e64028df7b4a9d1d Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 9 Feb 2021 17:32:37 +0100 Subject: [PATCH] ClangTools: Enable filtering in config widget This makes it easy to search for certain checks. Fixes: QTCREATORBUG-24851 Change-Id: I94521aade4b54e80113aa31db9bed91ecb230016 Reviewed-by: David Schulz Reviewed-by: Leena Miettinen --- src/plugins/clangtools/clazychecks.ui | 19 ++++++++++++-- .../clangtools/diagnosticconfigswidget.cpp | 26 +++++++++++++++++-- src/plugins/clangtools/tidychecks.ui | 8 ++++++ 3 files changed, 49 insertions(+), 4 deletions(-) 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/infolabel.h
+ + Utils::FancyLineEdit + QLineEdit +
utils/fancylineedit.h
+
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/infolabel.h
+ + Utils::FancyLineEdit + QLineEdit +
utils/fancylineedit.h
+