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 <david.schulz@qt.io>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
This commit is contained in:
Christian Kandeler
2021-02-09 17:32:37 +01:00
parent 63668f8119
commit 67788a90bb
3 changed files with 49 additions and 4 deletions

View File

@@ -63,13 +63,23 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="title"> <property name="title">
<string>Topic Filter</string> <string>Filters</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_3"> <layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="Utils::FancyLineEdit" name="filterLineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="topicsResetButton"> <widget class="QPushButton" name="topicsResetButton">
<property name="text"> <property name="text">
<string>Reset Filter</string> <string>Reset Topic Filter</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -162,6 +172,11 @@ Set a valid executable first.</string>
<extends>QLabel</extends> <extends>QLabel</extends>
<header location="global">utils/infolabel.h</header> <header location="global">utils/infolabel.h</header>
</customwidget> </customwidget>
<customwidget>
<class>Utils::FancyLineEdit</class>
<extends>QLineEdit</extends>
<header location="global">utils/fancylineedit.h</header>
</customwidget>
</customwidgets> </customwidgets>
<resources/> <resources/>
<connections/> <connections/>

View File

@@ -734,6 +734,9 @@ public:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
{ {
if (!QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent))
return false;
const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
if (!index.isValid()) if (!index.isValid())
return false; return false;
@@ -823,7 +826,16 @@ DiagnosticConfigsWidget::DiagnosticConfigsWidget(const ClangDiagnosticConfigs &c
m_clazyChecks->invalidExecutableLabel->setElideMode(Qt::ElideNone); m_clazyChecks->invalidExecutableLabel->setElideMode(Qt::ElideNone);
m_clazySortFilterProxyModel = new ClazyChecksSortFilterModel(this); m_clazySortFilterProxyModel = new ClazyChecksSortFilterModel(this);
m_clazySortFilterProxyModel->setSourceModel(m_clazyTreeModel.get()); 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); 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<const QString &>(&QSortFilterProxyModel::setFilterRegularExpression));
m_clazyChecks->checksView->setSortingEnabled(true); m_clazyChecks->checksView->setSortingEnabled(true);
m_clazyChecks->checksView->sortByColumn(0, Qt::AscendingOrder); m_clazyChecks->checksView->sortByColumn(0, Qt::AscendingOrder);
auto topicsModel = new QStringListModel(Utils::toList(m_clazyTreeModel->topics()), this); 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->setupUi(m_tidyChecksWidget);
m_tidyChecks->invalidExecutableLabel->setType(Utils::InfoLabel::Warning); m_tidyChecks->invalidExecutableLabel->setType(Utils::InfoLabel::Warning);
m_tidyChecks->invalidExecutableLabel->setElideMode(Qt::ElideNone); 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<const QString &>(&QSortFilterProxyModel::setFilterRegularExpression));
connect(m_tidyChecks->checksPrefixesTree, connect(m_tidyChecks->checksPrefixesTree,
&QTreeView::clicked, &QTreeView::clicked,
[this](const QModelIndex &index) { [this, tidyFilterModel](const QModelIndex &proxyIndex) {
const QModelIndex index = tidyFilterModel->mapToSource(proxyIndex);
if (index.column() == 2) { if (index.column() == 2) {
if (m_tidyTreeModel->hasChildren(index)) if (m_tidyTreeModel->hasChildren(index))
return; return;

View File

@@ -49,6 +49,9 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="Utils::FancyLineEdit" name="filterLineEdit"/>
</item>
<item> <item>
<spacer name="horizontalSpacer"> <spacer name="horizontalSpacer">
<property name="orientation"> <property name="orientation">
@@ -164,6 +167,11 @@ Set a valid executable first.</string>
<extends>QLabel</extends> <extends>QLabel</extends>
<header location="global">utils/infolabel.h</header> <header location="global">utils/infolabel.h</header>
</customwidget> </customwidget>
<customwidget>
<class>Utils::FancyLineEdit</class>
<extends>QLineEdit</extends>
<header location="global">utils/fancylineedit.h</header>
</customwidget>
</customwidgets> </customwidgets>
<resources/> <resources/>
<connections/> <connections/>