RemoteLinux: Make run configuration's isEnabled() function smarter.

We move some checks over from the factory's canRun() method.
A a result, the disabled "run" button will show a more informative
tool tip.

Change-Id: I88e92c9221907ccfdc296fe13b8e8788cec865c2
Reviewed-on: http://codereview.qt.nokia.com/241
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
This commit is contained in:
Christian Kandeler
2011-05-30 16:32:51 +02:00
parent eadd0e4577
commit d627a3ebb1
3 changed files with 49 additions and 26 deletions

View File

@@ -43,10 +43,15 @@
#include "qt4maemotarget.h" #include "qt4maemotarget.h"
#include "maemoqtversion.h" #include "maemoqtversion.h"
#include <analyzerbase/analyzerconstants.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/messagemanager.h> #include <coreplugin/messagemanager.h>
#include <debugger/debuggerconstants.h>
#include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/session.h> #include <projectexplorer/session.h>
#include <qtsupport/qtoutputformatter.h> #include <qtsupport/qtoutputformatter.h>
@@ -131,14 +136,33 @@ Qt4BuildConfiguration *MaemoRunConfiguration::activeQt4BuildConfiguration() cons
bool MaemoRunConfiguration::isEnabled() const 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 QString MaemoRunConfiguration::disabledReason() const
{ {
if (!m_validParse) return m_disabledReason;
return tr("The .pro file could not be parsed");
return QString();
} }
QWidget *MaemoRunConfiguration::createConfigurationWidget() 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<AbstractQt4MaemoTarget *>(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() void MaemoRunConfiguration::updateDeviceConfigurations()
{ {
emit deviceConfigurationChanged(target()); emit deviceConfigurationChanged(target());

View File

@@ -122,6 +122,7 @@ public:
void setSystemEnvironment(const Utils::Environment &environment); void setSystemEnvironment(const Utils::Environment &environment);
int portsUsedByDebuggers() const; int portsUsedByDebuggers() const;
bool hasEnoughFreePorts(const QString &mode) const;
QString proFilePath() const; QString proFilePath() const;
@@ -160,6 +161,7 @@ private:
Utils::Environment m_systemEnvironment; Utils::Environment m_systemEnvironment;
QList<Utils::EnvironmentItem> m_userEnvironmentChanges; QList<Utils::EnvironmentItem> m_userEnvironmentChanges;
bool m_validParse; bool m_validParse;
mutable QString m_disabledReason;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -162,29 +162,9 @@ bool MaemoRunControlFactory::canRun(RunConfiguration *runConfiguration,
{ {
const MaemoRunConfiguration * const maemoRunConfig const MaemoRunConfiguration * const maemoRunConfig
= qobject_cast<MaemoRunConfiguration *>(runConfiguration); = qobject_cast<MaemoRunConfiguration *>(runConfiguration);
if (!maemoRunConfig if (!maemoRunConfig || !maemoRunConfig->isEnabled())
|| !maemoRunConfig->deviceConfig()
|| !maemoRunConfig->activeQt4BuildConfiguration()
|| maemoRunConfig->remoteExecutableFilePath().isEmpty())
return false; return false;
const int freePortCount = maemoRunConfig->freePorts().count(); return maemoRunConfig->hasEnoughFreePorts(mode);
const AbstractQt4MaemoTarget * const maemoTarget
= qobject_cast<AbstractQt4MaemoTarget *>(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;
} }
RunControl* MaemoRunControlFactory::create(RunConfiguration *runConfig, RunControl* MaemoRunControlFactory::create(RunConfiguration *runConfig,