From ecab2f191f5368d44387d47a49abe30b5124b4fd Mon Sep 17 00:00:00 2001 From: Kevin Funk Date: Fri, 4 Mar 2011 16:00:03 +0100 Subject: [PATCH] Do not show Analyzer mode if no tools were added Merge-request: 265 Reviewed-by: hjk --- src/plugins/analyzerbase/analyzermanager.cpp | 48 ++++++++++++++++++++++------ src/plugins/analyzerbase/analyzermanager.h | 1 + 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 99d391a6b5..165849576a 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -119,6 +119,14 @@ public: AnalyzerManagerPrivate(AnalyzerManager *qq); ~AnalyzerManagerPrivate(); + /** + * After calling this, a proper instance of Core::IMore is initialized + * It is delayed since an analyzer mode makes no sense without analyzer tools + * + * \note Call this before adding a tool to the manager + */ + void delayedInit(); + void setupActions(); QWidget *createContents(); QWidget *createMainWindow(); @@ -150,6 +158,8 @@ public: // list of dock widgets to prevent memory leak typedef QWeakPointer DockPtr; QList m_dockWidgets; + + bool m_initialized; }; AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): @@ -166,7 +176,8 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager m_toolBoxSeparator(0), m_viewsMenu(0), m_resizeEventFilter(new DockWidgetEventFilter(qq)), - m_toolbarStackedWidget(0) + m_toolbarStackedWidget(0), + m_initialized(false) { m_runControlFactory = new AnalyzerRunControlFactory(); AnalyzerPlugin::instance()->addAutoReleasedObject(m_runControlFactory); @@ -174,10 +185,6 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager q, SLOT(runControlCreated(AnalyzerRunControl *))); setupActions(); - - m_mode = new AnalyzerMode(q); - m_mode->setWidget(createContents()); - AnalyzerPlugin::instance()->addAutoReleasedObject(m_mode); } AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate() @@ -228,6 +235,17 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions() m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); } +void AnalyzerManager::AnalyzerManagerPrivate::delayedInit() +{ + if (m_initialized) + return; + + m_mode = new AnalyzerMode(q); + m_mode->setWidget(createContents()); + AnalyzerPlugin::instance()->addAutoReleasedObject(m_mode); + m_initialized = true; +} + QWidget *AnalyzerManager::AnalyzerManagerPrivate::createContents() { // right-side window with editor, output etc. @@ -465,6 +483,11 @@ AnalyzerManager::~AnalyzerManager() delete d; } +bool AnalyzerManager::isInitialized() const +{ + return d->m_initialized; +} + void AnalyzerManager::shutdown() { saveToolSettings(currentTool()); @@ -477,7 +500,11 @@ AnalyzerManager * AnalyzerManager::instance() void AnalyzerManager::modeChanged(IMode *mode) { - d->m_mainWindow->setDockActionsVisible(mode->id() == Constants::MODE_ANALYZE); + const bool makeVisible = mode->id() == Constants::MODE_ANALYZE; + if (!makeVisible) + return; + + d->m_mainWindow->setDockActionsVisible(makeVisible); } void AnalyzerManager::selectTool(IAnalyzerTool *tool) @@ -535,6 +562,8 @@ void AnalyzerManager::toolSelected(QAction *action) void AnalyzerManager::addTool(IAnalyzerTool *tool) { + d->delayedInit(); // be sure that there is a valid IMode instance + Internal::AnalyzerPlugin *plugin = Internal::AnalyzerPlugin::instance(); QAction *action = new QAction(tool->displayName(), d->m_toolGroup); action->setData(d->m_tools.count()); @@ -586,13 +615,11 @@ QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QStrin IAnalyzerTool *AnalyzerManager::currentTool() const { - QTC_ASSERT(!d->m_tools.isEmpty(), return 0); - if (!d->m_toolGroup->checkedAction()) { return 0; } - return d->m_tools.at(d->m_toolGroup->checkedAction()->data().toInt()); + return d->m_tools.value(d->m_toolGroup->checkedAction()->data().toInt()); } QList AnalyzerManager::tools() const @@ -655,6 +682,9 @@ void AnalyzerManager::loadToolSettings(IAnalyzerTool *tool) void AnalyzerManager::saveToolSettings(IAnalyzerTool *tool) { + if (!tool) + return; // no active tool, do nothing + QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id()); d->m_mainWindow->saveSettings(settings); diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index 8fbabe08c6..2e7c3b88ce 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -133,6 +133,7 @@ public: static AnalyzerManager *instance(); + bool isInitialized() const; void shutdown(); /** -- 2.11.0