aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-07-04 17:10:19 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2019-07-05 11:36:38 +0000
commit163d5c5ce87b4ac7dcdb7dab001538a5240ab6ef (patch)
treec209f52ecc65d37e614d4c6d93584aa1d6e1be38
parent1df6443d4a6e58338dfaed7d787debfaeba86756 (diff)
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 <hjk@qt.io>
-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);