forked from qt-creator/qt-creator
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:
@@ -226,8 +226,10 @@ QString DeviceManager::settingsFilePath()
|
|||||||
void DeviceManager::addDevice(const IDevice::Ptr &device)
|
void DeviceManager::addDevice(const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(this != instance() || (device->isAutoDetected()), return);
|
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.
|
// Ensure uniqueness of name.
|
||||||
QString name = device->displayName();
|
QString name = device->displayName();
|
||||||
@@ -239,7 +241,8 @@ void DeviceManager::addDevice(const IDevice::Ptr &device)
|
|||||||
while (hasDevice(name));
|
while (hasDevice(name));
|
||||||
}
|
}
|
||||||
device->setDisplayName(name);
|
device->setDisplayName(name);
|
||||||
device->setInternalId(unusedId());
|
if (pos < 0)
|
||||||
|
device->setInternalId(unusedId());
|
||||||
if (!defaultDevice(device->type()))
|
if (!defaultDevice(device->type()))
|
||||||
d->defaultDevices.insert(device->type(), device->internalId());
|
d->defaultDevices.insert(device->type(), device->internalId());
|
||||||
d->devices << device;
|
d->devices << device;
|
||||||
@@ -258,6 +261,9 @@ void DeviceManager::addDevice(const IDevice::Ptr &device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
emit deviceAdded(device);
|
emit deviceAdded(device);
|
||||||
|
if (pos >= 0)
|
||||||
|
emit deviceUpdated(device->internalId());
|
||||||
|
|
||||||
emit updated();
|
emit updated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -73,6 +73,8 @@ public:
|
|||||||
static const IDeviceFactory *factoryForDeviceType(const QString &type);
|
static const IDeviceFactory *factoryForDeviceType(const QString &type);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
void deviceUpdated(ProjectExplorer::IDevice::Id id);
|
||||||
|
|
||||||
void deviceAdded(const QSharedPointer<const IDevice> &device);
|
void deviceAdded(const QSharedPointer<const IDevice> &device);
|
||||||
void deviceRemoved(int index);
|
void deviceRemoved(int index);
|
||||||
void displayNameChanged(int index);
|
void displayNameChanged(int index);
|
||||||
|
@@ -153,6 +153,8 @@ namespace Internal {
|
|||||||
class IDevicePrivate
|
class IDevicePrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
IDevicePrivate() : internalId(IDevice::invalidId()) { }
|
||||||
|
|
||||||
QString displayName;
|
QString displayName;
|
||||||
QString type;
|
QString type;
|
||||||
IDevice::Origin origin;
|
IDevice::Origin origin;
|
||||||
|
Reference in New Issue
Block a user