diff --git a/src/plugins/remotelinux/maemorunconfiguration.cpp b/src/plugins/remotelinux/maemorunconfiguration.cpp index 4a432df2ee9..2a57cf71679 100644 --- a/src/plugins/remotelinux/maemorunconfiguration.cpp +++ b/src/plugins/remotelinux/maemorunconfiguration.cpp @@ -43,10 +43,15 @@ #include "qt4maemotarget.h" #include "maemoqtversion.h" +#include + #include #include +#include + #include +#include #include #include @@ -131,14 +136,33 @@ Qt4BuildConfiguration *MaemoRunConfiguration::activeQt4BuildConfiguration() cons bool MaemoRunConfiguration::isEnabled() const { - return m_validParse; + if (!m_validParse) { + m_disabledReason = tr("The .pro file could not be parsed/"); + return false; + } + if (!deviceConfig()) { + m_disabledReason = tr("No device configuration set."); + return false; + } + if (!activeQt4BuildConfiguration()) { + m_disabledReason = tr("No active build configuration."); + return false; + } + if (remoteExecutableFilePath().isEmpty()) { + m_disabledReason = tr("Don't know what to run."); + return false; + } + if (!hasEnoughFreePorts(ProjectExplorer::Constants::RUNMODE)) { + m_disabledReason = tr("Not enough free ports on the device."); + return false; + } + m_disabledReason.clear(); + return true; } QString MaemoRunConfiguration::disabledReason() const { - if (!m_validParse) - return tr("The .pro file could not be parsed"); - return QString(); + return m_disabledReason; } QWidget *MaemoRunConfiguration::createConfigurationWidget() @@ -345,6 +369,23 @@ int MaemoRunConfiguration::portsUsedByDebuggers() const } } +bool MaemoRunConfiguration::hasEnoughFreePorts(const QString &mode) const +{ + const int freePortCount = freePorts().count(); + const AbstractQt4MaemoTarget * const maemoTarget + = qobject_cast(target()); + const bool remoteMountsAllowed = maemoTarget && maemoTarget->allowsRemoteMounts(); + if (remoteMountsAllowed && freePortCount == 0) + return false; + const int mountDirCount = remoteMountsAllowed + ? remoteMounts()->validMountSpecificationCount() : 0; + if (mode == Debugger::Constants::DEBUGMODE) + return freePortCount >= mountDirCount + portsUsedByDebuggers(); + if (mode == ProjectExplorer::Constants::RUNMODE || Analyzer::Constants::MODE_ANALYZE) + return freePortCount >= mountDirCount; + return false; +} + void MaemoRunConfiguration::updateDeviceConfigurations() { emit deviceConfigurationChanged(target()); diff --git a/src/plugins/remotelinux/maemorunconfiguration.h b/src/plugins/remotelinux/maemorunconfiguration.h index 19af6153689..545ecbabf48 100644 --- a/src/plugins/remotelinux/maemorunconfiguration.h +++ b/src/plugins/remotelinux/maemorunconfiguration.h @@ -122,6 +122,7 @@ public: void setSystemEnvironment(const Utils::Environment &environment); int portsUsedByDebuggers() const; + bool hasEnoughFreePorts(const QString &mode) const; QString proFilePath() const; @@ -160,6 +161,7 @@ private: Utils::Environment m_systemEnvironment; QList m_userEnvironmentChanges; bool m_validParse; + mutable QString m_disabledReason; }; } // namespace Internal diff --git a/src/plugins/remotelinux/maemorunfactories.cpp b/src/plugins/remotelinux/maemorunfactories.cpp index 9a519804213..3de2e2937f5 100644 --- a/src/plugins/remotelinux/maemorunfactories.cpp +++ b/src/plugins/remotelinux/maemorunfactories.cpp @@ -162,29 +162,9 @@ bool MaemoRunControlFactory::canRun(RunConfiguration *runConfiguration, { const MaemoRunConfiguration * const maemoRunConfig = qobject_cast(runConfiguration); - if (!maemoRunConfig - || !maemoRunConfig->deviceConfig() - || !maemoRunConfig->activeQt4BuildConfiguration() - || maemoRunConfig->remoteExecutableFilePath().isEmpty()) + if (!maemoRunConfig || !maemoRunConfig->isEnabled()) return false; - const int freePortCount = maemoRunConfig->freePorts().count(); - - const AbstractQt4MaemoTarget * const maemoTarget - = qobject_cast(maemoRunConfig->target()); - const bool remoteMountsAllowed - = maemoTarget && maemoTarget->allowsRemoteMounts(); - if (remoteMountsAllowed && freePortCount == 0) - return false; - const int mountDirCount - = remoteMountsAllowed - ? maemoRunConfig->remoteMounts()->validMountSpecificationCount() - : 0; - if (mode == Debugger::Constants::DEBUGMODE) - return freePortCount >= mountDirCount + maemoRunConfig->portsUsedByDebuggers(); - if (mode == ProjectExplorer::Constants::RUNMODE - || Analyzer::Constants::MODE_ANALYZE) - return freePortCount >= mountDirCount; - return false; + return maemoRunConfig->hasEnoughFreePorts(mode); } RunControl* MaemoRunControlFactory::create(RunConfiguration *runConfig,