summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/devicesupport
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/projectexplorer/devicesupport')
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanager.cpp14
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanager.h3
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevicefactory.h11
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) { }