diff options
author | Aurindam Jana <aurindam.jana@digia.com> | 2013-03-20 13:00:10 +0100 |
---|---|---|
committer | Aurindam Jana <aurindam.jana@digia.com> | 2013-04-05 11:47:26 +0200 |
commit | f8bc2cbae550a18d4a36e7603b480f7668a53f30 (patch) | |
tree | 958968ea9fad435f3a157cc85d771a00d5c7b8cb /src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp | |
parent | ca5ebc33fa4ae5e380e5a0ea62605ab570cedb68 (diff) | |
download | qt-creator-f8bc2cbae550a18d4a36e7603b480f7668a53f30.tar.gz |
DeviceManager: Allow user to configure desktop device
Show desktop device in the Devices options page. Allow
user to configure the port range for the desktop. These
ports can then be used by others such as QML Debugger.
Change-Id: I8c4a96207e54f58d1e9bc18c417cb378dc9f70c2
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Diffstat (limited to 'src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp')
-rw-r--r-- | src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp index 7ae086727f..8612ab28ae 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp @@ -33,9 +33,12 @@ #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/target.h> #include <projectexplorer/kit.h> +#include <projectexplorer/kitinformation.h> #include <projectexplorer/project.h> #include <projectexplorer/projectexplorer.h> #include <utils/qtcassert.h> +#include <utils/qtcprocess.h> +#include <utils/tcpportsgatherer.h> #include <debugger/debuggerrunner.h> #include <debugger/debuggerplugin.h> @@ -199,26 +202,43 @@ RunControl *QmlProjectRunControlFactory::createDebugRunControl(QmlProjectRunConf Debugger::DebuggerStartParameters params; params.startMode = Debugger::StartInternal; params.executable = runConfig->observerPath(); - params.qmlServerAddress = QLatin1String("127.0.0.1"); - params.qmlServerPort = runConfig->debuggerAspect()->qmlDebugServerPort(); - params.processArgs = QString::fromLatin1("-qmljsdebugger=port:%1,block").arg(params.qmlServerPort); - params.processArgs += QLatin1Char(' ') + runConfig->viewerArguments(); + params.processArgs = runConfig->viewerArguments(); params.workingDirectory = runConfig->workingDirectory(); params.environment = runConfig->environment(); params.displayName = runConfig->displayName(); params.projectSourceDirectory = runConfig->target()->project()->projectDirectory(); params.projectSourceFiles = runConfig->target()->project()->files(Project::ExcludeGeneratedFiles); - if (runConfig->debuggerAspect()->useQmlDebugger()) + if (runConfig->debuggerAspect()->useQmlDebugger()) { + const ProjectExplorer::IDevice::ConstPtr device = + DeviceKitInformation::device(runConfig->target()->kit()); + params.qmlServerAddress = QLatin1String("127.0.0.1"); + QTC_ASSERT(device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE, return 0); + Utils::TcpPortsGatherer portsGatherer; + portsGatherer.update(QAbstractSocket::UnknownNetworkLayerProtocol); + Utils::PortList portList = device->freePorts(); + int freePort = portsGatherer.getNextFreePort(&portList); + if (freePort == -1) { + if (errorMessage) + *errorMessage = tr("Not enough free ports for QML debugging. Increase the " + "port range for Desktop device in Device settings."); + return 0; + } + params.qmlServerPort = freePort; params.languages |= Debugger::QmlLanguage; + + // Makes sure that all bindings go through the JavaScript engine, so that + // breakpoints are actually hit! + const QString optimizerKey = QLatin1String("QML_DISABLE_OPTIMIZER"); + if (!params.environment.hasKey(optimizerKey)) + params.environment.set(optimizerKey, QLatin1String("1")); + + Utils::QtcProcess::addArg(¶ms.processArgs, + QString::fromLatin1("-qmljsdebugger=port:%1,block").arg( + params.qmlServerPort)); + } if (runConfig->debuggerAspect()->useCppDebugger()) params.languages |= Debugger::CppLanguage; - // Makes sure that all bindings go through the JavaScript engine, so that - // breakpoints are actually hit! - const QString optimizerKey = QLatin1String("QML_DISABLE_OPTIMIZER"); - if (!params.environment.hasKey(optimizerKey)) - params.environment.set(optimizerKey, QLatin1String("1")); - if (params.executable.isEmpty()) { QmlProjectPlugin::showQmlObserverToolWarning(); errorMessage->clear(); // hack, we already showed a error message |