From 42e5e5f00afb02c764772ee1bded08fd1ce37689 Mon Sep 17 00:00:00 2001 From: dt_ Date: Thu, 26 May 2011 19:57:07 +0200 Subject: [PATCH] Show tooltip on disabled run actions Change-Id: I9b5eaa49e14b71b9d1f8ac84aa7cb7bb4d014cac Reviewed-on: http://codereview.qt.nokia.com/192 Reviewed-by: hjk Reviewed-by: Christian Kandeler --- src/plugins/analyzerbase/analyzermanager.cpp | 12 ++++++ src/plugins/debugger/debuggerplugin.cpp | 5 +++ .../projectexplorer/projectexplorer.cpp | 39 ++++++++++++++++++- src/plugins/projectexplorer/projectexplorer.h | 1 + 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 073713b3226..9ede3f142fc 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -845,9 +845,21 @@ void AnalyzerManager::updateRunActions() ProjectExplorer::Project *project = pe->startupProject(); bool startEnabled = !d->m_currentRunControl && pe->canRun(project, Constants::MODE_ANALYZE) && currentTool(); + QString disabledReason; + if (d->m_currentRunControl) + disabledReason = tr("An analysis is still in progress."); + else if (!currentTool()) + disabledReason = tr("No analyzer tool selected."); + else + disabledReason = pe->cannotRunReason(project, Constants::MODE_ANALYZE); + d->m_startAction->setEnabled(startEnabled); + d->m_startAction->setToolTip(disabledReason); + if (currentTool() && !currentTool()->canRunRemotely()) + disabledReason = tr("Current analyzer tool can not be run remotely."); d->m_startRemoteAction->setEnabled(!d->m_currentRunControl && currentTool() && currentTool()->canRunRemotely()); + d->m_startRemoteAction->setToolTip(disabledReason); d->m_toolBox->setEnabled(!d->m_currentRunControl); d->m_toolGroup->setEnabled(!d->m_currentRunControl); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index da594aecbf8..3a988c52ce5 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -2094,9 +2094,13 @@ void DebuggerPluginPrivate::updateDebugActions() ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance(); Project *project = pe->startupProject(); m_debugAction->setEnabled(pe->canRun(project, _(Constants::DEBUGMODE))); + m_debugAction->setToolTip(pe->cannotRunReason(project, _(Constants::DEBUGMODE))); const bool canStepInto = pe->canRun(project, _(Constants::DEBUGMODE2)); + const QString cannotStepIntoReason = pe->cannotRunReason(project, _(Constants::DEBUGMODE2)); m_stepAction->setEnabled(canStepInto); m_nextAction->setEnabled(canStepInto); + m_stepAction->setToolTip(cannotStepIntoReason); + m_nextAction->setToolTip(cannotStepIntoReason); } void DebuggerPluginPrivate::onCoreAboutToOpen() @@ -2773,6 +2777,7 @@ void DebuggerPluginPrivate::extensionsInitialized() cmd = am->registerAction(m_debugAction, Constants::DEBUG, globalcontext); cmd->setDefaultText(tr("Start Debugging")); cmd->setDefaultKeySequence(QKeySequence(Constants::DEBUG_KEY)); + cmd->setAttribute(Command::CA_UpdateText); mstart->addAction(cmd, Core::Constants::G_DEFAULT_ONE); m_visibleDebugAction = new Utils::ProxyAction(this); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index fd556418d43..ffd28e49d2f 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1908,8 +1908,6 @@ QPair ProjectExplorerPlugin::buildSettingsEnabledForSession() return result; } - - bool ProjectExplorerPlugin::coreAboutToClose() { if (d->m_buildManager->isBuilding()) { @@ -2135,10 +2133,47 @@ bool ProjectExplorerPlugin::canRun(Project *project, const QString &runMode) return (canRun && !building); } +QString ProjectExplorerPlugin::cannotRunReason(Project *project, const QString &runMode) +{ + if (!project) + return tr("No active project"); + + if (!project->activeTarget()) + return tr("The project '%1' has no active target").arg(project->displayName()); + + if (!project->activeTarget()->activeRunConfiguration()) + return tr("The target '%1' for project '%2' has no active run configuration") + .arg(project->activeTarget()->displayName(), project->displayName()); + + + if (d->m_projectExplorerSettings.buildBeforeDeploy + && d->m_projectExplorerSettings.deployBeforeRun + && hasBuildSettings(project)) { + QPair buildState = buildSettingsEnabled(project); + if (!buildState.first) + return buildState.second; + } + + + RunConfiguration *activeRC = project->activeTarget()->activeRunConfiguration(); + // shouldn't actually be shown to the user... + if (!findRunControlFactory(activeRC, runMode)) + return tr("Cannot run '%1' in mode '%2'.") + .arg(activeRC->displayName(), runMode); + + if (!activeRC->isEnabled()) + return activeRC->disabledReason(); + + if (d->m_buildManager->isBuilding()) + return tr("A build is still in progress."); + return QString(); +} + void ProjectExplorerPlugin::slotUpdateRunActions() { Project *project = startupProject(); d->m_runAction->setEnabled(canRun(project, ProjectExplorer::Constants::RUNMODE)); + d->m_runAction->setToolTip(cannotRunReason(project, ProjectExplorer::Constants::RUNMODE)); } void ProjectExplorerPlugin::cancelBuild() diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index dddfa164fea..cae6c504a99 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -118,6 +118,7 @@ public: bool coreAboutToClose(); bool canRun(Project *pro, const QString &runMode); + QString cannotRunReason(Project *project, const QString &runMode); void runProject(Project *pro, const QString &mode); void runRunConfiguration(ProjectExplorer::RunConfiguration *rc, const QString &mode);