aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/projectexplorer/taskmodel.cpp10
-rw-r--r--src/plugins/projectexplorer/taskmodel.h1
-rw-r--r--src/plugins/projectexplorer/taskwindow.cpp19
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);