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();
// list of dock widgets to prevent memory leak
typedef QWeakPointer<QDockWidget> DockPtr;
QList<DockPtr> m_dockWidgets;
+
+ bool m_initialized;
};
AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq):
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);
q, SLOT(runControlCreated(AnalyzerRunControl *)));
setupActions();
-
- m_mode = new AnalyzerMode(q);
- m_mode->setWidget(createContents());
- AnalyzerPlugin::instance()->addAutoReleasedObject(m_mode);
}
AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate()
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.
delete d;
}
+bool AnalyzerManager::isInitialized() const
+{
+ return d->m_initialized;
+}
+
void AnalyzerManager::shutdown()
{
saveToolSettings(currentTool());
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)
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());
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<IAnalyzerTool *> AnalyzerManager::tools() const
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);