From 868613b5edd91b347795247e24c2e7156d24e081 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2011 16:52:14 +0200 Subject: [PATCH] analyzer: merge dockwidget and toolbar creation. Now that dock and control widgets are always created as late as possible and both are needed immediately afterward it makes sense to merge there construction. This also reduces the chance to create a partial tool gui in an inconsitent state. Change-Id: Ic7f405d65b2b8f0b4ee3ff0ef991d6e4746bac0a Reviewed-on: http://codereview.qt.nokia.com/1249 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/analyzerbase/analyzermanager.cpp | 6 +- src/plugins/analyzerbase/ianalyzertool.h | 9 +- src/plugins/qmlprofiler/qmlprofilertool.cpp | 37 ++++---- src/plugins/qmlprofiler/qmlprofilertool.h | 3 +- src/plugins/valgrind/callgrindtool.cpp | 123 +++++++++++++-------------- src/plugins/valgrind/callgrindtool.h | 2 +- src/plugins/valgrind/memchecktool.cpp | 23 ++--- src/plugins/valgrind/memchecktool.h | 4 +- 8 files changed, 91 insertions(+), 116 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index f17ab1c5ac..cdf4e5d167 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -637,12 +637,10 @@ void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) m_currentMode = mode; if (!m_defaultSettings.contains(tool)) { - // First time the tool is used. - tool->initializeDockWidgets(); + QWidget *widget = tool->createWidgets(); + QTC_ASSERT(widget, /**/); m_defaultSettings.insert(tool, m_mainWindow->saveSettings()); - QTC_ASSERT(!m_controlsWidgetFromTool.contains(tool), /**/); - QWidget *widget = tool->createControlWidget(); m_controlsWidgetFromTool[tool] = widget; m_controlsStackWidget->addWidget(widget); } diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index 5ddcde892a..8b7e489ad8 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -109,15 +109,10 @@ public: /// This gets called after all analyzation tools where initialized. virtual void extensionsInitialized() = 0; - /** - * This is called to add all dock widgets if tool becomes active first time. - * \sa AnalzyerManager::createDockWidget - */ - virtual void initializeDockWidgets() {} - + /// Creates all widgets used by the tool. /// Returns a control widget which will be shown in the status bar when /// this tool is selected. Must be non-zero. - virtual QWidget *createControlWidget() = 0; + virtual QWidget *createWidgets() = 0; /// Returns a new engine for the given start parameters. /// Called each time the tool is launched. diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 688d6e673d..fd004b7ae0 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -225,15 +225,23 @@ IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp return engine; } -void QmlProfilerTool::initializeDockWidgets() +void QmlProfilerTool::toolSelected() { - ensureWidgets(); + updateAttachAction(true); } -void QmlProfilerTool::ensureWidgets() +void QmlProfilerTool::toolDeselected() { - if (d->m_traceWindow) - return; + updateAttachAction(false); +} + +QWidget *QmlProfilerTool::createWidgets() +{ + QTC_ASSERT(!d->m_traceWindow, return 0); + + // + // DockWidgets + // Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); @@ -291,23 +299,10 @@ void QmlProfilerTool::ensureWidgets() mw->tabifyDockWidget(eventsDock, timelineDock); mw->tabifyDockWidget(timelineDock, calleeDock); mw->tabifyDockWidget(calleeDock, callerDock); -} - -void QmlProfilerTool::toolSelected() -{ - updateAttachAction(true); -} - -void QmlProfilerTool::toolDeselected() -{ - updateAttachAction(false); -} - -QWidget *QmlProfilerTool::createControlWidget() -{ - ensureWidgets(); - // custom toolbar (TODO) + // + // Toolbar + // QWidget *toolbarWidget = new QWidget; toolbarWidget->setObjectName(QLatin1String("QmlProfilerToolBarWidget")); diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index 4b5912d3ab..c4520d5a65 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -53,14 +53,13 @@ public: ToolMode toolMode() const; void extensionsInitialized() {} - void initializeDockWidgets(); void toolSelected(); void toolDeselected(); Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); - QWidget *createControlWidget(); + QWidget *createWidgets(); void startTool(Analyzer::StartMode mode); public slots: diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index eef04d82a9..d89632d6c7 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -115,8 +115,7 @@ public: void setParseData(ParseData *data); CostDelegate::CostFormat costFormat() const; - QWidget *createControlWidget(); - void initializeDockWidgets(); + QWidget *createWidgets(); void doClear(bool clearParseData); void updateEventCombo(); @@ -566,13 +565,67 @@ void CallgrindTool::extensionsInitialized() } } -void CallgrindTool::initializeDockWidgets() +IAnalyzerEngine *CallgrindTool::createEngine(const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration) +{ + return d->createEngine(sp, runConfiguration); +} + +IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration) +{ + CallgrindEngine *engine = new CallgrindEngine(q, sp, runConfiguration); + + connect(engine, SIGNAL(parserDataReady(CallgrindEngine *)), + SLOT(takeParserData(CallgrindEngine *))); + connect(engine, SIGNAL(starting(const Analyzer::IAnalyzerEngine*)), + SLOT(engineStarting(const Analyzer::IAnalyzerEngine*))); + connect(engine, SIGNAL(finished()), + SLOT(engineFinished())); + + connect(this, SIGNAL(dumpRequested()), engine, SLOT(dump())); + connect(this, SIGNAL(resetRequested()), engine, SLOT(reset())); + connect(this, SIGNAL(pauseToggled(bool)), engine, SLOT(setPaused(bool))); + + // initialize engine + engine->setPaused(m_pauseAction->isChecked()); + + // we may want to toggle collect for one function only in this run + engine->setToggleCollectFunction(m_toggleCollectFunction); + m_toggleCollectFunction.clear(); + + AnalyzerManager::showStatusMessage(AnalyzerManager::msgToolStarted(q->displayName())); + + // apply project settings + AnalyzerProjectSettings *analyzerSettings = runConfiguration->extraAspect(); + CallgrindProjectSettings *settings = analyzerSettings->subConfig(); + QTC_ASSERT(settings, return engine) + + QTC_ASSERT(m_visualisation, return engine); + m_visualisation->setMinimumInclusiveCostRatio(settings->visualisationMinimumInclusiveCostRatio() / 100.0); + m_proxyModel->setMinimumInclusiveCostRatio(settings->minimumInclusiveCostRatio() / 100.0); + m_dataModel->setVerboseToolTipsEnabled(settings->enableEventToolTips()); + + return engine; +} + +void CallgrindTool::startTool(StartMode mode) { - d->initializeDockWidgets(); + ValgrindPlugin::startValgrindTool(this, mode); } -void CallgrindToolPrivate::initializeDockWidgets() +QWidget *CallgrindTool::createWidgets() { + return d->createWidgets(); +} + +QWidget *CallgrindToolPrivate::createWidgets() +{ + QTC_ASSERT(!m_visualisation, return 0); + + // + // DockWidgets + // Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); m_visualisation = new Visualisation(mw); m_visualisation->setFrameStyle(QFrame::NoFrame); @@ -636,64 +689,10 @@ void CallgrindToolPrivate::initializeDockWidgets() mw->splitDockWidget(mw->toolBarDockWidget(), flatDock, Qt::Vertical); mw->splitDockWidget(mw->toolBarDockWidget(), calleesDock, Qt::Vertical); mw->splitDockWidget(calleesDock, callersDock, Qt::Horizontal); -} - -IAnalyzerEngine *CallgrindTool::createEngine(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration) -{ - return d->createEngine(sp, runConfiguration); -} - -IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration) -{ - CallgrindEngine *engine = new CallgrindEngine(q, sp, runConfiguration); - - connect(engine, SIGNAL(parserDataReady(CallgrindEngine *)), - SLOT(takeParserData(CallgrindEngine *))); - connect(engine, SIGNAL(starting(const Analyzer::IAnalyzerEngine*)), - SLOT(engineStarting(const Analyzer::IAnalyzerEngine*))); - connect(engine, SIGNAL(finished()), - SLOT(engineFinished())); - - connect(this, SIGNAL(dumpRequested()), engine, SLOT(dump())); - connect(this, SIGNAL(resetRequested()), engine, SLOT(reset())); - connect(this, SIGNAL(pauseToggled(bool)), engine, SLOT(setPaused(bool))); - - // initialize engine - engine->setPaused(m_pauseAction->isChecked()); - - // we may want to toggle collect for one function only in this run - engine->setToggleCollectFunction(m_toggleCollectFunction); - m_toggleCollectFunction.clear(); - - AnalyzerManager::showStatusMessage(AnalyzerManager::msgToolStarted(q->displayName())); - - // apply project settings - AnalyzerProjectSettings *analyzerSettings = runConfiguration->extraAspect(); - CallgrindProjectSettings *settings = analyzerSettings->subConfig(); - QTC_ASSERT(settings, return engine) - - QTC_ASSERT(m_visualisation, return engine); - m_visualisation->setMinimumInclusiveCostRatio(settings->visualisationMinimumInclusiveCostRatio() / 100.0); - m_proxyModel->setMinimumInclusiveCostRatio(settings->minimumInclusiveCostRatio() / 100.0); - m_dataModel->setVerboseToolTipsEnabled(settings->enableEventToolTips()); - - return engine; -} -void CallgrindTool::startTool(StartMode mode) -{ - ValgrindPlugin::startValgrindTool(this, mode); -} - -QWidget *CallgrindTool::createControlWidget() -{ - return d->createControlWidget(); -} - -QWidget *CallgrindToolPrivate::createControlWidget() -{ + // + // Control Widget + // QAction *action = 0; QWidget *widget = new QWidget; QHBoxLayout *layout = new QHBoxLayout; diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index 64b034d640..f51cecd732 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -58,7 +58,7 @@ public: Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); - QWidget *createControlWidget(); + QWidget *createWidgets(); void startTool(Analyzer::StartMode mode); diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 52ad2a8aa0..9c2e89a817 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -232,8 +232,6 @@ void MemcheckTool::settingsDestroyed(QObject *settings) void MemcheckTool::maybeActiveRunConfigurationChanged() { - ensureWidgets(); - AnalyzerSettings *settings = 0; ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance(); if (ProjectExplorer::Project *project = pe->startupProject()) { @@ -355,15 +353,10 @@ private: QStringList m_projectFiles; }; -void MemcheckTool::initializeDockWidgets() -{ - ensureWidgets(); -} -void MemcheckTool::ensureWidgets() +QWidget *MemcheckTool::createWidgets() { - if (m_errorView) - return; + QTC_ASSERT(!m_errorView, return 0); Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); @@ -391,12 +384,10 @@ void MemcheckTool::ensureWidgets() connect(ProjectExplorer::ProjectExplorerPlugin::instance(), SIGNAL(updateRunActions()), SLOT(maybeActiveRunConfigurationChanged())); -} - -QWidget *MemcheckTool::createControlWidget() -{ - ensureWidgets(); + // + // The Control Widget. + // QAction *action = 0; QHBoxLayout *layout = new QHBoxLayout; QToolButton *button = 0; @@ -519,7 +510,7 @@ void MemcheckTool::internalParserError(const QString &errorString) void MemcheckTool::clearErrorView() { - ensureWidgets(); + QTC_ASSERT(m_errorView, return); m_errorModel->clear(); qDeleteAll(m_suppressionActions); @@ -529,7 +520,7 @@ void MemcheckTool::clearErrorView() void MemcheckTool::updateErrorFilter() { - ensureWidgets(); + QTC_ASSERT(m_errorView, return); QTC_ASSERT(m_settings, return); AbstractMemcheckSettings *memcheckSettings = m_settings->subConfig(); diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index 6f00fa70f9..60fa684292 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -111,10 +111,8 @@ private slots: private: ToolMode toolMode() const; - void ensureWidgets(); - void initializeDockWidgets(); void extensionsInitialized() {} - QWidget *createControlWidget(); + QWidget *createWidgets(); Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); -- 2.11.0