summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@nokia.com>2012-04-05 15:40:12 +0200
committerTobias Hunger <tobias.hunger@nokia.com>2012-04-10 16:35:44 +0200
commitd0f8fdb29dbaff48c9aec7f3e771b1b0f647e664 (patch)
tree20ac90ec32c6bdaacedff31e8cab4ec3ad8f0ee1 /src/plugins/projectexplorer
parentffa46fd251e52903afa7f04ed3e2ad0574072a08 (diff)
downloadqt-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')
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanager.cpp12
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanager.h2
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevice.cpp2
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;