diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h index 2fc3b5c7a3c..6694209eba7 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h @@ -68,8 +68,6 @@ static const QLatin1String LastDeployedTimesKey(PREFIX ".LastDeployedTimes"); static const QLatin1String ProFileKey(PREFIX ".ProFile"); static const QLatin1String ExportedLocalDirsKey(PREFIX ".ExportedLocalDirs"); static const QLatin1String RemoteMountPointsKey(PREFIX ".RemoteMountPoints"); -static const QLatin1String UserDefinedMountPortsKey(PREFIX ".MountPorts"); -static const QLatin1String DeployMountPortKey(PREFIX ".DeployMountPort"); static const QLatin1String BaseEnvironmentBaseKey(PREFIX ".BaseEnvironmentBase"); static const QLatin1String UserEnvironmentChangesKey(PREFIX ".UserEnvironmentChanges"); static const QLatin1String UseRemoteGdbKey(PREFIX ".UseRemoteGdb"); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp index 36250176fdf..31c852bc1d4 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp @@ -83,7 +83,7 @@ RunControl *MaemoDebugSupport::createDebugRunControl(MaemoRunConfiguration *runC params.executable = runConfig->localExecutableFilePath(); params.debuggerCommand = runConfig->gdbCmd(); params.remoteChannel = devConf.server.host + QLatin1Char(':') - + gdbServerPort(runConfig, devConf); + + QString::number(gdbServerPort(runConfig)); params.remoteArchitecture = QLatin1String("arm"); } params.processArgs = runConfig->arguments(); @@ -231,7 +231,7 @@ void MaemoDebugSupport::startDebugging() const QString &remoteExe = m_runConfig->remoteExecutableFilePath(); m_runner->startExecution(QString::fromLocal8Bit("%1 gdbserver :%2 %3 %4") .arg(MaemoGlobal::remoteCommandPrefix(remoteExe)) - .arg(gdbServerPort(m_runConfig, m_deviceConfig)) + .arg(gdbServerPort(m_runConfig)) .arg(remoteExe).arg(m_runConfig->arguments() .join(QLatin1String(" "))).toUtf8()); } @@ -293,15 +293,9 @@ void MaemoDebugSupport::handleAdapterSetupDone() qobject_cast(m_gdbAdapter)->handleSetupDone(); } -QString MaemoDebugSupport::gdbServerPort(const MaemoRunConfiguration *rc, - const MaemoDeviceConfig &devConf) +int MaemoDebugSupport::gdbServerPort(const MaemoRunConfiguration *rc) { - // During configuration we don't know which port to use, so we display - // something in the config dialog, but we will make sure we use - // the right port from the information file. - return devConf.type == MaemoDeviceConfig::Physical - ? QString::number(devConf.debuggingPort) - : rc->runtimeGdbServerPort(); + return rc->freePorts().getNext(); } QString MaemoDebugSupport::uploadDir(const MaemoDeviceConfig &devConf) diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.h b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.h index 8607c18e481..4680487c799 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.h @@ -69,8 +69,6 @@ public: Debugger::DebuggerRunControl *runControl); ~MaemoDebugSupport(); - static QString gdbServerPort(const MaemoRunConfiguration *rc, - const MaemoDeviceConfig &devConf); static QString uploadDir(const MaemoDeviceConfig &devConf); private slots: @@ -87,6 +85,8 @@ private slots: void handleProgressReport(const QString &progressOutput); private: + static int gdbServerPort(const MaemoRunConfiguration *rc); + void stopSsh(); void handleAdapterSetupFailed(const QString &error); void handleAdapterSetupDone(); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp index 28cb880d8f2..f2c9581f268 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp @@ -99,7 +99,7 @@ void MaemoDeployStep::ctor() = qobject_cast(buildConfiguration()); const MaemoToolChain * const toolchain = dynamic_cast(buildConfig->toolChain()); - m_mounter = new MaemoRemoteMounter(this,toolchain); + m_mounter = new MaemoRemoteMounter(this, toolchain); connect(m_mounter, SIGNAL(mounted()), this, SLOT(handleMounted())); connect(m_mounter, SIGNAL(unmounted()), this, SLOT(handleUnmounted())); connect(m_mounter, SIGNAL(error(QString)), this, @@ -131,9 +131,6 @@ BuildStepConfigWidget *MaemoDeployStep::createConfigWidget() QVariantMap MaemoDeployStep::toMap() const { QVariantMap map(BuildStep::toMap()); -#ifdef DEPLOY_VIA_MOUNT - map.insert(DeployMountPortKey, m_mountPort); -#endif addDeployTimesToMap(map); map.unite(m_deviceConfigModel->toMap()); return map; @@ -162,9 +159,6 @@ bool MaemoDeployStep::fromMap(const QVariantMap &map) { if (!BuildStep::fromMap(map)) return false; -#ifdef DEPLOY_VIA_MOUNT - m_mountPort = map.value(DeployMountPortKey, DefaultMountPort).toInt(); -#endif getDeployTimesFromMap(map); m_deviceConfigModel->fromMap(map); return true; @@ -574,15 +568,16 @@ void MaemoDeployStep::handleUnmounted() } if (m_needsInstall || !m_filesToCopy.isEmpty()) { + m_mounter->setPortList(deviceConfig().freePorts()); if (m_needsInstall) { const QString localDir = QFileInfo(packagingStep()->packageFilePath()) .absolutePath(); const MaemoMountSpecification mountSpec(localDir, - deployMountPoint(), m_mountPort); - m_mounter->addMountSpecification(mountSpec, true); + deployMountPoint()); + if (!addMountSpecification(mountSpec)) + return; } else { #ifdef Q_OS_WIN - int port = m_mountPort; bool drivesToMount[26]; for (int i = 0; i < sizeof drivesToMount / drivesToMount[0]; ++i) drivesToMount[i] = false; @@ -602,13 +597,15 @@ void MaemoDeployStep::handleUnmounted() const QString mountPoint = deployMountPoint() + QLatin1Char('/') + QLatin1Char(driveLetter); const MaemoMountSpecification mountSpec(localDir.left(3), - mountPoint, port++); - m_mounter->addMountSpecification(mountSpec, true); + mountPoint); + if (!addMountSpecification(mountSpec)) + return; drivesToMount[index] = true; } #else - m_mounter->addMountSpecification(MaemoMountSpecification(QLatin1String("/"), - deployMountPoint(), m_mountPort), true); + if (!addMountSpecification(MaemoMountSpecification(QLatin1String("/"), + deployMountPoint()))) + return; #endif } m_mounter->mount(); @@ -660,6 +657,15 @@ void MaemoDeployStep::deployNextFile() copyProcess->start(); } +bool MaemoDeployStep::addMountSpecification(const MaemoMountSpecification &mountSpec) +{ + if (!m_mounter->addMountSpecification(mountSpec, true)) { + raiseError(tr("Device has not enough free ports for deployment.")); + return false; + } + return true; +} + void MaemoDeployStep::handleCopyProcessFinished(int exitStatus) { if (m_stopped) { diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.h index eaec0254084..d8bfd23f0a8 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.h @@ -32,6 +32,7 @@ #include "maemodeployable.h" #include "maemodeviceconfigurations.h" +#include "maemomountspecification.h" #include #include @@ -81,10 +82,6 @@ public: const MaemoDeployable &deployable) const; void setDeployed(const QString &host, const MaemoDeployable &deployable); MaemoDeployables *deployables() const { return m_deployables; } -#ifdef DEPLOY_VIA_MOUNT - int mountPort() const { return m_mountPort; } - void setMountPort(int port) { m_mountPort = port; } -#endif signals: void done(); @@ -131,6 +128,7 @@ private: #ifdef DEPLOY_VIA_MOUNT QString deployMountPoint() const; void deployNextFile(); + bool addMountSpecification(const MaemoMountSpecification &mountSpec); #else bool deploy(const MaemoDeployable &deployable); #endif @@ -150,7 +148,6 @@ private: MaemoRemoteMounter *m_mounter; QTimer *m_cleanupTimer; bool m_canStart; - int m_mountPort; #else QSharedPointer m_uploader; typedef QPair DeployInfo; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.cpp index 246222a5c7e..409116d28e5 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.cpp @@ -33,20 +33,13 @@ MaemoDeployStepWidget::~MaemoDeployStepWidget() void MaemoDeployStepWidget::init() { -#ifdef DEPLOY_VIA_MOUNT - ui->mountPortSpinBox->setValue(m_step->mountPort()); - connect(ui->mountPortSpinBox, SIGNAL(valueChanged(int)), this, - SLOT(handleMountPortEdited(int))); -#else - ui->mountPortLabel->hide(); - ui->mountPortSpinBox->hide(); -#endif handleDeviceConfigModelChanged(); connect(m_step->buildConfiguration()->target(), SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)), this, SLOT(handleDeviceConfigModelChanged())); connect(ui->deviceConfigComboBox, SIGNAL(activated(int)), this, SLOT(setCurrentDeviceConfig(int))); + handleDeviceConfigModelChanged(); } void MaemoDeployStepWidget::handleDeviceConfigModelChanged() @@ -98,14 +91,5 @@ void MaemoDeployStepWidget::setCurrentDeviceConfig(int index) m_step->deviceConfigModel()->setCurrentIndex(index); } -void MaemoDeployStepWidget::handleMountPortEdited(int newPort) -{ -#ifdef DEPLOY_VIA_MOUNT - m_step->setMountPort(newPort); -#else - Q_UNUSED(newPort); -#endif -} - } // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.h index fb32f0aa01e..d5eff9ee7ec 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.h @@ -26,7 +26,6 @@ private: Q_SLOT void handleModelsCreated(); Q_SLOT void handleDeviceConfigModelChanged(); Q_SLOT void setCurrentDeviceConfig(int index); - Q_SLOT void handleMountPortEdited(int newPort); virtual void init(); virtual QString summaryText() const; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.ui b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.ui index 6cc3697c6d9..ffeb6abf363 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.ui +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.ui @@ -6,8 +6,8 @@ 0 0 - 469 - 330 + 460 + 277 @@ -43,39 +43,8 @@ - - - - - - - Mount port: - - - - - - - - 65535 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfiglistmodel.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfiglistmodel.cpp index 69e6142cb68..7560f2bddfe 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfiglistmodel.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfiglistmodel.cpp @@ -42,9 +42,10 @@ namespace Internal { MaemoDeviceConfigListModel::MaemoDeviceConfigListModel(QObject *parent) : QAbstractListModel(parent), m_currentIndex(-1) { + setupList(); const MaemoDeviceConfigurations &devConfs = MaemoDeviceConfigurations::instance(); - if (devConfs.devConfigs().isEmpty()) + if (m_devConfigs.isEmpty()) setInvalid(); else setCurrentIndex(0); @@ -52,27 +53,35 @@ MaemoDeviceConfigListModel::MaemoDeviceConfigListModel(QObject *parent) SLOT(handleDeviceConfigListChange())); } +void MaemoDeviceConfigListModel::setupList() +{ + m_devConfigs.clear(); + const MaemoDeviceConfigurations &devConfs + = MaemoDeviceConfigurations::instance(); + foreach (const MaemoDeviceConfig &devConfig, devConfs.devConfigs()) { + if (devConfig.freePorts().hasMore()) + m_devConfigs << devConfig; + } +} + void MaemoDeviceConfigListModel::setCurrentIndex(int index) { if (index != m_currentIndex) { m_currentIndex = index; - m_currentId = MaemoDeviceConfigurations::instance().devConfigs() - .at(m_currentIndex).internalId; + m_currentId = m_devConfigs.at(m_currentIndex).internalId; emit currentChanged(); } } void MaemoDeviceConfigListModel::resetCurrentIndex() { - const QList &devConfigs - = MaemoDeviceConfigurations::instance().devConfigs(); - if (devConfigs.isEmpty()) { + if (m_devConfigs.isEmpty()) { setInvalid(); return; } - for (int i = 0; i < devConfigs.count(); ++i) { - if (devConfigs.at(i).internalId == m_currentId) { + for (int i = 0; i < m_devConfigs.count(); ++i) { + if (m_devConfigs.at(i).internalId == m_currentId) { setCurrentIndex(i); return; } @@ -110,6 +119,7 @@ void MaemoDeviceConfigListModel::fromMap(const QVariantMap &map) void MaemoDeviceConfigListModel::handleDeviceConfigListChange() { + setupList(); resetCurrentIndex(); reset(); emit currentChanged(); @@ -117,8 +127,7 @@ void MaemoDeviceConfigListModel::handleDeviceConfigListChange() int MaemoDeviceConfigListModel::rowCount(const QModelIndex &parent) const { - return parent.isValid() ? 0 - : MaemoDeviceConfigurations::instance().devConfigs().count(); + return parent.isValid() ? 0 : m_devConfigs.count(); } QVariant MaemoDeviceConfigListModel::data(const QModelIndex &index, int role) const @@ -126,7 +135,7 @@ QVariant MaemoDeviceConfigListModel::data(const QModelIndex &index, int role) co if (!index.isValid() || index.row() >= rowCount() || role != Qt::DisplayRole) return QVariant(); - return MaemoDeviceConfigurations::instance().devConfigs().at(index.row()).name; + return m_devConfigs.at(index.row()).name; } } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfiglistmodel.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfiglistmodel.h index b1afdc29ea7..b882c05b15b 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfiglistmodel.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfiglistmodel.h @@ -38,6 +38,7 @@ #include "maemodeviceconfigurations.h" #include +#include #include namespace Qt4ProjectManager { @@ -66,7 +67,9 @@ private: Q_SLOT void handleDeviceConfigListChange(); void resetCurrentIndex(); void setInvalid(); + void setupList(); + QList m_devConfigs; quint64 m_currentId; int m_currentIndex; }; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.cpp index 24857bd115a..aea2af9e00a 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.cpp @@ -56,7 +56,6 @@ namespace { const QLatin1String TypeKey("Type"); const QLatin1String HostKey("Host"); const QLatin1String SshPortKey("SshPort"); - const QLatin1String DebuggingPortKey("GdbServerPort"); const QLatin1String PortsSpecKey("FreePortsSpec"); const QLatin1String UserNameKey("Uname"); const QLatin1String AuthKey("Authentication"); @@ -177,7 +176,6 @@ private: MaemoDeviceConfig::MaemoDeviceConfig(const QString &name, MaemoDeviceConfig::DeviceType devType) : name(name), type(devType), - debuggingPort(defaultDebuggingPort(type)), portsSpec(defaultPortsSpec(type)), internalId(MaemoDeviceConfigurations::instance().m_nextId++) { @@ -193,7 +191,6 @@ MaemoDeviceConfig::MaemoDeviceConfig(const QSettings &settings, quint64 &nextId) : name(settings.value(NameKey).toString()), type(static_cast(settings.value(TypeKey, DefaultDeviceType).toInt())), - debuggingPort(settings.value(DebuggingPortKey, defaultDebuggingPort(type)).toInt()), portsSpec(settings.value(PortsSpecKey, defaultPortsSpec(type)).toString()), internalId(settings.value(InternalIdKey, nextId).toULongLong()) { @@ -228,11 +225,6 @@ int MaemoDeviceConfig::defaultSshPort(DeviceType type) const return type == Physical ? DefaultSshPortHW : DefaultSshPortSim; } -int MaemoDeviceConfig::defaultDebuggingPort(DeviceType type) const -{ - return type == Physical ? DefaultGdbServerPortHW : DefaultGdbServerPortSim; -} - QString MaemoDeviceConfig::defaultPortsSpec(DeviceType type) const { return QLatin1String(type == Physical ? "10000-10100" : "13219,14168"); @@ -259,7 +251,6 @@ void MaemoDeviceConfig::save(QSettings &settings) const settings.setValue(TypeKey, type); settings.setValue(HostKey, server.host); settings.setValue(SshPortKey, server.port); - settings.setValue(DebuggingPortKey, debuggingPort); settings.setValue(PortsSpecKey, portsSpec); settings.setValue(UserNameKey, server.uname); settings.setValue(AuthKey, server.authType); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h index 9b0d27c55ff..1426d16718d 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurations.h @@ -94,13 +94,11 @@ public: Core::SshConnectionParameters server; QString name; DeviceType type; - int debuggingPort; QString portsSpec; quint64 internalId; private: int defaultSshPort(DeviceType type) const; - int defaultDebuggingPort(DeviceType type) const; QString defaultPortsSpec(DeviceType type) const; QString defaultHost(DeviceType type) const; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomountspecification.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemomountspecification.cpp index 6ed38689e62..b4e6cdf2705 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemomountspecification.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemomountspecification.cpp @@ -35,8 +35,8 @@ namespace Internal { const QLatin1String MaemoMountSpecification::InvalidMountPoint("/"); MaemoMountSpecification::MaemoMountSpecification(const QString &localDir, - const QString &remoteDir, int remotePort) - : localDir(localDir), remoteMountPoint(remoteDir), remotePort(remotePort) + const QString &remoteDir) + : localDir(localDir), remoteMountPoint(remoteDir) { } diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomountspecification.h b/src/plugins/qt4projectmanager/qt-maemo/maemomountspecification.h index d1700eb9b77..69db09451e9 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemomountspecification.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemomountspecification.h @@ -36,16 +36,13 @@ namespace Qt4ProjectManager { namespace Internal { struct MaemoMountSpecification { - MaemoMountSpecification(const QString &localDir, const QString &remoteDir, - int remotePort); - + MaemoMountSpecification(const QString &localDir, const QString &remoteDir); bool isValid() const { return remoteMountPoint != InvalidMountPoint; } static const QLatin1String InvalidMountPoint; QString localDir; QString remoteMountPoint; - int remotePort; }; } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp index fe18b1b1b31..76386d3e9d5 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp @@ -590,7 +590,15 @@ bool MaemoQemuManager::fillRuntimeInformation(Runtime *runtime) const runtime->m_libPath = libPathSpec.mid(libPathSpec.indexOf(QLatin1Char('=')) + 1); runtime->m_sshPort = map.value(QLatin1String("sshport")); - runtime->m_gdbServerPort = map.value(QLatin1String("redirport2")); + runtime->m_freePorts = MaemoPortList(); + int i = 2; + while (true) { + const QString port = map.value(QLatin1String("redirport") + + QString::number(i++)); + if (port.isEmpty()) + break; + runtime->m_freePorts.addPort(port.toInt()); + } return true; } } diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.h b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.h index 85af6fe4c21..b4451eb937c 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.h @@ -31,6 +31,7 @@ #define QEMURUNTIMEMANAGER_H #include "maemoconstants.h" +#include "maemodeviceconfigurations.h" #include #include @@ -64,7 +65,7 @@ struct Runtime QString m_args; QString m_libPath; QString m_sshPort; - QString m_gdbServerPort; + MaemoPortList m_freePorts; }; class MaemoQemuManager : public QObject diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp index 02254dd2383..a36b4edd362 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp @@ -57,11 +57,16 @@ void MaemoRemoteMounter::setConnection(const Core::SshConnection::Ptr &connectio m_connection = connection; } -void MaemoRemoteMounter::addMountSpecification(const MaemoMountSpecification &mountSpec, +bool MaemoRemoteMounter::addMountSpecification(const MaemoMountSpecification &mountSpec, bool mountAsRoot) { - if (mountSpec.isValid()) - m_mountSpecs << MountInfo(mountSpec, mountAsRoot); + if (mountSpec.isValid()) { + if (!m_portList.hasMore()) + return false; + else + m_mountSpecs << MountInfo(mountSpec, m_portList.getNext(), mountAsRoot); + } + return true; } void MaemoRemoteMounter::mount() @@ -223,16 +228,17 @@ void MaemoRemoteMounter::startUtfsClients() const QLatin1String andOp(" && "); QString remoteCall = chmodFuse + andOp + chmodUtfsClient; for (int i = 0; i < m_mountSpecs.count(); ++i) { - const MaemoMountSpecification &mountSpec = m_mountSpecs.at(i).mountSpec; + const MountInfo &mountInfo = m_mountSpecs.at(i); + const MaemoMountSpecification &mountSpec = mountInfo.mountSpec; const QString mkdir = QString::fromLocal8Bit("%1 mkdir -p %2") .arg(MaemoGlobal::remoteSudo(), mountSpec.remoteMountPoint); const QString chmod = QString::fromLocal8Bit("%1 chmod a+r+w+x %2") .arg(MaemoGlobal::remoteSudo(), mountSpec.remoteMountPoint); QString utfsClient = QString::fromLocal8Bit("%1 --detach -l %2 -r %2 -b %2 %4") - .arg(utfsClientOnDevice()).arg(mountSpec.remotePort) + .arg(utfsClientOnDevice()).arg(mountInfo.remotePort) .arg(mountSpec.remoteMountPoint); - if (m_mountSpecs.at(i).mountAsRoot) + if (mountInfo.mountAsRoot) utfsClient.prepend(MaemoGlobal::remoteSudo() + QLatin1Char(' ')); remoteCall += andOp + mkdir + andOp + chmod + andOp + utfsClient; } @@ -269,9 +275,10 @@ void MaemoRemoteMounter::startUtfsServers() { emit reportProgress(tr("Starting UTFS servers...")); for (int i = 0; i < m_mountSpecs.count(); ++i) { - const MaemoMountSpecification &mountSpec = m_mountSpecs.at(i).mountSpec; + const MountInfo &mountInfo = m_mountSpecs.at(i); + const MaemoMountSpecification &mountSpec = mountInfo.mountSpec; const ProcPtr utfsServerProc(new QProcess); - const QString port = QString::number(mountSpec.remotePort); + const QString port = QString::number(mountInfo.remotePort); const QString localSecretOpt = QLatin1String("-l"); const QString remoteSecretOpt = QLatin1String("-r"); const QStringList utfsServerArgs = QStringList() diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h index ffdccc0bc93..d7540afe422 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h @@ -30,6 +30,7 @@ #ifndef MAEMOREMOTEMOUNTER_H #define MAEMOREMOTEMOUNTER_H +#include "maemodeviceconfigurations.h" #include "maemomountspecification.h" #include @@ -57,7 +58,8 @@ class MaemoRemoteMounter : public QObject public: MaemoRemoteMounter(QObject *parent, const MaemoToolChain *toolchain); ~MaemoRemoteMounter(); - void addMountSpecification(const MaemoMountSpecification &mountSpec, + void setPortList(const MaemoPortList &portList) { m_portList = portList; } + bool addMountSpecification(const MaemoMountSpecification &mountSpec, bool mountAsRoot); void mount(); void unmount(); @@ -91,9 +93,10 @@ private: const MaemoToolChain * const m_toolChain; struct MountInfo { - MountInfo(const MaemoMountSpecification &m, bool root) - : mountSpec(m), mountAsRoot(root) {} + MountInfo(const MaemoMountSpecification &m, int port, bool root) + : mountSpec(m), remotePort(port), mountAsRoot(root) {} MaemoMountSpecification mountSpec; + int remotePort; bool mountAsRoot; }; @@ -109,6 +112,7 @@ private: bool m_stop; QByteArray m_utfsClientStderr; QByteArray m_umountStderr; + MaemoPortList m_portList; }; } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.cpp index 340a51ab8e1..68b553abef5 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.cpp @@ -41,20 +41,9 @@ MaemoRemoteMountsModel::MaemoRemoteMountsModel(QObject *parent) : void MaemoRemoteMountsModel::addMountSpecification(const QString &localDir) { - int port = 10100; - int i = 0; - while (i < rowCount()) { - if (mountSpecificationAt(i).remotePort == port) { - ++port; - i = 0; - } else { - ++i; - } - } - beginInsertRows(QModelIndex(), rowCount(), rowCount()); m_mountSpecs << MaemoMountSpecification(localDir, - MaemoMountSpecification::InvalidMountPoint, port); + MaemoMountSpecification::InvalidMountPoint); endInsertRows(); } @@ -98,15 +87,12 @@ QVariantMap MaemoRemoteMountsModel::toMap() const QVariantMap map; QVariantList localDirsList; QVariantList remoteMountPointsList; - QVariantList mountPortsList; foreach (const MaemoMountSpecification &mountSpec, m_mountSpecs) { localDirsList << mountSpec.localDir; remoteMountPointsList << mountSpec.remoteMountPoint; - mountPortsList << mountSpec.remotePort; } map.insert(ExportedLocalDirsKey, localDirsList); map.insert(RemoteMountPointsKey, remoteMountPointsList); - map.insert(UserDefinedMountPortsKey, mountPortsList); return map; } @@ -116,22 +102,20 @@ void MaemoRemoteMountsModel::fromMap(const QVariantMap &map) = map.value(ExportedLocalDirsKey).toList(); const QVariantList &remoteMountPointsList = map.value(RemoteMountPointsKey).toList(); - const QVariantList &mountPortsList = map.value(UserDefinedMountPortsKey).toList(); - const int count = qMin(qMin(localDirsList.count(), - remoteMountPointsList.count()), mountPortsList.count()); + const int count + = qMin(localDirsList.count(), remoteMountPointsList.count()); for (int i = 0; i < count; ++i) { const QString &localDir = localDirsList.at(i).toString(); const QString &remoteMountPoint = remoteMountPointsList.at(i).toString(); - const int port = mountPortsList.at(i).toInt(); - m_mountSpecs << MaemoMountSpecification(localDir, remoteMountPoint, port); + m_mountSpecs << MaemoMountSpecification(localDir, remoteMountPoint); } } Qt::ItemFlags MaemoRemoteMountsModel::flags(const QModelIndex &index) const { Qt::ItemFlags ourFlags = QAbstractTableModel::flags(index); - if (index.column() == RemoteMountPointRow || index.column() == PortRow) + if (index.column() == RemoteMountPointRow) ourFlags |= Qt::ItemIsEditable; return ourFlags; } @@ -145,7 +129,6 @@ QVariant MaemoRemoteMountsModel::headerData(int section, switch (section) { case LocalDirRow: return tr("Local directory"); case RemoteMountPointRow: return tr("Remote mount point"); - case PortRow: return tr("Remote port"); default: return QVariant(); } } @@ -165,10 +148,6 @@ QVariant MaemoRemoteMountsModel::data(const QModelIndex &index, int role) const if (role == Qt::DisplayRole || role == Qt::EditRole) return mountSpec.remoteMountPoint; break; - case PortRow: - if (role == Qt::DisplayRole || role == Qt::EditRole) - return mountSpec.remotePort; - break; } return QVariant(); } @@ -193,16 +172,6 @@ bool MaemoRemoteMountsModel::setData(const QModelIndex &index, set = true; break; } - case PortRow: { - const int newPort = value.toInt(); - for (int i = 0; i < m_mountSpecs.count(); ++i) { - if (i != index.row() && m_mountSpecs.at(i).remotePort == newPort) - return false; - } - m_mountSpecs[index.row()].remotePort = newPort; - set = true; - break; - } case LocalDirRow: default: set = false; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.h b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.h index 04b4d7b1f3f..c16f72cc039 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.h @@ -59,7 +59,6 @@ public: static const int LocalDirRow = 0; static const int RemoteMountPointRow = 1; - static const int PortRow = 2; private: virtual int columnCount(const QModelIndex& = QModelIndex()) const; @@ -77,7 +76,7 @@ private: inline int MaemoRemoteMountsModel::columnCount(const QModelIndex &) const { - return 3; + return 2; } inline int MaemoRemoteMountsModel::rowCount(const QModelIndex &parent) const diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index 4a714c9ff61..db1b8625ccd 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -278,15 +278,17 @@ QString MaemoRunConfiguration::remoteExecutableFilePath() const ->remoteExecutableFilePath(localExecutableFilePath()); } -QString MaemoRunConfiguration::runtimeGdbServerPort() const +MaemoPortList MaemoRunConfiguration::freePorts() const { - if (Qt4BuildConfiguration *qt4bc = activeQt4BuildConfiguration()) { + const MaemoDeviceConfig &devConfig = deviceConfig(); + const Qt4BuildConfiguration * const qt4bc = activeQt4BuildConfiguration(); + if (devConfig.type == MaemoDeviceConfig::Simulator && qt4bc) { Runtime rt; const int id = qt4bc->qtVersion()->uniqueId(); if (MaemoQemuManager::instance().runtimeForQtVersion(id, &rt)) - return rt.m_gdbServerPort; + return rt.m_freePorts; } - return QLatin1String("13219"); + return devConfig.freePorts(); } void MaemoRunConfiguration::setArguments(const QStringList &args) diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h index 138965e7475..bdac522f10d 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h @@ -93,9 +93,10 @@ public: void setArguments(const QStringList &args); MaemoDeviceConfig deviceConfig() const; MaemoDeviceConfigListModel *deviceConfigModel() const; - QString runtimeGdbServerPort() const; + MaemoPortList freePorts() const; bool useRemoteGdb() const { return m_useRemoteGdb; } void setUseRemoteGdb(bool useRemoteGdb) { m_useRemoteGdb = useRemoteGdb; } + void updateFactoryState() { emit isEnabledChanged(true); } const QString gdbCmd() const; const QString dumperLib() const; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp index ecd1ef697a1..1db88162562 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp @@ -78,6 +78,9 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget( addDebuggingWidgets(mainLayout); addMountWidgets(mainLayout); addEnvironmentWidgets(mainLayout); + connect(m_runConfiguration->deviceConfigModel(), SIGNAL(currentChanged()), + this, SLOT(handleCurrentDeviceConfigChanged())); + handleCurrentDeviceConfigChanged(); } void MaemoRunConfigurationWidget::addGenericWidgets(QVBoxLayout *mainLayout) @@ -124,13 +127,10 @@ void MaemoRunConfigurationWidget::addGenericWidgets(QVBoxLayout *mainLayout) SLOT(argumentsEdited(QString))); connect(m_devConfBox, SIGNAL(activated(int)), this, SLOT(setCurrentDeviceConfig(int))); - connect(m_runConfiguration->deviceConfigModel(), SIGNAL(currentChanged()), - this, SLOT(handleCurrentDeviceConfigChanged())); connect(m_runConfiguration, SIGNAL(targetInformationChanged()), this, SLOT(updateTargetInformation())); connect(m_runConfiguration->deployStep()->deployables(), SIGNAL(modelsCreated()), this, SLOT(handleDeploySpecsChanged())); - handleCurrentDeviceConfigChanged(); } void MaemoRunConfigurationWidget::addDebuggingWidgets(QVBoxLayout *mainLayout) @@ -162,6 +162,8 @@ void MaemoRunConfigurationWidget::addMountWidgets(QVBoxLayout *mainLayout) m_mountDetailsContainer->setWidget(mountViewWidget); mainLayout->addWidget(m_mountDetailsContainer); QVBoxLayout *mountViewLayout = new QVBoxLayout(mountViewWidget); + m_mountWarningLabel = new QLabel; + mountViewLayout->addWidget(m_mountWarningLabel); QHBoxLayout *tableLayout = new QHBoxLayout; mountViewLayout->addLayout(tableLayout); m_mountView = new QTableView; @@ -278,6 +280,7 @@ void MaemoRunConfigurationWidget::handleCurrentDeviceConfigChanged() { m_devConfBox->setCurrentIndex(m_runConfiguration->deviceConfigModel() ->currentIndex()); + updateMountWarning(); } void MaemoRunConfigurationWidget::setCurrentDeviceConfig(int index) @@ -407,6 +410,38 @@ void MaemoRunConfigurationWidget::handleRemoteMountsChanged() } m_mountDetailsContainer->setSummaryText(QLatin1String("") + text + QLatin1String("")); + updateMountWarning(); +} + +void MaemoRunConfigurationWidget::updateMountWarning() +{ + QString mountWarning; + const MaemoPortList &portList = m_runConfiguration->freePorts(); + if (portList.hasMore()) { + const int availablePortCount = portList.count(); + const int mountDirCount + = m_runConfiguration->remoteMounts()->validMountSpecificationCount(); + if (mountDirCount > availablePortCount) { + mountWarning = tr("WARNING: You want to mount %1 directories, but " + "your device has only %2 free ports.
You will not be able " + "to run this configuration.") + .arg(mountDirCount).arg(availablePortCount); + } else if (mountDirCount > 0 && mountDirCount == availablePortCount) { + mountWarning = tr("WARNING: The directories you want to mount will " + "use all %1 free ports on the device.
You will not be able " + "to debug your application with this configuration.") + .arg(availablePortCount); + } + } + if (mountWarning.isEmpty()) { + m_mountWarningLabel->hide(); + } else { + m_mountWarningLabel->setText(QLatin1String("") + + mountWarning + QLatin1String("")); + m_mountWarningLabel->show(); + m_mountDetailsContainer->setState(Utils::DetailsWidget::Expanded); + } + m_runConfiguration->updateFactoryState(); } } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h index 4ffb63451f0..b693c074d41 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h @@ -95,12 +95,14 @@ private: void addDebuggingWidgets(QVBoxLayout *mainLayout); void addMountWidgets(QVBoxLayout *mainLayout); void addEnvironmentWidgets(QVBoxLayout *mainLayout); + void updateMountWarning(); QLineEdit *m_configNameLineEdit; QLineEdit *m_argsLineEdit; QLabel *m_localExecutableLabel; QLabel *m_remoteExecutableLabel; QComboBox *m_devConfBox; + QLabel *m_mountWarningLabel; QTableView *m_mountView; QToolButton *m_removeMountButton; Utils::DetailsWidget *m_mountDetailsContainer; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp index b527557290f..20a4c85a393 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp @@ -36,6 +36,7 @@ #include "maemoconstants.h" #include "maemodebugsupport.h" +#include "maemoremotemountsmodel.h" #include "maemorunconfiguration.h" #include "maemoruncontrol.h" @@ -158,9 +159,20 @@ MaemoRunControlFactory::~MaemoRunControlFactory() bool MaemoRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const { - return qobject_cast(runConfiguration) - && (mode == ProjectExplorer::Constants::RUNMODE - || mode == ProjectExplorer::Constants::DEBUGMODE); + const MaemoRunConfiguration * const maemoRunConfig + = qobject_cast(runConfiguration); + if (!maemoRunConfig || !maemoRunConfig->deviceConfig().isValid()) + return false; + const int freePortCount = maemoRunConfig->freePorts().count(); + if (freePortCount == 0) + return false; + const int mountDirCount + = maemoRunConfig->remoteMounts()->validMountSpecificationCount(); + if (mode == ProjectExplorer::Constants::DEBUGMODE) + return freePortCount > mountDirCount; + if (mode == ProjectExplorer::Constants::RUNMODE) + return freePortCount >= mountDirCount; + return false; } RunControl* MaemoRunControlFactory::create(RunConfiguration *runConfig, diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.cpp index 85e78d1cacf..ba2fa97eb6f 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.cpp @@ -117,7 +117,6 @@ QString MaemoSettingsWidget::searchKeywords() const { QString rc; QTextStream(&rc) << m_ui->configurationLabel->text() - << ' ' << m_ui->debuggingPortLabel->text() << ' ' << m_ui->sshPortLabel->text() << ' ' << m_ui->keyButton->text() << ' ' << m_ui->passwordButton->text() @@ -131,7 +130,8 @@ QString MaemoSettingsWidget::searchKeywords() const << ' ' << m_ui->keyLabel->text() << ' ' << m_ui->nameLineEdit->text() << ' ' << m_ui->passwordLabel->text() - << ' ' << m_ui->portsLabel->text() + << ' ' << m_ui->freePortsLabel->text() + << ' ' << m_ui->portsWarningLabel->text() << ' ' << m_ui->pwdLineEdit->text() << ' ' << m_ui->timeoutSpinBox->value() << ' ' << m_ui->userLineEdit->text() @@ -148,11 +148,6 @@ void MaemoSettingsWidget::initGui() QRegExpValidator * const portsValidator = new QRegExpValidator(QRegExp(MaemoDeviceConfig::portsRegExpr()), this); m_ui->portsLineEdit->setValidator(portsValidator); -#if 1 - m_ui->freePortsLabel->hide(); - m_ui->portsLineEdit->hide(); -#endif - foreach (const MaemoDeviceConfig &devConf, m_devConfs) m_ui->configurationComboBox->addItem(devConf.name); connect(m_ui->configurationComboBox, SIGNAL(currentIndexChanged(int)), @@ -223,19 +218,17 @@ void MaemoSettingsWidget::fillInValues() m_ui->nameLineEdit->setText(currentConfig().name); m_ui->hostLineEdit->setText(currentConfig().server.host); m_ui->sshPortSpinBox->setValue(currentConfig().server.port); - m_ui->gdbServerPortSpinBox->setValue(currentConfig().debuggingPort); m_ui->portsLineEdit->setText(currentConfig().portsSpec); m_ui->timeoutSpinBox->setValue(currentConfig().server.timeout); m_ui->userLineEdit->setText(currentConfig().server.uname); m_ui->pwdLineEdit->setText(currentConfig().server.pwd); m_ui->keyFileLineEdit->setPath(currentConfig().server.privateKeyFile); m_ui->showPasswordCheckBox->setChecked(false); - + updatePortsWarningLabel(); const bool isSimulator = currentConfig().type == MaemoDeviceConfig::Simulator; m_ui->hostLineEdit->setReadOnly(isSimulator); m_ui->sshPortSpinBox->setReadOnly(isSimulator); - m_ui->gdbServerPortSpinBox->setReadOnly(isSimulator); } void MaemoSettingsWidget::saveSettings() @@ -305,14 +298,10 @@ void MaemoSettingsWidget::sshPortEditingFinished() currentConfig().server.port = m_ui->sshPortSpinBox->value(); } -void MaemoSettingsWidget::gdbServerPortEditingFinished() -{ - currentConfig().debuggingPort = m_ui->gdbServerPortSpinBox->value(); -} - void MaemoSettingsWidget::handleFreePortsChanged() { currentConfig().portsSpec = m_ui->portsLineEdit->text(); + updatePortsWarningLabel(); } void MaemoSettingsWidget::timeoutEditingFinished() @@ -479,10 +468,21 @@ void MaemoSettingsWidget::clearDetails() { m_ui->hostLineEdit->clear(); m_ui->sshPortSpinBox->clear(); - m_ui->gdbServerPortSpinBox->clear(); m_ui->timeoutSpinBox->clear(); m_ui->userLineEdit->clear(); m_ui->pwdLineEdit->clear(); + m_ui->portsLineEdit->clear(); + m_ui->portsWarningLabel->clear(); +} + +void MaemoSettingsWidget::updatePortsWarningLabel() +{ + if (currentConfig().freePorts().hasMore()) { + m_ui->portsWarningLabel->clear(); + } else { + m_ui->portsWarningLabel->setText(QLatin1String("") + + tr("You'll need at least one port!") + QLatin1String("")); + } } } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.h b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.h index d6f9f8aad08..ae9048c0424 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.h @@ -78,7 +78,6 @@ private slots: void authenticationTypeChanged(); void hostNameEditingFinished(); void sshPortEditingFinished(); - void gdbServerPortEditingFinished(); void timeoutEditingFinished(); void userNameEditingFinished(); void passwordEditingFinished(); @@ -106,6 +105,7 @@ private: void clearDetails(); QString parseTestOutput(); void fillInValues(); + void updatePortsWarningLabel(); Ui_MaemoSettingsWidget *m_ui; QList m_devConfs; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.ui b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.ui index a1c6ca7bd51..b2f03d3e763 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.ui +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.ui @@ -64,6 +64,9 @@
+ + QFormLayout::AllNonFixedFieldsGrow + @@ -149,27 +152,14 @@ - + - Ports: + SSH port: - - - - - 0 - 0 - - - - SSH: - - - @@ -184,27 +174,17 @@ - - - - 0 - 0 - + + + Qt::Horizontal - - Debugging: + + + 40 + 20 + - - - - - - 65535 - - - 10000 - - + @@ -224,6 +204,13 @@ + + + + TextLabel + + + @@ -684,38 +671,6 @@ - - gdbServerPortSpinBox - editingFinished() - MaemoSettingsWidget - gdbServerPortEditingFinished() - - - 375 - 190 - - - 593 - 184 - - - - - gdbServerPortSpinBox - valueChanged(int) - MaemoSettingsWidget - gdbServerPortEditingFinished() - - - 395 - 197 - - - 590 - 251 - - - sshPortSpinBox editingFinished() @@ -739,8 +694,8 @@ sshPortEditingFinished() - 243 - 197 + 230 + 204 3 diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp index ea9f2c10a46..91d361df105 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp @@ -194,16 +194,21 @@ void MaemoSshRunner::handleUnmounted() if (m_stop) return; + MaemoPortList portList = m_devConfig.freePorts(); + if (m_debugging && !m_runConfig->useRemoteGdb()) + portList.getNext(); // One has already been used for gdbserver. + m_mounter->setPortList(portList); const MaemoRemoteMountsModel * const remoteMounts = m_runConfig->remoteMounts(); - for (int i = 0; i < remoteMounts->mountSpecificationCount(); ++i) - m_mounter->addMountSpecification(remoteMounts->mountSpecificationAt(i), - false); + for (int i = 0; i < remoteMounts->mountSpecificationCount(); ++i) { + if (!addMountSpecification(remoteMounts->mountSpecificationAt(i))) + return; + } if (m_debugging && m_runConfig->useRemoteGdb()) { - m_mounter->addMountSpecification(MaemoMountSpecification( + if (!addMountSpecification(MaemoMountSpecification( m_runConfig->localDirToMountForRemoteGdb(), - MaemoGlobal::remoteProjectSourcesMountPoint(), - m_devConfig.debuggingPort), false); + MaemoGlobal::remoteProjectSourcesMountPoint()))) + return; } m_mounter->mount(); } @@ -250,6 +255,16 @@ void MaemoSshRunner::handleRemoteProcessFinished(int exitStatus) cleanup(false); } +bool MaemoSshRunner::addMountSpecification(const MaemoMountSpecification &mountSpec) +{ + if (!m_mounter->addMountSpecification(mountSpec, false)) { + emit error(tr("The device does not have enough free ports " + "for this run configuration.")); + return false; + } + return true; +} + } // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h index e12f72192b9..e84a1cb0142 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h @@ -36,6 +36,7 @@ #define MAEMOSSHRUNNER_H #include "maemodeviceconfigurations.h" +#include "maemomountspecification.h" #include #include @@ -88,6 +89,7 @@ private slots: private: void cleanup(bool initialCleanup); + bool addMountSpecification(const MaemoMountSpecification &mountSpec); MaemoRunConfiguration * const m_runConfig; // TODO this pointer can be invalid MaemoRemoteMounter * const m_mounter;