diff options
author | Tobias Hunger <tobias.hunger@nokia.com> | 2012-04-05 15:40:12 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@nokia.com> | 2012-04-10 16:35:44 +0200 |
commit | d0f8fdb29dbaff48c9aec7f3e771b1b0f647e664 (patch) | |
tree | 20ac90ec32c6bdaacedff31e8cab4ec3ad8f0ee1 /src/plugins/projectexplorer | |
parent | ffa46fd251e52903afa7f04ed3e2ad0574072a08 (diff) | |
download | qt-creator-d0f8fdb29dbaff48c9aec7f3e771b1b0f647e664.tar.gz |
DeviceManager: Allow for replacements of devices
When adding a device with an existing internalId, the devicemanager
will now replace the device with that id, calling remove on the old
one and adding the new one afterwards.
The DeviceManager also emits a deviceUpdated signal with the id of
the device that was changed.
Change-Id: I88c789de355f3e059dbf909c20f58548a2fd46fc
Reviewed-by: Christian Kandeler <christian.kandeler@nokia.com>
Diffstat (limited to 'src/plugins/projectexplorer')
3 files changed, 13 insertions, 3 deletions
diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index 667ae31e9d..6291a697cc 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -226,8 +226,10 @@ QString DeviceManager::settingsFilePath() void DeviceManager::addDevice(const IDevice::Ptr &device) { QTC_ASSERT(this != instance() || (device->isAutoDetected()), return); - QTC_ASSERT(!device->isAutoDetected() || !findAutoDetectedDevice(d->devices, device->type(), - device->fingerprint()), return); + + const int pos = indexForInternalId(device->internalId()); + if (pos >= 0) + removeDevice(pos); // Ensure uniqueness of name. QString name = device->displayName(); @@ -239,7 +241,8 @@ void DeviceManager::addDevice(const IDevice::Ptr &device) while (hasDevice(name)); } device->setDisplayName(name); - device->setInternalId(unusedId()); + if (pos < 0) + device->setInternalId(unusedId()); if (!defaultDevice(device->type())) d->defaultDevices.insert(device->type(), device->internalId()); d->devices << device; @@ -258,6 +261,9 @@ void DeviceManager::addDevice(const IDevice::Ptr &device) } emit deviceAdded(device); + if (pos >= 0) + emit deviceUpdated(device->internalId()); + emit updated(); } diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.h b/src/plugins/projectexplorer/devicesupport/devicemanager.h index c48b346ffc..accd04b520 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.h +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.h @@ -73,6 +73,8 @@ public: static const IDeviceFactory *factoryForDeviceType(const QString &type); signals: + void deviceUpdated(ProjectExplorer::IDevice::Id id); + void deviceAdded(const QSharedPointer<const IDevice> &device); void deviceRemoved(int index); void displayNameChanged(int index); diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index 0b93450188..9c44012d6b 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -153,6 +153,8 @@ namespace Internal { class IDevicePrivate { public: + IDevicePrivate() : internalId(IDevice::invalidId()) { } + QString displayName; QString type; IDevice::Origin origin; |