diff options
author | Christian Kandeler <christian.kandeler@nokia.com> | 2012-04-18 12:05:04 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@nokia.com> | 2012-04-18 15:29:07 +0200 |
commit | 1eb1effb37a6e8a77dd331244b987349cb00e161 (patch) | |
tree | b712bc8e486076612bdbe587621782a36c989aae | |
parent | 40e76b742c0aa2405258ae3385760b1826a13b43 (diff) | |
download | qt-creator-1eb1effb37a6e8a77dd331244b987349cb00e161.tar.gz |
Device Support: Add canRestore() to device factory.
Also get rid of supportsDeviceType(), which is no longer needed now that
most services live in IDevice itself.
The new approach is more flexible as well, allowing factories to refuse
loading a device even if they know its type (e.g. because it is no
longer relevant).
We also rename loadDevice() to restore(), because that is more
exact and is also the name that is being used elsewhere in QtCreator.
Change-Id: I51f57c118a048c1a781a55a94966d554d7aed7a2
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
9 files changed, 43 insertions, 42 deletions
diff --git a/src/plugins/madde/maddedeviceconfigurationfactory.cpp b/src/plugins/madde/maddedeviceconfigurationfactory.cpp index 8dcab592fc..d7cdddc588 100644 --- a/src/plugins/madde/maddedeviceconfigurationfactory.cpp +++ b/src/plugins/madde/maddedeviceconfigurationfactory.cpp @@ -66,18 +66,19 @@ IDevice::Ptr MaddeDeviceConfigurationFactory::create() const return wizard.device(); } -IDevice::Ptr MaddeDeviceConfigurationFactory::loadDevice(const QVariantMap &map) const +bool MaddeDeviceConfigurationFactory::canRestore(const QVariantMap &map) const { - QTC_ASSERT(supportsDeviceType(IDevice::typeFromMap(map)), return MaddeDevice::Ptr()); - MaddeDevice::Ptr device = MaddeDevice::create(); - device->fromMap(map); - return device; + const QString type = IDevice::typeFromMap(map); + return type == QLatin1String(Maemo5OsType) || type == QLatin1String(HarmattanOsType) + || type == QLatin1String(MeeGoOsType); } -bool MaddeDeviceConfigurationFactory::supportsDeviceType(const QString &type) const +IDevice::Ptr MaddeDeviceConfigurationFactory::restore(const QVariantMap &map) const { - return type == QLatin1String(Maemo5OsType) || type == QLatin1String(HarmattanOsType) - || type == QLatin1String(MeeGoOsType); + QTC_ASSERT(canRestore(map), return MaddeDevice::Ptr()); + const MaddeDevice::Ptr device = MaddeDevice::create(); + device->fromMap(map); + return device; } } // namespace Internal diff --git a/src/plugins/madde/maddedeviceconfigurationfactory.h b/src/plugins/madde/maddedeviceconfigurationfactory.h index aa15a1b479..ebeed4a64a 100644 --- a/src/plugins/madde/maddedeviceconfigurationfactory.h +++ b/src/plugins/madde/maddedeviceconfigurationfactory.h @@ -46,8 +46,8 @@ public: QString displayName() const; bool canCreate() const; ProjectExplorer::IDevice::Ptr create() const; - ProjectExplorer::IDevice::Ptr loadDevice(const QVariantMap &map) const; - bool supportsDeviceType(const QString &type) const; + bool canRestore(const QVariantMap &map) const; + ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index 5477752854..2555c463af 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -161,10 +161,10 @@ void DeviceManager::loadPre2_6() QVariantMap map; foreach (const QString &key, settings->childKeys()) map.insert(key, settings->value(key)); - const IDeviceFactory *factory = factoryForDeviceType(IDevice::typeFromMap(map)); + const IDeviceFactory * const factory = restoreFactory(map); if (!factory) continue; - IDevice::Ptr device = factory->loadDevice(map); + IDevice::Ptr device = factory->restore(map); QTC_ASSERT(device, continue); d->devices << device; } @@ -182,10 +182,10 @@ void DeviceManager::fromMap(const QVariantMap &map) const QVariantList deviceList = map.value(QLatin1String(DeviceListKey)).toList(); foreach (const QVariant &v, deviceList) { const QVariantMap map = v.toMap(); - const IDeviceFactory * const factory = factoryForDeviceType(IDevice::typeFromMap(map)); + const IDeviceFactory * const factory = restoreFactory(map); if (!factory) continue; - IDevice::Ptr device = factory->loadDevice(map); + const IDevice::Ptr device = factory->restore(map); QTC_ASSERT(device, continue); if (device->isAutoDetected()) d->inactiveAutoDetectedDevices << device; @@ -320,14 +320,16 @@ void DeviceManager::setDefaultDevice(int idx) emit updated(); } -const IDeviceFactory *DeviceManager::factoryForDeviceType(const QString &type) +const IDeviceFactory *DeviceManager::restoreFactory(const QVariantMap &map) { const QList<IDeviceFactory *> &factories = ExtensionSystem::PluginManager::instance()->getObjects<IDeviceFactory>(); foreach (const IDeviceFactory * const factory, factories) { - if (factory->supportsDeviceType(type)) + if (factory->canRestore(map)) return factory; } + qWarning("Warning: No factory found for device of type '%s'.", + qPrintable(IDevice::typeFromMap(map))); return 0; } diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.h b/src/plugins/projectexplorer/devicesupport/devicemanager.h index 95710480cf..5ab22fa7c1 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.h +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.h @@ -72,8 +72,6 @@ public: void addDevice(const IDevice::Ptr &device); void removeDevice(int index); - static const IDeviceFactory *factoryForDeviceType(const QString &type); - signals: void deviceUpdated(const Core::Id &id); @@ -90,6 +88,7 @@ private: void load(); void save(); void loadPre2_6(); + static const IDeviceFactory *restoreFactory(const QVariantMap &map); void fromMap(const QVariantMap &map); QVariantMap toMap() const; void ensureOneDefaultDevicePerType(); diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.h b/src/plugins/projectexplorer/devicesupport/idevicefactory.h index c9af9c7123..b4fdda6fff 100644 --- a/src/plugins/projectexplorer/devicesupport/idevicefactory.h +++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.h @@ -76,14 +76,15 @@ public: virtual IDevice::Ptr create() const = 0; /*! - Loads a device from a serialized state. The device must be of a matching type. - */ - virtual IDevice::Ptr loadDevice(const QVariantMap &map) const = 0; + Check whether this factory can restore a device from the given serialized state. + */ + virtual bool canRestore(const QVariantMap &map) const = 0; /*! - Returns true iff this factory supports the given device type. + Loads a device from a serialized state. Will only ever be called if canRestore() + returns true for the given map. */ - virtual bool supportsDeviceType(const QString &type) const = 0; + virtual IDevice::Ptr restore(const QVariantMap &map) const = 0; protected: IDeviceFactory(QObject *parent) : QObject(parent) { } diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.cpp b/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.cpp index 271fa200cb..2de4a5e609 100644 --- a/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.cpp @@ -57,17 +57,16 @@ ProjectExplorer::IDevice::Ptr SymbianIDeviceFactory::create() const return ProjectExplorer::IDevice::Ptr(); } -ProjectExplorer::IDevice::Ptr SymbianIDeviceFactory::loadDevice(const QVariantMap &map) const +bool SymbianIDeviceFactory::canRestore(const QVariantMap &map) const { - QTC_ASSERT(supportsDeviceType(ProjectExplorer::IDevice::typeFromMap(map)), - return ProjectExplorer::IDevice::Ptr()); - SymbianIDevice *dev = new SymbianIDevice(map); - return ProjectExplorer::IDevice::Ptr(dev); + return ProjectExplorer::IDevice::typeFromMap(map) == deviceType(); } -bool SymbianIDeviceFactory::supportsDeviceType(const QString &type) const +ProjectExplorer::IDevice::Ptr SymbianIDeviceFactory::restore(const QVariantMap &map) const { - return type == deviceType(); + QTC_ASSERT(canRestore(map), return ProjectExplorer::IDevice::Ptr()); + SymbianIDevice *dev = new SymbianIDevice(map); + return ProjectExplorer::IDevice::Ptr(dev); } QString SymbianIDeviceFactory::deviceType() diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.h b/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.h index 360c432345..225a3f9ca4 100644 --- a/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.h +++ b/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.h @@ -48,8 +48,8 @@ public: QString displayName() const; bool canCreate() const; ProjectExplorer::IDevice::Ptr create() const; - ProjectExplorer::IDevice::Ptr loadDevice(const QVariantMap &map) const; - bool supportsDeviceType(const QString &type) const; + bool canRestore(const QVariantMap &map) const; + ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const; static QString deviceType(); }; diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp index 7a9f4ad650..670e8653f3 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp @@ -64,18 +64,17 @@ IDevice::Ptr GenericLinuxDeviceConfigurationFactory::create() const return wizard.device(); } -IDevice::Ptr GenericLinuxDeviceConfigurationFactory::loadDevice(const QVariantMap &map) const +bool GenericLinuxDeviceConfigurationFactory::canRestore(const QVariantMap &map) const { - QTC_ASSERT(supportsDeviceType(IDevice::typeFromMap(map)), - return LinuxDeviceConfiguration::Ptr()); - LinuxDeviceConfiguration::Ptr device = LinuxDeviceConfiguration::create(); - device->fromMap(map); - return device; + return IDevice::typeFromMap(map) == QLatin1String(Constants::GenericLinuxOsType); } -bool GenericLinuxDeviceConfigurationFactory::supportsDeviceType(const QString &deviceType) const +IDevice::Ptr GenericLinuxDeviceConfigurationFactory::restore(const QVariantMap &map) const { - return deviceType == QLatin1String(Constants::GenericLinuxOsType); + QTC_ASSERT(canRestore(map), return LinuxDeviceConfiguration::Ptr()); + const LinuxDeviceConfiguration::Ptr device = LinuxDeviceConfiguration::create(); + device->fromMap(map); + return device; } } // namespace RemoteLinux diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h index 884461c5a5..0b8d5ccea1 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h @@ -49,8 +49,8 @@ public: QString displayName() const; bool canCreate() const; ProjectExplorer::IDevice::Ptr create() const; - ProjectExplorer::IDevice::Ptr loadDevice(const QVariantMap &map) const; - bool supportsDeviceType(const QString &deviceType) const; + bool canRestore(const QVariantMap &map) const; + ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const; }; } // namespace RemoteLinux |