summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/analyzerbase/analyzermanager.cpp9
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp25
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp93
-rw-r--r--src/plugins/projectexplorer/projectexplorer.h3
4 files changed, 63 insertions, 67 deletions
diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp
index 0de28c728d..45089c6068 100644
--- a/src/plugins/analyzerbase/analyzermanager.cpp
+++ b/src/plugins/analyzerbase/analyzermanager.cpp
@@ -419,8 +419,7 @@ bool AnalyzerManagerPrivate::isActionRunnable(AnalyzerAction *action) const
if (action->startMode() == StartRemote)
return true;
- ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance();
- return pe->canRun(SessionManager::startupProject(), action->tool()->runMode());
+ return ProjectExplorerPlugin::canRun(SessionManager::startupProject(), action->tool()->runMode(), 0);
}
void AnalyzerManagerPrivate::startTool()
@@ -572,16 +571,14 @@ void AnalyzerManagerPrivate::saveToolSettings(AnalyzerAction *action)
void AnalyzerManagerPrivate::updateRunActions()
{
- ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance();
- Project *project = SessionManager::startupProject();
-
QString disabledReason;
if (m_isRunning)
disabledReason = tr("An analysis is still in progress.");
else if (!m_currentAction)
disabledReason = tr("No analyzer tool selected.");
else
- disabledReason = pe->cannotRunReason(project, m_currentAction->tool()->runMode());
+ ProjectExplorerPlugin::canRun(SessionManager::startupProject(),
+ m_currentAction->tool()->runMode(), &disabledReason);
m_startAction->setEnabled(isActionRunnable(m_currentAction));
m_startAction->setToolTip(disabledReason);
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 6a9884218c..175bebe12e 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1526,10 +1526,10 @@ void DebuggerPluginPrivate::onCurrentProjectChanged(Project *project)
m_interruptAction->setEnabled(false);
m_continueAction->setEnabled(false);
m_exitAction->setEnabled(false);
- ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance();
- const bool canRun = pe->canRun(project, DebugRunMode);
+ QString whyNot;
+ const bool canRun = ProjectExplorerPlugin::canRun(project, DebugRunMode, &whyNot);
m_startAction->setEnabled(canRun);
- m_startAction->setToolTip(canRun ? QString() : pe->cannotRunReason(project, DebugRunMode));
+ m_startAction->setToolTip(whyNot);
m_debugWithoutDeployAction->setEnabled(canRun);
setProxyAction(m_visibleStartAction, Core::Id(Constants::DEBUG));
}
@@ -2278,9 +2278,8 @@ void DebuggerPluginPrivate::updateState(DebuggerEngine *engine)
m_hiddenStopAction->setAction(m_interruptAction);
m_localsAndExpressionsWindow->setShowLocals(false);
} else if (state == DebuggerFinished) {
- ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance();
Project *project = SessionManager::startupProject();
- const bool canRun = pe->canRun(project, DebugRunMode);
+ const bool canRun = ProjectExplorerPlugin::canRun(project, DebugRunMode);
// We don't want to do anything anymore.
m_interruptAction->setEnabled(false);
m_continueAction->setEnabled(false);
@@ -2380,28 +2379,24 @@ void DebuggerPluginPrivate::updateDebugActions()
if (m_currentEngine->state() != DebuggerNotReady)
return;
- ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance();
Project *project = SessionManager::startupProject();
- const bool canRun = pe->canRun(project, DebugRunMode);
+ QString whyNot;
+ const bool canRun = ProjectExplorerPlugin::canRun(project, DebugRunMode, &whyNot);
m_startAction->setEnabled(canRun);
- m_startAction->setToolTip(canRun ? QString() : pe->cannotRunReason(project, DebugRunMode));
+ m_startAction->setToolTip(whyNot);
m_debugWithoutDeployAction->setEnabled(canRun);
// Step into/next: Start and break at 'main' unless a debugger is running.
if (m_snapshotHandler->currentIndex() < 0) {
- const bool canRunAndBreakMain = pe->canRun(project, DebugRunModeWithBreakOnMain);
+ QString toolTip;
+ const bool canRunAndBreakMain
+ = ProjectExplorerPlugin::canRun(project, DebugRunModeWithBreakOnMain, &toolTip);
m_stepAction->setEnabled(canRunAndBreakMain);
m_nextAction->setEnabled(canRunAndBreakMain);
- QString toolTip;
if (canRunAndBreakMain) {
QTC_ASSERT(project, return ; );
toolTip = tr("Start \"%1\" and break at function \"main()\"")
.arg(project->displayName());
- } else {
- // Do not display long tooltip saying run mode is not supported
- // for project for projects to which 'break at main' is not applicable.
- if (!canRun)
- toolTip = pe->cannotRunReason(project, DebugRunModeWithBreakOnMain);
}
m_stepAction->setToolTip(toolTip);
m_nextAction->setToolTip(toolTip);
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 7a1676614d..462996f4f5 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -2641,70 +2641,75 @@ void ProjectExplorerPlugin::updateDeployActions()
emit updateRunActions();
}
-bool ProjectExplorerPlugin::canRun(Project *project, RunMode runMode)
+bool ProjectExplorerPlugin::canRun(Project *project, RunMode runMode, QString *whyNot)
{
- if (!project ||
- !project->activeTarget() ||
- !project->activeTarget()->activeRunConfiguration()) {
+ if (!project) {
+ if (whyNot)
+ *whyNot = tr("No active project.");
return false;
}
- if (d->m_projectExplorerSettings.buildBeforeDeploy
- && d->m_projectExplorerSettings.deployBeforeRun
- && hasBuildSettings(project)
- && !buildSettingsEnabled(project).first)
+ if (project->needsConfiguration()) {
+ if (whyNot)
+ *whyNot = tr("The project \"%1\" is not configured.").arg(project->displayName());
return false;
+ }
+ Target *target = project->activeTarget();
+ if (!target) {
+ if (whyNot)
+ *whyNot = tr("The project \"%1\" has no active kit.").arg(project->displayName());
+ return false;
+ }
- RunConfiguration *activeRC = project->activeTarget()->activeRunConfiguration();
-
- bool canRun = findRunControlFactory(activeRC, runMode)
- && activeRC->isEnabled();
- return canRun && !BuildManager::isBuilding();
-}
-
-QString ProjectExplorerPlugin::cannotRunReason(Project *project, RunMode runMode)
-{
- if (!project)
- return tr("No active project.");
-
- if (project->needsConfiguration())
- return tr("The project %1 is not configured.").arg(project->displayName());
-
- if (!project->activeTarget())
- return tr("The project \"%1\" has no active kit.").arg(project->displayName());
+ RunConfiguration *activeRC = target->activeRunConfiguration();
+ if (!activeRC) {
+ if (whyNot)
+ *whyNot = tr("The kit \"%1\" for the project \"%2\" has no active run configuration.")
+ .arg(target->displayName(), project->displayName());
+ return false;
+ }
- if (!project->activeTarget()->activeRunConfiguration())
- return tr("The kit \"%1\" for the project \"%2\" has no active run configuration.")
- .arg(project->activeTarget()->displayName(), project->displayName());
+ if (!activeRC->isEnabled()) {
+ if (whyNot)
+ *whyNot = activeRC->disabledReason();
+ return false;
+ }
- if (d->m_projectExplorerSettings.buildBeforeDeploy
- && d->m_projectExplorerSettings.deployBeforeRun
- && hasBuildSettings(project)) {
- QPair<bool, QString> buildState = buildSettingsEnabled(project);
- if (!buildState.first)
- return buildState.second;
+ if (m_instance->d->m_projectExplorerSettings.buildBeforeDeploy
+ && m_instance->d->m_projectExplorerSettings.deployBeforeRun
+ && m_instance->hasBuildSettings(project)) {
+ QPair<bool, QString> buildState = m_instance->buildSettingsEnabled(project);
+ if (!buildState.first) {
+ if (whyNot)
+ *whyNot = buildState.second;
+ return false;
+ }
}
- RunConfiguration *activeRC = project->activeTarget()->activeRunConfiguration();
- if (!activeRC->isEnabled())
- return activeRC->disabledReason();
-
// shouldn't actually be shown to the user...
- if (!findRunControlFactory(activeRC, runMode))
- return tr("Cannot run \"%1\".").arg(activeRC->displayName());
+ if (!m_instance->findRunControlFactory(activeRC, runMode)) {
+ if (whyNot)
+ *whyNot = tr("Cannot run \"%1\".").arg(activeRC->displayName());
+ return false;
+ }
- if (BuildManager::isBuilding())
- return tr("A build is still in progress.");
- return QString();
+ if (BuildManager::isBuilding()) {
+ if (whyNot)
+ *whyNot = tr("A build is still in progress.");
+ return false;
+ }
+
+ return true;
}
void ProjectExplorerPlugin::slotUpdateRunActions()
{
Project *project = SessionManager::startupProject();
- const bool state = canRun(project, NormalRunMode);
+ QString whyNot;
+ const bool state = canRun(project, NormalRunMode, &whyNot);
d->m_runAction->setEnabled(state);
d->m_runAction->setToolTip(cannotRunReason(project, NormalRunMode));
d->m_runWithoutDeployAction->setEnabled(state);
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index d13ccc9283..ac5f70ea72 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -106,8 +106,7 @@ public:
bool coreAboutToClose();
QList<QPair<QString, QString> > recentProjects();
- bool canRun(Project *pro, RunMode runMode);
- QString cannotRunReason(Project *project, RunMode runMode);
+ static bool canRun(Project *pro, RunMode runMode, QString *whyNot = 0);
void runProject(Project *pro, RunMode, const bool forceSkipDeploy = false);
void runRunConfiguration(ProjectExplorer::RunConfiguration *rc, RunMode runMode,
const bool forceSkipDeploy = false);