From 163d5c5ce87b4ac7dcdb7dab001538a5240ab6ef Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 4 Jul 2019 17:10:19 +0200 Subject: 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 8fcc48e737..c6d27bd7d4 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 b1044a3234..f605378569 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 7a98d0fd33..d864c8f585 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); -- cgit v1.2.3