diff options
author | Fawzi Mohamed <fawzi.mohamed@digia.com> | 2014-03-28 19:05:35 +0100 |
---|---|---|
committer | Fawzi Mohamed <fawzi.mohamed@digia.com> | 2014-03-31 14:19:20 +0200 |
commit | 88f85896f130e0d2e54d758047cb69fb5805b299 (patch) | |
tree | 794d0c2872b6d26844ac6e323b2fa13003e0a740 | |
parent | b0f5fbc866e73dfcb4234e8943f48a7b9be5e515 (diff) |
ios: make device simulated configurable in runconfiguration
Change-Id: I54bcbd7f2142ab95618005f1f108a122bfe18d32
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
-rw-r--r-- | src/plugins/ios/iosconstants.h | 19 | ||||
-rw-r--r-- | src/plugins/ios/iosdeploystep.cpp | 2 | ||||
-rw-r--r-- | src/plugins/ios/iosdevice.cpp | 2 | ||||
-rw-r--r-- | src/plugins/ios/iosrunconfiguration.cpp | 51 | ||||
-rw-r--r-- | src/plugins/ios/iosrunconfiguration.h | 13 | ||||
-rw-r--r-- | src/plugins/ios/iosrunconfiguration.ui | 41 | ||||
-rw-r--r-- | src/plugins/ios/iosrunner.cpp | 6 | ||||
-rw-r--r-- | src/plugins/ios/iosrunner.h | 7 | ||||
-rw-r--r-- | src/plugins/ios/iostoolhandler.cpp | 31 | ||||
-rw-r--r-- | src/plugins/ios/iostoolhandler.h | 12 |
10 files changed, 137 insertions, 47 deletions
diff --git a/src/plugins/ios/iosconstants.h b/src/plugins/ios/iosconstants.h index 25513d932e..e8a073e232 100644 --- a/src/plugins/ios/iosconstants.h +++ b/src/plugins/ios/iosconstants.h @@ -34,16 +34,19 @@ namespace Ios { namespace Internal { -enum IosQemuStatus { - IosQemuStarting, - IosQemuFailedToStart, - IosQemuFinished, - IosQemuCrashed, - IosQemuUserReason -}; - } // namespace Internal +namespace IosDeviceType { +enum Enum { + IosDevice, + SimulatedIphone, + SimulatedIpad, + SimulatedIphoneRetina4Inch, + SimulatedIphoneRetina3_5Inch, + SimulatedIpadRetina +}; +} + namespace Constants { const char IOS_SETTINGS_ID[] = "ZZ.Ios Configurations"; const char IOS_SETTINGS_CATEGORY[] = "XA.Ios"; diff --git a/src/plugins/ios/iosdeploystep.cpp b/src/plugins/ios/iosdeploystep.cpp index 2fb22655b6..b0ef976d06 100644 --- a/src/plugins/ios/iosdeploystep.cpp +++ b/src/plugins/ios/iosdeploystep.cpp @@ -113,7 +113,7 @@ void IosDeployStep::run(QFutureInterface<bool> &fi) } m_transferStatus = TransferInProgress; QTC_CHECK(m_toolHandler == 0); - m_toolHandler = new IosToolHandler(IosToolHandler::IosDeviceType, this); + m_toolHandler = new IosToolHandler(IosDeviceType::IosDevice, this); m_futureInterface.setProgressRange(0, 200); m_futureInterface.setProgressValueAndText(0, QLatin1String("Transferring application")); m_futureInterface.reportStarted(); diff --git a/src/plugins/ios/iosdevice.cpp b/src/plugins/ios/iosdevice.cpp index ce54715970..b8fa1de7fe 100644 --- a/src/plugins/ios/iosdevice.cpp +++ b/src/plugins/ios/iosdevice.cpp @@ -292,7 +292,7 @@ void IosDeviceManager::deviceDisconnected(const QString &uid) void IosDeviceManager::updateInfo(const QString &devId) { - IosToolHandler *requester = new IosToolHandler(IosToolHandler::IosDeviceType, this); + IosToolHandler *requester = new IosToolHandler(IosDeviceType::IosDevice, this); connect(requester, SIGNAL(deviceInfo(Ios::IosToolHandler*,QString,Ios::IosToolHandler::Dict)), SLOT(deviceInfo(Ios::IosToolHandler*,QString,Ios::IosToolHandler::Dict)), Qt::QueuedConnection); connect(requester, SIGNAL(finished(Ios::IosToolHandler*)), diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp index 798e559106..e16242ad5f 100644 --- a/src/plugins/ios/iosrunconfiguration.cpp +++ b/src/plugins/ios/iosrunconfiguration.cpp @@ -56,7 +56,8 @@ using namespace Utils; namespace Ios { namespace Internal { -const QLatin1String runConfigurationKey("Ios.run_arguments"); +static const QLatin1String runConfigurationKey("Ios.run_arguments"); +static const QLatin1String deviceTypeKey("Ios.device_type"); class IosRunConfigurationWidget : public RunConfigWidget { @@ -72,7 +73,7 @@ public: private slots: void argumentsLineEditTextEdited(); void updateValues(); - + void setDeviceTypeIndex(int devIndex); private: Ui::IosRunConfiguration *m_ui; IosRunConfiguration *m_runConfiguration; @@ -100,6 +101,10 @@ void IosRunConfiguration::init() m_parseInProgress = project->parseInProgress(m_profilePath); m_lastIsEnabled = isEnabled(); m_lastDisabledReason = disabledReason(); + if (DeviceTypeKitInformation::deviceTypeId(target()->kit()) == Constants::IOS_DEVICE_TYPE) + m_deviceType = IosDeviceType::IosDevice; + else + m_deviceType = IosDeviceType::SimulatedIphoneRetina4Inch; updateDisplayNames(); connect(DeviceManager::instance(), SIGNAL(updated()), SLOT(deviceChanges())); @@ -255,6 +260,15 @@ Utils::FileName IosRunConfiguration::exePath() const bool IosRunConfiguration::fromMap(const QVariantMap &map) { m_arguments = map.value(runConfigurationKey).toStringList(); + IosDeviceType::Enum deviceType = static_cast<IosDeviceType::Enum>(map.value(deviceTypeKey) + .toInt()); + bool valid = false; + for (int i = 0 ; i < nSimulatedDevices; ++i) + if (simulatedDevices[i] == m_deviceType) + valid = true; + if (valid) + m_deviceType = deviceType; + return RunConfiguration::fromMap(map); } @@ -262,6 +276,7 @@ QVariantMap IosRunConfiguration::toMap() const { QVariantMap res = RunConfiguration::toMap(); res[runConfigurationKey] = m_arguments; + res[deviceTypeKey] = m_deviceType; return res; } @@ -335,12 +350,28 @@ QString IosRunConfiguration::disabledReason() const return RunConfiguration::disabledReason(); } +IosDeviceType::Enum IosRunConfiguration::deviceType() const +{ + return m_deviceType; +} + +void IosRunConfiguration::setDeviceType(IosDeviceType::Enum deviceType) +{ + m_deviceType = deviceType; +} + IosRunConfigurationWidget::IosRunConfigurationWidget(IosRunConfiguration *runConfiguration) : m_ui(new Ui::IosRunConfiguration), m_runConfiguration(runConfiguration) { m_ui->setupUi(this); + if (m_runConfiguration->deviceType() == IosDeviceType::IosDevice) { + m_ui->deviceTypeLabel->setVisible(false); + m_ui->deviceTypeComboBox->setVisible(false); + } updateValues(); + connect(m_ui->deviceTypeComboBox, SIGNAL(currentIndexChanged(int)), + SLOT(setDeviceTypeIndex(int))); connect(m_ui->argumentsLineEdit, SIGNAL(editingFinished()), SLOT(argumentsLineEditTextEdited())); connect(runConfiguration->target(), SIGNAL(buildDirectoryChanged()), @@ -399,10 +430,24 @@ void IosRunConfigurationWidget::argumentsLineEditTextEdited() m_ui->argumentsLineEdit->setText(argListToString(args)); } +void IosRunConfigurationWidget::setDeviceTypeIndex(int devIndex) +{ + if (devIndex >= 0 && devIndex < nSimulatedDevices) + m_runConfiguration->setDeviceType(simulatedDevices[devIndex]); + else + m_runConfiguration->setDeviceType(IosDeviceType::SimulatedIphoneRetina4Inch); +} + + void IosRunConfigurationWidget::updateValues() { - QStringList args = m_runConfiguration->m_arguments; + QStringList args = m_runConfiguration->commandLineArguments(); QString argsString = argListToString(args); + + if (m_runConfiguration->deviceType() == IosDeviceType::IosDevice) + for (int i = 0; i < nSimulatedDevices; ++i) + if (simulatedDevices[i] == m_runConfiguration->deviceType()) + m_ui->deviceTypeComboBox->setCurrentIndex(i); m_ui->argumentsLineEdit->setText(argsString); m_ui->executableLineEdit->setText(m_runConfiguration->exePath().toUserOutput()); } diff --git a/src/plugins/ios/iosrunconfiguration.h b/src/plugins/ios/iosrunconfiguration.h index 73fbe80a15..e7956d36a6 100644 --- a/src/plugins/ios/iosrunconfiguration.h +++ b/src/plugins/ios/iosrunconfiguration.h @@ -43,6 +43,16 @@ class QmakeProFileNode; namespace Ios { namespace Internal { +enum { nSimulatedDevices = 4 }; +static const IosDeviceType::Enum simulatedDevices[nSimulatedDevices] = { + // skip iPhone as it does not support iOS7 + // TODO: clean solution would be to check also sdk version or make it configurable + IosDeviceType::SimulatedIphoneRetina3_5Inch, + IosDeviceType::SimulatedIphoneRetina4Inch, + IosDeviceType::SimulatedIpad, + IosDeviceType::SimulatedIpadRetina +}; + class IosDeployStep; class IosRunConfigurationFactory; class IosRunConfigurationWidget; @@ -66,6 +76,8 @@ public: Utils::FileName exePath() const; bool isEnabled() const; QString disabledReason() const; + IosDeviceType::Enum deviceType() const; + void setDeviceType(IosDeviceType::Enum deviceType); bool fromMap(const QVariantMap &map) QTC_OVERRIDE; QVariantMap toMap() const QTC_OVERRIDE; @@ -88,6 +100,7 @@ private: bool m_lastIsEnabled; bool m_parseInProgress; bool m_parseSuccess; + IosDeviceType::Enum m_deviceType; }; } // namespace Internal diff --git a/src/plugins/ios/iosrunconfiguration.ui b/src/plugins/ios/iosrunconfiguration.ui index fd9cfd341a..24ee510a51 100644 --- a/src/plugins/ios/iosrunconfiguration.ui +++ b/src/plugins/ios/iosrunconfiguration.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>571</width> - <height>76</height> + <height>106</height> </rect> </property> <property name="sizePolicy"> @@ -23,6 +23,13 @@ <item row="1" column="1"> <widget class="QLineEdit" name="argumentsLineEdit"/> </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="executableLineEdit"> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> <item row="1" column="0"> <widget class="QLabel" name="argumentsLabel"> <property name="text"> @@ -37,10 +44,34 @@ </property> </widget> </item> - <item row="0" column="1"> - <widget class="QLineEdit" name="executableLineEdit"> - <property name="readOnly"> - <bool>true</bool> + <item row="2" column="1"> + <widget class="QComboBox" name="deviceTypeComboBox"> + <item> + <property name="text"> + <string>iPhone 3.5-inch Retina display</string> + </property> + </item> + <item> + <property name="text"> + <string>iPhone 4-inch Retina display</string> + </property> + </item> + <item> + <property name="text"> + <string>iPad</string> + </property> + </item> + <item> + <property name="text"> + <string>iPad Retina display</string> + </property> + </item> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="deviceTypeLabel"> + <property name="text"> + <string>Device Type:</string> </property> </widget> </item> diff --git a/src/plugins/ios/iosrunner.cpp b/src/plugins/ios/iosrunner.cpp index bf60662b63..f106df0722 100644 --- a/src/plugins/ios/iosrunner.cpp +++ b/src/plugins/ios/iosrunner.cpp @@ -34,6 +34,7 @@ #include "iosrunconfiguration.h" #include "iosrunner.h" #include "iossimulator.h" +#include "iosconstants.h" #include <projectexplorer/devicesupport/deviceapplicationrunner.h> #include <projectexplorer/kitinformation.h> @@ -61,6 +62,7 @@ IosRunner::IosRunner(QObject *parent, IosRunConfiguration *runConfig, bool cppDe m_cppDebug(cppDebug), m_qmlDebug(qmlDebug), m_cleanExit(false), m_qmlPort(0), m_pid(0) { + m_deviceType = runConfig->deviceType(); } IosRunner::~IosRunner() @@ -121,7 +123,6 @@ void IosRunner::start() emit finished(m_cleanExit); return; } - IosToolHandler::DeviceType devType = IosToolHandler::IosDeviceType; if (m_device->type() == Ios::Constants::IOS_DEVICE_TYPE) { IosDevice::ConstPtr iosDevice = m_device.dynamicCast<const IosDevice>(); if (m_device.isNull()) { @@ -136,12 +137,11 @@ void IosRunner::start() emit finished(m_cleanExit); return; } - devType = IosToolHandler::IosSimulatedIphoneRetina4InchType; // store type in sim? if (m_qmlDebug) m_qmlPort = sim->nextPort(); } - m_toolHandler = new IosToolHandler(devType, this); + m_toolHandler = new IosToolHandler(m_deviceType, this); connect(m_toolHandler, SIGNAL(appOutput(Ios::IosToolHandler*,QString)), SLOT(handleAppOutput(Ios::IosToolHandler*,QString))); connect(m_toolHandler, diff --git a/src/plugins/ios/iosrunner.h b/src/plugins/ios/iosrunner.h index 21b1f9a794..7ce764cfb4 100644 --- a/src/plugins/ios/iosrunner.h +++ b/src/plugins/ios/iosrunner.h @@ -30,14 +30,16 @@ #define IOSRUNNER_H #include "iosconfigurations.h" +#include "iostoolhandler.h" +#include "iosconstants.h" + +#include <projectexplorer/devicesupport/idevice.h> #include <QObject> #include <QTimer> #include <QThread> #include <QProcess> #include <QMutex> -#include "iostoolhandler.h" -#include <projectexplorer/devicesupport/idevice.h> namespace Ios { namespace Internal { @@ -87,6 +89,7 @@ private: QString m_bundleDir; QStringList m_arguments; ProjectExplorer::IDevice::ConstPtr m_device; + IosDeviceType::Enum m_deviceType; bool m_cppDebug; bool m_qmlDebug; bool m_cleanExit; diff --git a/src/plugins/ios/iostoolhandler.cpp b/src/plugins/ios/iostoolhandler.cpp index 6ceb6ede25..6cd5e66d4e 100644 --- a/src/plugins/ios/iostoolhandler.cpp +++ b/src/plugins/ios/iostoolhandler.cpp @@ -29,6 +29,7 @@ #include "iostoolhandler.h" #include "iosconfigurations.h" +#include "iosconstants.h" #include <coreplugin/icore.h> #include <utils/qtcassert.h> @@ -124,7 +125,7 @@ public: OpAppRun }; - explicit IosToolHandlerPrivate(IosToolHandler::DeviceType devType, IosToolHandler *q); + explicit IosToolHandlerPrivate(IosDeviceType::Enum devType, IosToolHandler *q); virtual ~IosToolHandlerPrivate() {} virtual void requestTransferApp(const QString &bundlePath, const QString &deviceId, int timeout = 1000) = 0; @@ -168,7 +169,7 @@ protected: IosToolHandler::RunKind runKind; State state; Op op; - IosToolHandler::DeviceType devType; + IosDeviceType::Enum devType; static const int lookaheadSize = 67; int iBegin, iEnd, gdbSocket; QList<ParserState> stack; @@ -177,7 +178,7 @@ protected: class IosDeviceToolHandlerPrivate : public IosToolHandlerPrivate { public: - explicit IosDeviceToolHandlerPrivate(IosToolHandler::DeviceType devType, IosToolHandler *q); + explicit IosDeviceToolHandlerPrivate(IosDeviceType::Enum devType, IosToolHandler *q); virtual void requestTransferApp(const QString &bundlePath, const QString &deviceId, int timeout = 1000); virtual void requestRunApp(const QString &bundlePath, const QStringList &extraArgs, @@ -190,7 +191,7 @@ public: class IosSimulatorToolHandlerPrivate : public IosToolHandlerPrivate { public: - explicit IosSimulatorToolHandlerPrivate(IosToolHandler::DeviceType devType, IosToolHandler *q); + explicit IosSimulatorToolHandlerPrivate(IosDeviceType::Enum devType, IosToolHandler *q); virtual void requestTransferApp(const QString &bundlePath, const QString &deviceId, int timeout = 1000); virtual void requestRunApp(const QString &bundlePath, const QStringList &extraArgs, @@ -202,7 +203,7 @@ private: void addDeviceArguments(QStringList &args) const; }; -IosToolHandlerPrivate::IosToolHandlerPrivate(IosToolHandler::DeviceType devType, +IosToolHandlerPrivate::IosToolHandlerPrivate(IosDeviceType::Enum devType, Ios::IosToolHandler *q) : q(q), state(NonStarted), devType(devType), iBegin(0), iEnd(0), gdbSocket(-1) @@ -576,7 +577,7 @@ void IosToolHandlerPrivate::subprocessHasData() // IosDeviceToolHandlerPrivate -IosDeviceToolHandlerPrivate::IosDeviceToolHandlerPrivate(IosToolHandler::DeviceType devType, +IosDeviceToolHandlerPrivate::IosDeviceToolHandlerPrivate(IosDeviceType::Enum devType, IosToolHandler *q) : IosToolHandlerPrivate(devType, q) { } @@ -635,7 +636,7 @@ bool IosDeviceToolHandlerPrivate::expectsFileDescriptor() // IosSimulatorToolHandlerPrivate -IosSimulatorToolHandlerPrivate::IosSimulatorToolHandlerPrivate(IosToolHandler::DeviceType devType, +IosSimulatorToolHandlerPrivate::IosSimulatorToolHandlerPrivate(IosDeviceType::Enum devType, IosToolHandler *q) : IosToolHandlerPrivate(devType, q) { } @@ -695,23 +696,23 @@ bool IosSimulatorToolHandlerPrivate::expectsFileDescriptor() void IosSimulatorToolHandlerPrivate::addDeviceArguments(QStringList &args) const { switch (devType) { - case IosToolHandler::IosDeviceType: + case IosDeviceType::IosDevice: qDebug() << "IosSimulatorToolHandlerPrivate has device type IosDeviceType"; break; - case IosToolHandler::IosSimulatedIphoneType: + case IosDeviceType::SimulatedIphone: args << QLatin1String("--family") << QLatin1String("iphone"); break; - case IosToolHandler::IosSimulatedIpadType: + case IosDeviceType::SimulatedIpad: args << QLatin1String("--family") << QLatin1String("ipad"); break; - case IosToolHandler::IosSimulatedIphoneRetina4InchType: + case IosDeviceType::SimulatedIphoneRetina4Inch: args << QLatin1String("--family") << QLatin1String("iphone") << QLatin1String("--retina") << QLatin1String("--tall"); break; - case IosToolHandler::IosSimulatedIphoneRetina3_5InchType: + case IosDeviceType::SimulatedIphoneRetina3_5Inch: args << QLatin1String("--family") << QLatin1String("iphone") << QLatin1String("--retina"); break; - case IosToolHandler::IosSimulatedIpadRetinaType: + case IosDeviceType::SimulatedIpadRetina: args << QLatin1String("--family") << QLatin1String("ipad") << QLatin1String("--retina"); break; } @@ -743,10 +744,10 @@ QString IosToolHandler::iosSimulatorToolPath() return res; } -IosToolHandler::IosToolHandler(DeviceType devType, QObject *parent) : +IosToolHandler::IosToolHandler(IosDeviceType::Enum devType, QObject *parent) : QObject(parent) { - if (devType == IosDeviceType) + if (devType == IosDeviceType::IosDevice) d = new Internal::IosDeviceToolHandlerPrivate(devType, this); else d = new Internal::IosSimulatorToolHandlerPrivate(devType, this); diff --git a/src/plugins/ios/iostoolhandler.h b/src/plugins/ios/iostoolhandler.h index 8f163c02f6..ff5d1b1e73 100644 --- a/src/plugins/ios/iostoolhandler.h +++ b/src/plugins/ios/iostoolhandler.h @@ -30,6 +30,8 @@ #ifndef IOSTOOLHANDLER_H #define IOSTOOLHANDLER_H +#include "iosconstants.h" + #include <QObject> #include <QMap> #include <QString> @@ -54,19 +56,11 @@ public: Unknown = 1, Failure = 2 }; - enum DeviceType { - IosDeviceType, - IosSimulatedIphoneType, - IosSimulatedIpadType, - IosSimulatedIphoneRetina4InchType, - IosSimulatedIphoneRetina3_5InchType, - IosSimulatedIpadRetinaType - }; static QString iosDeviceToolPath(); static QString iosSimulatorToolPath(); - explicit IosToolHandler(DeviceType = IosDeviceType, QObject *parent = 0); + explicit IosToolHandler(IosDeviceType::Enum = IosDeviceType::IosDevice, QObject *parent = 0); ~IosToolHandler(); void requestTransferApp(const QString &bundlePath, const QString &deviceId, int timeout = 1000); void requestRunApp(const QString &bundlePath, const QStringList &extraArgs, RunKind runType, |