diff options
-rw-r--r-- | src/plugins/projectexplorer/taskmodel.cpp | 10 | ||||
-rw-r--r-- | src/plugins/projectexplorer/taskmodel.h | 1 | ||||
-rw-r--r-- | 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<Core::Id> &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<QAction *> 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<TaskWindowPrivate>()) 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); |