From 6f8cbb6fd296f62fcbe369eeb742457417ed49d0 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 4 Jul 2019 17:10:19 +0200 Subject: [PATCH] Issues pane: Show the right number of issues on the pane button While we do want to show contextual messages from the compiler, the number displayed on the button should correspond to the actual number of issues (i.e. errors or warnings), and should not include the notes around them. We used to do this correctly, but broke it in acd0d02e282f. Fixes: QTCREATORBUG-18490 Change-Id: Ib6b36f24b4f6bfe53ed5b977f0f88586c4d95b16 Reviewed-by: hjk --- src/plugins/projectexplorer/taskmodel.cpp | 10 ++++++++++ src/plugins/projectexplorer/taskmodel.h | 1 + src/plugins/projectexplorer/taskwindow.cpp | 19 ++++++++++++++----- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/plugins/projectexplorer/taskmodel.cpp b/src/plugins/projectexplorer/taskmodel.cpp index 8fcc48e7378..c6d27bd7d49 100644 --- a/src/plugins/projectexplorer/taskmodel.cpp +++ b/src/plugins/projectexplorer/taskmodel.cpp @@ -341,6 +341,16 @@ void TaskFilterModel::setFilterIncludesWarnings(bool b) invalidateFilter(); } +int TaskFilterModel::issuesCount(int startRow, int endRow) const +{ + int count = 0; + for (int r = startRow; r <= endRow; ++r) { + if (task(index(r, 0)).type != Task::Unknown) + ++count; + } + return count; +} + void TaskFilterModel::updateFilterProperties(const QString &filterText, Qt::CaseSensitivity caseSensitivity, bool isRegexp) { diff --git a/src/plugins/projectexplorer/taskmodel.h b/src/plugins/projectexplorer/taskmodel.h index b1044a32347..f6053785691 100644 --- a/src/plugins/projectexplorer/taskmodel.h +++ b/src/plugins/projectexplorer/taskmodel.h @@ -140,6 +140,7 @@ public: void setFilteredCategories(const QList &categoryIds) { m_categoryIds = categoryIds; invalidateFilter(); } Task task(const QModelIndex &index) const { return taskModel()->task(mapToSource(index)); } + int issuesCount(int startRow, int endRow) const; bool hasFile(const QModelIndex &index) const { return taskModel()->hasFile(mapToSource(index)); } diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp index 7a98d0fd33e..d864c8f5854 100644 --- a/src/plugins/projectexplorer/taskwindow.cpp +++ b/src/plugins/projectexplorer/taskwindow.cpp @@ -227,6 +227,7 @@ public: QToolButton *m_categoriesButton; QMenu *m_categoriesMenu; QList m_actions; + int m_visibleIssuesCount = 0; }; static QToolButton *createFilterButton(const QIcon &icon, const QString &toolTip, @@ -304,12 +305,20 @@ TaskWindow::TaskWindow() : d(std::make_unique()) connect(hub, &TaskHub::showTask, this, &TaskWindow::showTask); connect(hub, &TaskHub::openTask, this, &TaskWindow::openTask); - connect(d->m_filter, &TaskFilterModel::rowsRemoved, - [this]() { emit setBadgeNumber(d->m_filter->rowCount()); }); + connect(d->m_filter, &TaskFilterModel::rowsAboutToBeRemoved, + [this](const QModelIndex &, int first, int last) { + d->m_visibleIssuesCount -= d->m_filter->issuesCount(first, last); + emit setBadgeNumber(d->m_visibleIssuesCount); + }); connect(d->m_filter, &TaskFilterModel::rowsInserted, - [this]() { emit setBadgeNumber(d->m_filter->rowCount()); }); - connect(d->m_filter, &TaskFilterModel::modelReset, - [this]() { emit setBadgeNumber(d->m_filter->rowCount()); }); + [this](const QModelIndex &, int first, int last) { + d->m_visibleIssuesCount += d->m_filter->issuesCount(first, last); + emit setBadgeNumber(d->m_visibleIssuesCount); + }); + connect(d->m_filter, &TaskFilterModel::modelReset, [this] { + d->m_visibleIssuesCount = d->m_filter->issuesCount(0, d->m_filter->rowCount()); + emit setBadgeNumber(d->m_visibleIssuesCount); + }); SessionManager *session = SessionManager::instance(); connect(session, &SessionManager::aboutToSaveSession, this, &TaskWindow::saveSettings);