diff options
author | Christian Kandeler <christian.kandeler@theqtcompany.com> | 2015-03-02 15:35:10 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@theqtcompany.com> | 2015-03-09 14:04:59 +0200 |
commit | 26abab90ca8cf599421636b2292e801cba9759a1 (patch) | |
tree | da6baa5859e2d6c9dc94977faf9b3f0c6fcda42f | |
parent | 5b1a7f37560d24821e9bea705aaba26f71b604ab (diff) | |
download | qt-creator-26abab90ca8cf599421636b2292e801cba9759a1.tar.gz |
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 <nikolai.kosjar@theqtcompany.com>
-rw-r--r-- | plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp | 53 | ||||
-rw-r--r-- | plugins/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<QAbstractItemModel *>() << 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<Diagnostic> 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; |