Do not show Analyzer mode if no tools were added

Merge-request: 265
Reviewed-by: hjk <qtc-committer@nokia.com>
This commit is contained in:
Kevin Funk
2011-03-04 16:00:03 +01:00
committed by hjk
parent 0932334109
commit ecab2f191f
2 changed files with 40 additions and 9 deletions

View File

@@ -119,6 +119,14 @@ public:
AnalyzerManagerPrivate(AnalyzerManager *qq); AnalyzerManagerPrivate(AnalyzerManager *qq);
~AnalyzerManagerPrivate(); ~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(); void setupActions();
QWidget *createContents(); QWidget *createContents();
QWidget *createMainWindow(); QWidget *createMainWindow();
@@ -150,6 +158,8 @@ public:
// list of dock widgets to prevent memory leak // list of dock widgets to prevent memory leak
typedef QWeakPointer<QDockWidget> DockPtr; typedef QWeakPointer<QDockWidget> DockPtr;
QList<DockPtr> m_dockWidgets; QList<DockPtr> m_dockWidgets;
bool m_initialized;
}; };
AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq):
@@ -166,7 +176,8 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager
m_toolBoxSeparator(0), m_toolBoxSeparator(0),
m_viewsMenu(0), m_viewsMenu(0),
m_resizeEventFilter(new DockWidgetEventFilter(qq)), m_resizeEventFilter(new DockWidgetEventFilter(qq)),
m_toolbarStackedWidget(0) m_toolbarStackedWidget(0),
m_initialized(false)
{ {
m_runControlFactory = new AnalyzerRunControlFactory(); m_runControlFactory = new AnalyzerRunControlFactory();
AnalyzerPlugin::instance()->addAutoReleasedObject(m_runControlFactory); AnalyzerPlugin::instance()->addAutoReleasedObject(m_runControlFactory);
@@ -174,10 +185,6 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager
q, SLOT(runControlCreated(AnalyzerRunControl *))); q, SLOT(runControlCreated(AnalyzerRunControl *)));
setupActions(); setupActions();
m_mode = new AnalyzerMode(q);
m_mode->setWidget(createContents());
AnalyzerPlugin::instance()->addAutoReleasedObject(m_mode);
} }
AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate() AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate()
@@ -228,6 +235,17 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions()
m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); 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() QWidget *AnalyzerManager::AnalyzerManagerPrivate::createContents()
{ {
// right-side window with editor, output etc. // right-side window with editor, output etc.
@@ -465,6 +483,11 @@ AnalyzerManager::~AnalyzerManager()
delete d; delete d;
} }
bool AnalyzerManager::isInitialized() const
{
return d->m_initialized;
}
void AnalyzerManager::shutdown() void AnalyzerManager::shutdown()
{ {
saveToolSettings(currentTool()); saveToolSettings(currentTool());
@@ -477,7 +500,11 @@ AnalyzerManager * AnalyzerManager::instance()
void AnalyzerManager::modeChanged(IMode *mode) 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::selectTool(IAnalyzerTool *tool)
@@ -535,6 +562,8 @@ void AnalyzerManager::toolSelected(QAction *action)
void AnalyzerManager::addTool(IAnalyzerTool *tool) void AnalyzerManager::addTool(IAnalyzerTool *tool)
{ {
d->delayedInit(); // be sure that there is a valid IMode instance
Internal::AnalyzerPlugin *plugin = Internal::AnalyzerPlugin::instance(); Internal::AnalyzerPlugin *plugin = Internal::AnalyzerPlugin::instance();
QAction *action = new QAction(tool->displayName(), d->m_toolGroup); QAction *action = new QAction(tool->displayName(), d->m_toolGroup);
action->setData(d->m_tools.count()); action->setData(d->m_tools.count());
@@ -586,13 +615,11 @@ QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QStrin
IAnalyzerTool *AnalyzerManager::currentTool() const IAnalyzerTool *AnalyzerManager::currentTool() const
{ {
QTC_ASSERT(!d->m_tools.isEmpty(), return 0);
if (!d->m_toolGroup->checkedAction()) { if (!d->m_toolGroup->checkedAction()) {
return 0; 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 QList<IAnalyzerTool *> AnalyzerManager::tools() const
@@ -655,6 +682,9 @@ void AnalyzerManager::loadToolSettings(IAnalyzerTool *tool)
void AnalyzerManager::saveToolSettings(IAnalyzerTool *tool) void AnalyzerManager::saveToolSettings(IAnalyzerTool *tool)
{ {
if (!tool)
return; // no active tool, do nothing
QSettings *settings = Core::ICore::instance()->settings(); QSettings *settings = Core::ICore::instance()->settings();
settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id()); settings->beginGroup(QLatin1String("AnalyzerViewSettings_") + tool->id());
d->m_mainWindow->saveSettings(settings); d->m_mainWindow->saveSettings(settings);

View File

@@ -133,6 +133,7 @@ public:
static AnalyzerManager *instance(); static AnalyzerManager *instance();
bool isInitialized() const;
void shutdown(); void shutdown();
/** /**