Analyzer: Use action as handle for tool plus start mode

Change-Id: I33f99f28fb99c21cc62cda57ec1ba1aa2963b065
Reviewed-by: Aurindam Jana <aurindam.jana@digia.com>
Reviewed-by: Christiaan Janssen <christiaan.janssen@digia.com>
This commit is contained in:
hjk
2013-08-05 17:08:55 +02:00
parent 2e004b7367
commit d95ae65c62
4 changed files with 35 additions and 50 deletions

View File

@@ -149,10 +149,10 @@ public:
void deactivateDock(QDockWidget *dockWidget); void deactivateDock(QDockWidget *dockWidget);
void addTool(IAnalyzerTool *tool, const StartModes &modes); void addTool(IAnalyzerTool *tool, const StartModes &modes);
void selectSavedTool(); void selectSavedTool();
void selectTool(IAnalyzerTool *tool, StartMode mode); void selectTool(QAction *action);
void handleToolStarted(); void handleToolStarted();
void handleToolFinished(); void handleToolFinished();
void saveToolSettings(IAnalyzerTool *tool, StartMode mode); void saveToolSettings(QAction *action);
void loadToolSettings(IAnalyzerTool *tool); void loadToolSettings(IAnalyzerTool *tool);
QAction *actionFromToolAndMode(IAnalyzerTool *tool, StartMode mode); QAction *actionFromToolAndMode(IAnalyzerTool *tool, StartMode mode);
@@ -172,8 +172,6 @@ public:
AnalyzerMode *m_mode; AnalyzerMode *m_mode;
bool m_isRunning; bool m_isRunning;
Utils::FancyMainWindow *m_mainWindow; Utils::FancyMainWindow *m_mainWindow;
IAnalyzerTool *m_currentTool;
StartMode m_currentMode;
QAction *m_currentAction; QAction *m_currentAction;
QHash<QAction *, IAnalyzerTool *> m_toolFromAction; QHash<QAction *, IAnalyzerTool *> m_toolFromAction;
QHash<QAction *, StartMode> m_modeFromAction; QHash<QAction *, StartMode> m_modeFromAction;
@@ -200,8 +198,6 @@ AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq):
m_mode(0), m_mode(0),
m_isRunning(false), m_isRunning(false),
m_mainWindow(0), m_mainWindow(0),
m_currentTool(0),
m_currentMode(),
m_currentAction(0), m_currentAction(0),
m_startAction(0), m_startAction(0),
m_stopAction(0), m_stopAction(0),
@@ -440,7 +436,10 @@ bool AnalyzerManagerPrivate::isActionRunnable(QAction *action) const
void AnalyzerManagerPrivate::startTool() void AnalyzerManagerPrivate::startTool()
{ {
m_currentTool->startTool(m_currentMode); IAnalyzerTool *tool = m_toolFromAction.value(m_currentAction);
StartMode mode = m_modeFromAction.value(m_currentAction);
QTC_ASSERT(tool, return);
tool->startTool(mode);
} }
void AnalyzerManagerPrivate::modeChanged(IMode *mode) void AnalyzerManagerPrivate::modeChanged(IMode *mode)
@@ -475,59 +474,49 @@ void AnalyzerManagerPrivate::selectSavedTool()
const StartMode lastMode = StartMode(settings->value(QLatin1String(LAST_ACTIVE_MODE)).toInt()); const StartMode lastMode = StartMode(settings->value(QLatin1String(LAST_ACTIVE_MODE)).toInt());
foreach (IAnalyzerTool *tool, m_tools) { foreach (IAnalyzerTool *tool, m_tools) {
if (tool->id() == lastTool) { if (tool->id() == lastTool) {
selectTool(tool, lastMode); selectTool(actionFromToolAndMode(tool, lastMode));
return; return;
} }
} }
} }
// fallback to first available tool // fallback to first available tool
if (!m_actions.isEmpty()) { if (!m_actions.isEmpty())
IAnalyzerTool *tool = m_toolFromAction.value(m_actions.first()); selectTool(m_actions.first());
StartMode mode = m_modeFromAction.value(m_actions.first());
selectTool(tool, mode);
}
} }
void AnalyzerManagerPrivate::selectMenuAction() void AnalyzerManagerPrivate::selectMenuAction()
{ {
AnalyzerManager::showMode();
QAction *action = qobject_cast<QAction *>(sender()); QAction *action = qobject_cast<QAction *>(sender());
QTC_ASSERT(action, return); QTC_ASSERT(action, return);
IAnalyzerTool *tool = m_toolFromAction.value(action); selectTool(action);
StartMode mode = m_modeFromAction.value(action); startTool();
AnalyzerManager::showMode();
selectTool(tool, mode);
tool->startTool(mode);
} }
void AnalyzerManagerPrivate::selectToolboxAction(int index) void AnalyzerManagerPrivate::selectToolboxAction(int index)
{ {
QAction *action = m_actions[index]; selectTool(m_actions[index]);
selectTool(m_toolFromAction.value(action), m_modeFromAction.value(action));
} }
void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) void AnalyzerManagerPrivate::selectTool(QAction *action)
{ {
if (m_currentTool == tool && m_currentMode == mode) if (m_currentAction == action)
return; return;
QAction *action = actionFromToolAndMode(tool, mode);
const int actionIndex = m_actions.indexOf(action); const int actionIndex = m_actions.indexOf(action);
QTC_ASSERT(actionIndex >= 0, return); QTC_ASSERT(actionIndex >= 0, return);
// Clean up old tool. // Clean up old tool.
if (m_currentTool) { if (IAnalyzerTool *oldTool = m_toolFromAction.value(m_currentAction)) {
saveToolSettings(m_currentTool, m_currentMode); saveToolSettings(m_currentAction);
foreach (QDockWidget *widget, m_toolWidgets.value(m_currentTool)) foreach (QDockWidget *widget, m_toolWidgets.value(oldTool))
deactivateDock(widget); deactivateDock(widget);
m_currentTool->toolDeselected();
} }
// Now change the tool. // Now change the tool.
m_currentTool = tool;
m_currentMode = mode;
m_currentAction = action; m_currentAction = action;
IAnalyzerTool *tool = m_toolFromAction.value(action);
if (!m_defaultSettings.contains(tool)) { if (!m_defaultSettings.contains(tool)) {
QWidget *widget = tool->createWidgets(); QWidget *widget = tool->createWidgets();
QTC_CHECK(widget); QTC_CHECK(widget);
@@ -603,8 +592,10 @@ void AnalyzerManagerPrivate::loadToolSettings(IAnalyzerTool *tool)
settings->endGroup(); settings->endGroup();
} }
void AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool, StartMode mode) void AnalyzerManagerPrivate::saveToolSettings(QAction *action)
{ {
IAnalyzerTool *tool = m_toolFromAction.value(action);
StartMode mode = m_modeFromAction.value(action);
if (!tool) if (!tool)
return; // no active tool, do nothing return; // no active tool, do nothing
QTC_ASSERT(m_mainWindow, return); QTC_ASSERT(m_mainWindow, return);
@@ -624,14 +615,15 @@ void AnalyzerManagerPrivate::updateRunActions()
Project *project = pe->startupProject(); Project *project = pe->startupProject();
bool startEnabled = isActionRunnable(m_currentAction); bool startEnabled = isActionRunnable(m_currentAction);
IAnalyzerTool *tool = m_toolFromAction.value(m_currentAction);
QString disabledReason; QString disabledReason;
if (m_isRunning) if (m_isRunning)
disabledReason = tr("An analysis is still in progress."); disabledReason = tr("An analysis is still in progress.");
else if (!m_currentTool) else if (!tool)
disabledReason = tr("No analyzer tool selected."); disabledReason = tr("No analyzer tool selected.");
else else
disabledReason = pe->cannotRunReason(project, m_currentTool->runMode()); disabledReason = pe->cannotRunReason(project, tool->runMode());
m_startAction->setEnabled(startEnabled); m_startAction->setEnabled(startEnabled);
m_startAction->setToolTip(disabledReason); m_startAction->setToolTip(disabledReason);
@@ -669,7 +661,7 @@ void AnalyzerManager::extensionsInitialized()
void AnalyzerManager::shutdown() void AnalyzerManager::shutdown()
{ {
m_instance->d->saveToolSettings(m_instance->d->m_currentTool, m_instance->d->m_currentMode); m_instance->d->saveToolSettings(m_instance->d->m_currentAction);
} }
void AnalyzerManager::addTool(IAnalyzerTool *tool, const StartModes &modes) void AnalyzerManager::addTool(IAnalyzerTool *tool, const StartModes &modes)
@@ -691,11 +683,6 @@ QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QStrin
return dockWidget; return dockWidget;
} }
IAnalyzerTool *AnalyzerManager::currentSelectedTool()
{
return m_instance->d->m_currentTool;
}
QList<IAnalyzerTool *> AnalyzerManager::tools() QList<IAnalyzerTool *> AnalyzerManager::tools()
{ {
return m_instance->d->m_tools; return m_instance->d->m_tools;
@@ -703,13 +690,12 @@ QList<IAnalyzerTool *> AnalyzerManager::tools()
void AnalyzerManager::selectTool(IAnalyzerTool *tool, StartMode mode) void AnalyzerManager::selectTool(IAnalyzerTool *tool, StartMode mode)
{ {
m_instance->d->selectTool(tool, mode); m_instance->d->selectTool(m_instance->d->actionFromToolAndMode(tool, mode));
} }
void AnalyzerManager::startTool(IAnalyzerTool *tool, StartMode mode) void AnalyzerManager::startTool()
{ {
QTC_ASSERT(tool == m_instance->d->m_currentTool, return); m_instance->d->startTool();
tool->startTool(mode);
} }
Utils::FancyMainWindow *AnalyzerManager::mainWindow() Utils::FancyMainWindow *AnalyzerManager::mainWindow()
@@ -719,7 +705,8 @@ Utils::FancyMainWindow *AnalyzerManager::mainWindow()
void AnalyzerManagerPrivate::resetLayout() void AnalyzerManagerPrivate::resetLayout()
{ {
m_mainWindow->restoreSettings(m_defaultSettings.value(m_currentTool)); IAnalyzerTool *tool = m_toolFromAction.value(m_currentAction);
m_mainWindow->restoreSettings(m_defaultSettings.value(tool));
} }
void AnalyzerManager::showStatusMessage(const QString &message, int timeoutMS) void AnalyzerManager::showStatusMessage(const QString &message, int timeoutMS)

View File

@@ -78,10 +78,9 @@ public:
static Utils::FancyMainWindow *mainWindow(); static Utils::FancyMainWindow *mainWindow();
static void showMode(); static void showMode();
static IAnalyzerTool *currentSelectedTool();
static QList<IAnalyzerTool *> tools(); static QList<IAnalyzerTool *> tools();
static void selectTool(IAnalyzerTool *tool, StartMode mode); static void selectTool(IAnalyzerTool *tool, StartMode mode);
static void startTool(IAnalyzerTool *tool, StartMode mode); static void startTool();
static void stopTool(); static void stopTool();
// Convenience functions. // Convenience functions.

View File

@@ -549,8 +549,7 @@ void QmlProfilerTool::showLoadDialog()
if (ModeManager::currentMode()->id() != MODE_ANALYZE) if (ModeManager::currentMode()->id() != MODE_ANALYZE)
AnalyzerManager::showMode(); AnalyzerManager::showMode();
if (AnalyzerManager::currentSelectedTool() != this) AnalyzerManager::selectTool(this, StartRemote);
AnalyzerManager::selectTool(this, StartRemote);
QString filename = QFileDialog::getOpenFileName(Core::ICore::mainWindow(), tr("Load QML Trace"), QString(), QString filename = QFileDialog::getOpenFileName(Core::ICore::mainWindow(), tr("Load QML Trace"), QString(),
tr("QML traces (*%1)").arg(QLatin1String(TraceFileExtension))); tr("QML traces (*%1)").arg(QLatin1String(TraceFileExtension)));

View File

@@ -946,8 +946,8 @@ void CallgrindToolPrivate::handleShowCostsOfFunction()
m_toggleCollectFunction = qualifiedFunctionName + QLatin1String("()"); m_toggleCollectFunction = qualifiedFunctionName + QLatin1String("()");
AnalyzerManager::selectTool(q, StartMode(StartLocal)); AnalyzerManager::selectTool(q, StartLocal);
AnalyzerManager::startTool(q, StartMode(StartLocal)); AnalyzerManager::startTool();
} }
void CallgrindToolPrivate::slotRequestDump() void CallgrindToolPrivate::slotRequestDump()