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>
This commit is contained in:
Tobias Hunger
2012-04-05 15:40:12 +02:00
parent ffa46fd251
commit d0f8fdb29d
3 changed files with 13 additions and 3 deletions

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -153,6 +153,8 @@ namespace Internal {
class IDevicePrivate
{
public:
IDevicePrivate() : internalId(IDevice::invalidId()) { }
QString displayName;
QString type;
IDevice::Origin origin;