From 26abab90ca8cf599421636b2292e801cba9759a1 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 2 Mar 2015 15:35:10 +0100 Subject: Show the status message also while running. So users can see how many issues were found before the analyzer has finished, as well as browse them. Change-Id: I82452441168ecb370e7b2aac137961ebb5b8bfc3 Reviewed-by: Nikolai Kosjar --- .../clangstaticanalyzertool.cpp | 53 +++++++++++++++------- .../clangstaticanalyzer/clangstaticanalyzertool.h | 1 + 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp b/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp index 645186cc71..37447c5f66 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp +++ b/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp @@ -82,6 +82,17 @@ QWidget *ClangStaticAnalyzerTool::createWidgets() m_diagnosticView->setAutoScroll(false); m_diagnosticView->setObjectName(QLatin1String("ClangStaticAnalyzerIssuesView")); m_diagnosticView->setWindowTitle(tr("Clang Static Analyzer Issues")); + foreach (auto * const model, + QList() << m_diagnosticModel << m_diagnosticFilterModel) { + connect(model, &QAbstractItemModel::rowsInserted, + this, &ClangStaticAnalyzerTool::handleStateUpdate); + connect(model, &QAbstractItemModel::rowsRemoved, + this, &ClangStaticAnalyzerTool::handleStateUpdate); + connect(model, &QAbstractItemModel::modelReset, + this, &ClangStaticAnalyzerTool::handleStateUpdate); + connect(model, &QAbstractItemModel::layoutChanged, // For QSortFilterProxyModel::invalidate() + this, &ClangStaticAnalyzerTool::handleStateUpdate); + } QDockWidget *issuesDock = AnalyzerManager::createDockWidget(ClangStaticAnalyzerToolId, m_diagnosticView); @@ -198,7 +209,6 @@ void ClangStaticAnalyzerTool::startTool() if (dontStartAfterHintForDebugMode()) return; - AnalyzerManager::showPermanentStatusMessage(QString()); m_diagnosticModel->clear(); setBusyCursor(true); Project *project = SessionManager::startupProject(); @@ -207,6 +217,7 @@ void ClangStaticAnalyzerTool::startTool() m_projectInfoBeforeBuild = CppTools::CppModelManager::instance()->projectInfo(project); QTC_ASSERT(m_projectInfoBeforeBuild.isValid(), return); m_running = true; + handleStateUpdate(); ProjectExplorerPlugin::runProject(project, ProjectExplorer::ClangStaticAnalyzerMode); } @@ -239,23 +250,9 @@ void ClangStaticAnalyzerTool::onNewDiagnosticsAvailable(const QList void ClangStaticAnalyzerTool::onEngineFinished() { - QTC_ASSERT(m_goBack, return); - QTC_ASSERT(m_goNext, return); - QTC_ASSERT(m_diagnosticModel, return); - QTC_ASSERT(m_diagnosticFilterModel, return); - resetCursorAndProjectInfoBeforeBuild(); - - const int issuesFound = m_diagnosticModel->rowCount(); - const int issuesVisible = m_diagnosticFilterModel->rowCount(); - m_goBack->setEnabled(issuesVisible > 1); - m_goNext->setEnabled(issuesVisible > 1); - - AnalyzerManager::showPermanentStatusMessage(issuesFound > 0 - ? AnalyzerManager::tr("Clang Static Analyzer finished, %n issues were found (%1 suppressed).", - 0, issuesFound).arg(issuesFound - issuesVisible) - : AnalyzerManager::tr("Clang Static Analyzer finished, no issues were found.")); m_running = false; + handleStateUpdate(); emit finished(); } @@ -266,5 +263,29 @@ void ClangStaticAnalyzerTool::setBusyCursor(bool busy) m_diagnosticView->setCursor(cursor); } +void ClangStaticAnalyzerTool::handleStateUpdate() +{ + QTC_ASSERT(m_goBack, return); + QTC_ASSERT(m_goNext, return); + QTC_ASSERT(m_diagnosticModel, return); + QTC_ASSERT(m_diagnosticFilterModel, return); + + const int issuesFound = m_diagnosticModel->rowCount(); + const int issuesVisible = m_diagnosticFilterModel->rowCount(); + m_goBack->setEnabled(issuesVisible > 1); + m_goNext->setEnabled(issuesVisible > 1); + + QString message = m_running ? tr("Clang Static Analyzer running.") + : tr("Clang Static Analyzer finished."); + message += QLatin1Char(' '); + if (issuesFound == 0) { + message += tr("No issues found."); + } else { + message += tr("%n issues found (%1 suppressed).", 0, issuesFound) + .arg(issuesFound - issuesVisible); + } + AnalyzerManager::showPermanentStatusMessage(message); +} + } // namespace Internal } // namespace ClangStaticAnalyzer diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzertool.h b/plugins/clangstaticanalyzer/clangstaticanalyzertool.h index 89c8851acc..2f9b18efa7 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzertool.h +++ b/plugins/clangstaticanalyzer/clangstaticanalyzertool.h @@ -61,6 +61,7 @@ private: void onEngineFinished(); void setBusyCursor(bool busy); + void handleStateUpdate(); private: CppTools::ProjectInfo m_projectInfoBeforeBuild; -- cgit v1.2.3