Simplify IDeviceFactory use

With a 1:1 mapping of factory and created device types, the signatures
of the device factory methods are much simpler, and yield even in
the cases where a factory created more than one device type
(WinRt and Qdb) less code after duplication of the factory.

Change-Id: I1c6279a88e8483001e5603cfe1922029243be610
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2018-10-04 19:08:16 +02:00
parent 9fe5733ef3
commit 0c2101d816
26 changed files with 109 additions and 186 deletions

View File

@@ -36,25 +36,18 @@ namespace Android {
namespace Internal {
AndroidDeviceFactory::AndroidDeviceFactory()
: ProjectExplorer::IDeviceFactory(Constants::ANDROID_DEVICE_TYPE)
{
setObjectName(QLatin1String("AndroidDeviceFactory"));
}
QString AndroidDeviceFactory::displayNameForId(Core::Id type) const
QString AndroidDeviceFactory::displayName() const
{
if (type == Constants::ANDROID_DEVICE_TYPE)
return tr("Android Device");
return QString();
return tr("Android Device");
}
QList<Core::Id> AndroidDeviceFactory::availableCreationIds() const
QIcon AndroidDeviceFactory::icon() const
{
return QList<Core::Id>() << Core::Id(Constants::ANDROID_DEVICE_TYPE);
}
QIcon AndroidDeviceFactory::iconForId(Core::Id type) const
{
Q_UNUSED(type)
using namespace Utils;
static const QIcon icon =
Icon::combinedIcon({Icon({{":/android/images/androiddevicesmall.png",
@@ -69,15 +62,14 @@ bool AndroidDeviceFactory::canCreate() const
return false;
}
ProjectExplorer::IDevice::Ptr AndroidDeviceFactory::create(Core::Id id) const
ProjectExplorer::IDevice::Ptr AndroidDeviceFactory::create() const
{
Q_UNUSED(id)
return ProjectExplorer::IDevice::Ptr();
}
bool AndroidDeviceFactory::canRestore(const QVariantMap &map) const
{
return ProjectExplorer::IDevice::typeFromMap(map) == Constants::ANDROID_DEVICE_TYPE;
return ProjectExplorer::IDevice::typeFromMap(map) == deviceType();
}
ProjectExplorer::IDevice::Ptr AndroidDeviceFactory::restore(const QVariantMap &map) const

View File

@@ -36,12 +36,11 @@ class AndroidDeviceFactory : public ProjectExplorer::IDeviceFactory
public:
AndroidDeviceFactory();
QString displayNameForId(Core::Id type) const override;
QList<Core::Id> availableCreationIds() const override;
QIcon iconForId(Core::Id type) const override;
QString displayName() const override;
QIcon icon() const override;
bool canCreate() const override;
ProjectExplorer::IDevice::Ptr create(Core::Id id) const override;
ProjectExplorer::IDevice::Ptr create() const override;
bool canRestore(const QVariantMap &map) const override;
ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override;
};

View File

@@ -40,22 +40,17 @@ namespace BareMetal {
namespace Internal {
BareMetalDeviceConfigurationFactory::BareMetalDeviceConfigurationFactory()
: IDeviceFactory(Constants::BareMetalOsType)
{
}
QString BareMetalDeviceConfigurationFactory::displayNameForId(Core::Id type) const
QString BareMetalDeviceConfigurationFactory::displayName() const
{
return type == Constants::BareMetalOsType ? tr("Bare Metal Device") : QString();
return tr("Bare Metal Device");
}
QList<Core::Id> BareMetalDeviceConfigurationFactory::availableCreationIds() const
QIcon BareMetalDeviceConfigurationFactory::icon() const
{
return QList<Core::Id>() << Core::Id(Constants::BareMetalOsType);
}
QIcon BareMetalDeviceConfigurationFactory::iconForId(Core::Id type) const
{
Q_UNUSED(type)
using namespace Utils;
static const QIcon icon =
Icon::combinedIcon({Icon({{":/baremetal/images/baremetaldevicesmall.png",
@@ -65,9 +60,8 @@ QIcon BareMetalDeviceConfigurationFactory::iconForId(Core::Id type) const
return icon;
}
IDevice::Ptr BareMetalDeviceConfigurationFactory::create(Core::Id id) const
IDevice::Ptr BareMetalDeviceConfigurationFactory::create() const
{
QTC_ASSERT(id == Constants::BareMetalOsType, return IDevice::Ptr());
BareMetalDeviceConfigurationWizard wizard;
if (wizard.exec() != QDialog::Accepted)
return IDevice::Ptr();
@@ -76,7 +70,7 @@ IDevice::Ptr BareMetalDeviceConfigurationFactory::create(Core::Id id) const
bool BareMetalDeviceConfigurationFactory::canRestore(const QVariantMap &map) const
{
return IDevice::typeFromMap(map) == Constants::BareMetalOsType;
return IDevice::typeFromMap(map) == deviceType();
}
IDevice::Ptr BareMetalDeviceConfigurationFactory::restore(const QVariantMap &map) const

View File

@@ -38,11 +38,10 @@ class BareMetalDeviceConfigurationFactory
public:
BareMetalDeviceConfigurationFactory();
QString displayNameForId(Core::Id type) const override;
QList<Core::Id> availableCreationIds() const override;
QIcon iconForId(Core::Id type) const override;
QString displayName() const override;
QIcon icon() const override;
ProjectExplorer::IDevice::Ptr create(Core::Id id) const override;
ProjectExplorer::IDevice::Ptr create() const override;
bool canRestore(const QVariantMap &map) const override;
ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override;
};

View File

@@ -36,23 +36,18 @@ namespace Ios {
namespace Internal {
IosDeviceFactory::IosDeviceFactory()
: ProjectExplorer::IDeviceFactory(Constants::IOS_DEVICE_ID)
{
setObjectName(QLatin1String("IosDeviceFactory"));
}
QString IosDeviceFactory::displayNameForId(Core::Id type) const
QString IosDeviceFactory::displayName() const
{
return type == Constants::IOS_DEVICE_TYPE ? IosDevice::name() : QString();
return IosDevice::name();
}
QList<Core::Id> IosDeviceFactory::availableCreationIds() const
QIcon IosDeviceFactory::icon() const
{
return QList<Core::Id>() << Core::Id(Constants::IOS_DEVICE_TYPE);
}
QIcon IosDeviceFactory::iconForId(Core::Id type) const
{
Q_UNUSED(type)
using namespace Utils;
static const QIcon icon =
Icon::combinedIcon({Icon({{":/ios/images/iosdevicesmall.png",
@@ -67,9 +62,8 @@ bool IosDeviceFactory::canCreate() const
return false;
}
ProjectExplorer::IDevice::Ptr IosDeviceFactory::create(Core::Id id) const
ProjectExplorer::IDevice::Ptr IosDeviceFactory::create() const
{
Q_UNUSED(id)
return ProjectExplorer::IDevice::Ptr();
}

View File

@@ -40,12 +40,11 @@ class IosDeviceFactory : public ProjectExplorer::IDeviceFactory
public:
IosDeviceFactory();
QString displayNameForId(Core::Id type) const override;
QList<Core::Id> availableCreationIds() const override;
QIcon iconForId(Core::Id type) const override;
QString displayName() const override;
QIcon icon() const override;
bool canCreate() const override;
ProjectExplorer::IDevice::Ptr create(Core::Id id) const override;
ProjectExplorer::IDevice::Ptr create() const override;
bool canRestore(const QVariantMap &map) const override;
ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override;
};

View File

@@ -36,25 +36,18 @@ namespace Ios {
namespace Internal {
IosSimulatorFactory::IosSimulatorFactory()
: ProjectExplorer::IDeviceFactory(Constants::IOS_SIMULATOR_TYPE)
{
setObjectName(QLatin1String("IosSimulatorFactory"));
}
QString IosSimulatorFactory::displayNameForId(Core::Id type) const
QString IosSimulatorFactory::displayName() const
{
if (type == Constants::IOS_SIMULATOR_TYPE)
return tr("iOS Simulator");
return QString();
return tr("iOS Simulator");
}
QList<Core::Id> IosSimulatorFactory::availableCreationIds() const
QIcon IosSimulatorFactory::icon() const
{
return QList<Core::Id>() << Core::Id(Constants::IOS_SIMULATOR_TYPE);
}
QIcon IosSimulatorFactory::iconForId(Core::Id type) const
{
Q_UNUSED(type)
using namespace Utils;
static const QIcon icon =
Icon::combinedIcon({Icon({{":/ios/images/iosdevicesmall.png",
@@ -69,15 +62,14 @@ bool IosSimulatorFactory::canCreate() const
return false;
}
ProjectExplorer::IDevice::Ptr IosSimulatorFactory::create(Core::Id id) const
ProjectExplorer::IDevice::Ptr IosSimulatorFactory::create() const
{
Q_UNUSED(id)
return ProjectExplorer::IDevice::Ptr();
}
bool IosSimulatorFactory::canRestore(const QVariantMap &map) const
{
return ProjectExplorer::IDevice::typeFromMap(map) == Constants::IOS_SIMULATOR_TYPE;
return ProjectExplorer::IDevice::typeFromMap(map) == deviceType();
}
ProjectExplorer::IDevice::Ptr IosSimulatorFactory::restore(const QVariantMap &map) const

View File

@@ -36,12 +36,11 @@ class IosSimulatorFactory : public ProjectExplorer::IDeviceFactory
public:
IosSimulatorFactory();
QString displayNameForId(Core::Id type) const override;
QList<Core::Id> availableCreationIds() const override;
QIcon iconForId(Core::Id type) const override;
QString displayName() const override;
QIcon icon() const override;
bool canCreate() const override;
ProjectExplorer::IDevice::Ptr create(Core::Id id) const override;
ProjectExplorer::IDevice::Ptr create() const override;
bool canRestore(const QVariantMap &map) const override;
ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override;
};

View File

@@ -38,24 +38,17 @@
namespace ProjectExplorer {
namespace Internal {
DesktopDeviceFactory::DesktopDeviceFactory(QObject *parent) : IDeviceFactory(parent)
DesktopDeviceFactory::DesktopDeviceFactory()
: IDeviceFactory(Constants::DESKTOP_DEVICE_TYPE)
{ }
QString DesktopDeviceFactory::displayNameForId(Core::Id type) const
QString DesktopDeviceFactory::displayName() const
{
if (type == Constants::DESKTOP_DEVICE_TYPE)
return tr("Desktop");
return QString();
return tr("Desktop");
}
QList<Core::Id> DesktopDeviceFactory::availableCreationIds() const
QIcon DesktopDeviceFactory::icon() const
{
return QList<Core::Id>() << Core::Id(Constants::DESKTOP_DEVICE_TYPE);
}
QIcon DesktopDeviceFactory::iconForId(Core::Id type) const
{
Q_UNUSED(type)
static const QIcon icon =
Utils::creatorTheme()->flag(Utils::Theme::FlatSideBarIcons)
? Utils::Icon::combinedIcon({Icons::DESKTOP_DEVICE.icon(),
@@ -69,15 +62,14 @@ bool DesktopDeviceFactory::canCreate() const
return false;
}
IDevice::Ptr DesktopDeviceFactory::create(Core::Id id) const
IDevice::Ptr DesktopDeviceFactory::create() const
{
Q_UNUSED(id);
return IDevice::Ptr();
}
bool DesktopDeviceFactory::canRestore(const QVariantMap &map) const
{
return IDevice::idFromMap(map) == Constants::DESKTOP_DEVICE_ID;
return IDevice::idFromMap(map) == deviceType();
}
IDevice::Ptr DesktopDeviceFactory::restore(const QVariantMap &map) const

View File

@@ -35,14 +35,13 @@ class DesktopDeviceFactory : public IDeviceFactory
Q_OBJECT
public:
explicit DesktopDeviceFactory(QObject *parent = 0);
DesktopDeviceFactory();
QString displayNameForId(Core::Id type) const override;
QList<Core::Id> availableCreationIds() const override;
QIcon iconForId(Core::Id type) const override;
QString displayName() const override;
QIcon icon() const override;
bool canCreate() const override;
IDevice::Ptr create(Core::Id id) const override;
IDevice::Ptr create() const override;
bool canRestore(const QVariantMap &map) const override;
IDevice::Ptr restore(const QVariantMap &map) const override;
};

View File

@@ -62,7 +62,7 @@ bool DeviceCheckBuildStep::init(QList<const BuildStep *> &earlierSteps)
return false;
}
IDevice::Ptr newDevice = factory->create(deviceTypeId);
IDevice::Ptr newDevice = factory->create();
if (newDevice.isNull()) {
emit addOutput(tr("No device configured."), BuildStep::OutputFormat::ErrorMessage);
return false;

View File

@@ -45,11 +45,9 @@ DeviceFactorySelectionDialog::DeviceFactorySelectionDialog(QWidget *parent) :
for (const IDeviceFactory * const factory : IDeviceFactory::allDeviceFactories()) {
if (!factory->canCreate())
continue;
foreach (Core::Id id, factory->availableCreationIds()) {
QListWidgetItem *item = new QListWidgetItem(factory->displayNameForId(id));
item->setData(Qt::UserRole, QVariant::fromValue(id));
ui->listWidget->addItem(item);
}
QListWidgetItem *item = new QListWidgetItem(factory->displayName());
item->setData(Qt::UserRole, QVariant::fromValue(factory->deviceType()));
ui->listWidget->addItem(item);
}
connect(ui->listWidget, &QListWidget::itemSelectionChanged,

View File

@@ -147,7 +147,7 @@ void DeviceSettingsWidget::addDevice()
IDeviceFactory *factory = IDeviceFactory::find(toCreate);
if (!factory)
return;
IDevice::Ptr device = factory->create(toCreate);
IDevice::Ptr device = factory->create();
if (device.isNull())
return;

View File

@@ -80,7 +80,7 @@ namespace ProjectExplorer {
bool IDeviceFactory::canCreate() const
{
return !availableCreationIds().isEmpty();
return true;
}
static QList<IDeviceFactory *> g_deviceFactories;
@@ -89,11 +89,12 @@ IDeviceFactory *IDeviceFactory::find(Core::Id type)
{
return Utils::findOrDefault(g_deviceFactories,
[&type](IDeviceFactory *factory) {
return factory->availableCreationIds().contains(type);
return factory->deviceType() == type;
});
}
IDeviceFactory::IDeviceFactory(QObject *parent) : QObject(parent)
IDeviceFactory::IDeviceFactory(Core::Id deviceType)
: m_deviceType(deviceType)
{
g_deviceFactories.append(this);
}

View File

@@ -47,22 +47,23 @@ public:
~IDeviceFactory() override;
static const QList<IDeviceFactory *> allDeviceFactories();
virtual QString displayNameForId(Core::Id type) const = 0;
virtual QList<Core::Id> availableCreationIds() const = 0;
virtual QIcon iconForId(Core::Id type) const = 0;
virtual QString displayName() const = 0;
virtual QIcon icon() const = 0;
virtual bool canCreate() const;
virtual IDevice::Ptr create(Core::Id id) const = 0;
virtual IDevice::Ptr create() const = 0;
virtual bool canRestore(const QVariantMap &map) const = 0;
virtual IDevice::Ptr restore(const QVariantMap &map) const = 0;
static IDeviceFactory *find(Core::Id type);
Core::Id deviceType() const { return m_deviceType; }
protected:
explicit IDeviceFactory(QObject *parent = nullptr);
explicit IDeviceFactory(Core::Id deviceType);
private:
const Core::Id m_deviceType;
};
} // namespace ProjectExplorer

View File

@@ -356,9 +356,9 @@ static QIcon iconForDeviceType(Core::Id deviceType)
{
const IDeviceFactory *factory = Utils::findOrDefault(IDeviceFactory::allDeviceFactories(),
[&deviceType](const IDeviceFactory *factory) {
return factory->availableCreationIds().contains(deviceType);
return factory->deviceType() == deviceType;
});
return factory ? factory->iconForId(deviceType) : QIcon();
return factory ? factory->icon() : QIcon();
}
QIcon Kit::icon() const

View File

@@ -586,13 +586,8 @@ KitInformation::ItemList DeviceTypeKitInformation::toUserOutput(const Kit *k) co
Core::Id type = deviceTypeId(k);
QString typeDisplayName = tr("Unknown device type");
if (type.isValid()) {
IDeviceFactory *factory = Utils::findOrDefault(IDeviceFactory::allDeviceFactories(),
[&type](IDeviceFactory *factory) {
return factory->availableCreationIds().contains(type);
});
if (factory)
typeDisplayName = factory->displayNameForId(type);
if (IDeviceFactory *factory = IDeviceFactory::find(type))
typeDisplayName = factory->displayName();
}
return ItemList() << qMakePair(tr("Device type"), typeDisplayName);
}

View File

@@ -262,10 +262,8 @@ int ToolChainInformationConfigWidget::indexOf(QComboBox *cb, const ToolChain *tc
DeviceTypeInformationConfigWidget::DeviceTypeInformationConfigWidget(Kit *workingCopy, const KitInformation *ki) :
KitConfigWidget(workingCopy, ki), m_comboBox(new QComboBox)
{
for (IDeviceFactory *factory : IDeviceFactory::allDeviceFactories()) {
foreach (Id id, factory->availableCreationIds())
m_comboBox->addItem(factory->displayNameForId(id), id.toSetting());
}
for (IDeviceFactory *factory : IDeviceFactory::allDeviceFactories())
m_comboBox->addItem(factory->displayName(), factory->deviceType().toSetting());
m_comboBox->setToolTip(toolTip());

View File

@@ -515,12 +515,10 @@ QSet<Id> KitFeatureProvider::availablePlatforms() const
QString KitFeatureProvider::displayNameForPlatform(Id id) const
{
for (IDeviceFactory *f : IDeviceFactory::allDeviceFactories()) {
if (f->availableCreationIds().contains(id)) {
const QString dn = f->displayNameForId(id);
QTC_ASSERT(!dn.isEmpty(), continue);
return dn;
}
if (IDeviceFactory *f = IDeviceFactory::find(id)) {
const QString dn = f->displayName();
QTC_CHECK(!dn.isEmpty());
return dn;
}
return QString();
}

View File

@@ -37,25 +37,18 @@
namespace Qnx {
namespace Internal {
QnxDeviceFactory::QnxDeviceFactory(QObject *parent) :
ProjectExplorer::IDeviceFactory(parent)
QnxDeviceFactory::QnxDeviceFactory()
: ProjectExplorer::IDeviceFactory(Constants::QNX_QNX_OS_TYPE)
{
}
QString QnxDeviceFactory::displayNameForId(Core::Id type) const
QString QnxDeviceFactory::displayName() const
{
QTC_ASSERT(type == Constants::QNX_QNX_OS_TYPE, return QString());
return tr("QNX Device");
}
QList<Core::Id> QnxDeviceFactory::availableCreationIds() const
QIcon QnxDeviceFactory::icon() const
{
return {Constants::QNX_QNX_OS_TYPE};
}
QIcon QnxDeviceFactory::iconForId(Core::Id type) const
{
Q_UNUSED(type)
using namespace Utils;
static const QIcon icon =
Icon::combinedIcon({Icon({{":/qnx/images/qnxdevicesmall.png",
@@ -70,9 +63,8 @@ bool QnxDeviceFactory::canCreate() const
return true;
}
ProjectExplorer::IDevice::Ptr QnxDeviceFactory::create(Core::Id id) const
ProjectExplorer::IDevice::Ptr QnxDeviceFactory::create() const
{
Q_UNUSED(id);
QnxDeviceWizard wizard;
if (wizard.exec() != QDialog::Accepted)
return ProjectExplorer::IDevice::Ptr();
@@ -81,7 +73,7 @@ ProjectExplorer::IDevice::Ptr QnxDeviceFactory::create(Core::Id id) const
bool QnxDeviceFactory::canRestore(const QVariantMap &map) const
{
return ProjectExplorer::IDevice::typeFromMap(map) == Constants::QNX_QNX_OS_TYPE;
return ProjectExplorer::IDevice::typeFromMap(map) == deviceType();
}
ProjectExplorer::IDevice::Ptr QnxDeviceFactory::restore(const QVariantMap &map) const

View File

@@ -35,14 +35,13 @@ class QnxDeviceFactory : public ProjectExplorer::IDeviceFactory
Q_OBJECT
public:
explicit QnxDeviceFactory(QObject *parent = 0);
QnxDeviceFactory();
QString displayNameForId(Core::Id type) const override;
QList<Core::Id> availableCreationIds() const override;
QIcon iconForId(Core::Id type) const override;
QString displayName() const override;
QIcon icon() const override;
bool canCreate() const override;
ProjectExplorer::IDevice::Ptr create(Core::Id id) const override;
ProjectExplorer::IDevice::Ptr create() const override;
bool canRestore(const QVariantMap &map) const override;
ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override;

View File

@@ -39,31 +39,23 @@ using namespace ProjectExplorer;
namespace RemoteLinux {
GenericLinuxDeviceConfigurationFactory::GenericLinuxDeviceConfigurationFactory(QObject *parent)
: IDeviceFactory(parent)
GenericLinuxDeviceConfigurationFactory::GenericLinuxDeviceConfigurationFactory()
: IDeviceFactory(Constants::GenericLinuxOsType)
{
}
QString GenericLinuxDeviceConfigurationFactory::displayNameForId(Core::Id type) const
QString GenericLinuxDeviceConfigurationFactory::displayName() const
{
QTC_ASSERT(type == Constants::GenericLinuxOsType, return QString());
return tr("Generic Linux Device");
}
QList<Core::Id> GenericLinuxDeviceConfigurationFactory::availableCreationIds() const
QIcon GenericLinuxDeviceConfigurationFactory::icon() const
{
return QList<Core::Id>() << Core::Id(Constants::GenericLinuxOsType);
}
QIcon GenericLinuxDeviceConfigurationFactory::iconForId(Core::Id type) const
{
Q_UNUSED(type)
return QIcon();
}
IDevice::Ptr GenericLinuxDeviceConfigurationFactory::create(Core::Id id) const
IDevice::Ptr GenericLinuxDeviceConfigurationFactory::create() const
{
QTC_ASSERT(id == Constants::GenericLinuxOsType, return IDevice::Ptr());
GenericLinuxDeviceConfigurationWizard wizard(Core::ICore::mainWindow());
if (wizard.exec() != QDialog::Accepted)
return IDevice::Ptr();
@@ -72,7 +64,7 @@ IDevice::Ptr GenericLinuxDeviceConfigurationFactory::create(Core::Id id) const
bool GenericLinuxDeviceConfigurationFactory::canRestore(const QVariantMap &map) const
{
return IDevice::typeFromMap(map) == Constants::GenericLinuxOsType;
return IDevice::typeFromMap(map) == deviceType();
}
IDevice::Ptr GenericLinuxDeviceConfigurationFactory::restore(const QVariantMap &map) const

View File

@@ -37,13 +37,12 @@ class REMOTELINUX_EXPORT GenericLinuxDeviceConfigurationFactory
Q_OBJECT
public:
GenericLinuxDeviceConfigurationFactory(QObject *parent = 0);
GenericLinuxDeviceConfigurationFactory();
QString displayNameForId(Core::Id type) const override;
QList<Core::Id> availableCreationIds() const override;
QIcon iconForId(Core::Id type) const override;
QString displayName() const override;
QIcon icon() const override;
ProjectExplorer::IDevice::Ptr create(Core::Id id) const override;
ProjectExplorer::IDevice::Ptr create() const override;
bool canRestore(const QVariantMap &map) const override;
ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override;
};

View File

@@ -47,9 +47,8 @@ using QtSupport::QtVersionManager;
namespace WinRt {
namespace Internal {
WinRtDeviceFactory::WinRtDeviceFactory()
: m_process(0)
, m_initialized(false)
WinRtDeviceFactory::WinRtDeviceFactory(Core::Id deviceType)
: ProjectExplorer::IDeviceFactory(deviceType)
{
if (allPrerequisitesLoaded()) {
onPrerequisitesLoaded();
@@ -62,21 +61,13 @@ WinRtDeviceFactory::WinRtDeviceFactory()
}
}
QString WinRtDeviceFactory::displayNameForId(Core::Id type) const
QString WinRtDeviceFactory::displayName() const
{
return WinRtDevice::displayNameForType(type);
return WinRtDevice::displayNameForType(deviceType());
}
QList<Core::Id> WinRtDeviceFactory::availableCreationIds() const
QIcon WinRtDeviceFactory::icon() const
{
return QList<Core::Id>() << Constants::WINRT_DEVICE_TYPE_LOCAL
<< Constants::WINRT_DEVICE_TYPE_PHONE
<< Constants::WINRT_DEVICE_TYPE_EMULATOR;
}
QIcon WinRtDeviceFactory::iconForId(Core::Id type) const
{
Q_UNUSED(type)
using namespace Utils;
return Icon::combinedIcon({Icon({{":/winrt/images/winrtdevicesmall.png",
Theme::PanelTextColorDark}}, Icon::Tint),
@@ -84,16 +75,15 @@ QIcon WinRtDeviceFactory::iconForId(Core::Id type) const
Theme::IconsBaseColor}})});
}
IDevice::Ptr WinRtDeviceFactory::create(Core::Id id) const
IDevice::Ptr WinRtDeviceFactory::create() const
{
Q_UNUSED(id);
QTC_CHECK(false);
return IDevice::Ptr();
}
bool WinRtDeviceFactory::canRestore(const QVariantMap &map) const
{
return availableCreationIds().contains(IDevice::typeFromMap(map));
return IDevice::typeFromMap(map) == deviceType();
}
IDevice::Ptr WinRtDeviceFactory::restore(const QVariantMap &map) const

View File

@@ -35,12 +35,11 @@ class WinRtDeviceFactory : public ProjectExplorer::IDeviceFactory
{
Q_OBJECT
public:
WinRtDeviceFactory();
QString displayNameForId(Core::Id type) const override;
QList<Core::Id> availableCreationIds() const override;
QIcon iconForId(Core::Id type) const override;
explicit WinRtDeviceFactory(Core::Id deviceType);
QString displayName() const override;
QIcon icon() const override;
bool canCreate() const override { return false; }
ProjectExplorer::IDevice::Ptr create(Core::Id id) const override;
ProjectExplorer::IDevice::Ptr create() const override;
bool canRestore(const QVariantMap &map) const override;
ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override;
@@ -55,8 +54,8 @@ private:
QString findRunnerFilePath() const;
void parseRunnerOutput(const QByteArray &output) const;
Utils::QtcProcess *m_process;
bool m_initialized;
Utils::QtcProcess *m_process = nullptr;
bool m_initialized = false;
};
} // Internal

View File

@@ -52,7 +52,9 @@ public:
WinRtPhoneDeployConfigurationFactory phoneDeployConfigFactory;
WinRtEmulatorDeployConfigurationFactory emulatorDeployFactory;
WinRtDeployStepFactory deployStepFactory;
WinRtDeviceFactory deviceFactory;
WinRtDeviceFactory localDeviceFactory{Constants::WINRT_DEVICE_TYPE_LOCAL};
WinRtDeviceFactory phoneDeviceFactory{Constants::WINRT_DEVICE_TYPE_PHONE};
WinRtDeviceFactory emulatorDeviceFactory{Constants::WINRT_DEVICE_TYPE_EMULATOR};
};
WinRtPlugin::WinRtPlugin()