diff options
Diffstat (limited to 'src/plugins/projectexplorer/devicesupport')
3 files changed, 15 insertions, 13 deletions
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) { } |