From df2569938eba28a50621d28101a8af620bd107dd Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 10 Oct 2012 15:12:43 +0200 Subject: DeviceManagerModel: Allow filtering by device type Change-Id: Id19437fa64594231e1516ed60c913f77a1923fa2 Reviewed-by: Christian Kandeler --- .../devicesupport/devicemanagermodel.cpp | 26 +++++++++++++++++++--- .../devicesupport/devicemanagermodel.h | 2 ++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp index bf9d0506c9..281b141395 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp @@ -44,6 +44,7 @@ public: const DeviceManager *deviceManager; QList devices; QList filter; + Core::Id typeToKeep; }; } // namespace Internal @@ -69,6 +70,14 @@ void DeviceManagerModel::setFilter(const QList filter) handleDeviceListChanged(); } +void DeviceManagerModel::setTypeFilter(const Core::Id &type) +{ + if (d->typeToKeep == type) + return; + d->typeToKeep = type; + handleDeviceListChanged(); +} + void DeviceManagerModel::updateDevice(Core::Id id) { handleDeviceUpdated(id); @@ -93,7 +102,6 @@ int DeviceManagerModel::indexOf(IDevice::ConstPtr dev) const { if (dev.isNull()) return -1; - for (int i = 0; i < d->devices.count(); ++i) { IDevice::ConstPtr current = d->devices.at(i); if (current->id() == dev->id()) @@ -104,8 +112,14 @@ int DeviceManagerModel::indexOf(IDevice::ConstPtr dev) const void DeviceManagerModel::handleDeviceAdded(Core::Id id) { + if (d->filter.contains(id)) + return; + IDevice::ConstPtr dev = d->deviceManager->find(id); + if (!matchesTypeFilter(dev)) + return; + beginInsertRows(QModelIndex(), rowCount(), rowCount()); - d->devices << d->deviceManager->find(id); + d->devices << dev; endInsertRows(); } @@ -136,6 +150,8 @@ void DeviceManagerModel::handleDeviceListChanged() IDevice::ConstPtr dev = d->deviceManager->deviceAt(i); if (d->filter.contains(dev->id())) continue; + if (!matchesTypeFilter(dev)) + continue; d->devices << dev; } endResetModel(); @@ -164,6 +180,11 @@ QVariant DeviceManagerModel::data(const QModelIndex &index, int role) const return name; } +bool DeviceManagerModel::matchesTypeFilter(const IDevice::ConstPtr &dev) const +{ + return !d->typeToKeep.isValid() || dev->type() == d->typeToKeep; +} + int DeviceManagerModel::indexForId(Core::Id id) const { for (int i = 0; i < d->devices.count(); ++i) { @@ -171,7 +192,6 @@ int DeviceManagerModel::indexForId(Core::Id id) const return i; } - qWarning("%s: Invalid id %s.", Q_FUNC_INFO, qPrintable(id.toString())); return -1; } diff --git a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.h b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.h index 7b1a2a8fcb..757ac98297 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.h +++ b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.h @@ -49,6 +49,7 @@ public: ~DeviceManagerModel(); void setFilter(const QList filter); + void setTypeFilter(const Core::Id &type); IDevice::ConstPtr device(int pos) const; Core::Id deviceId(int pos) const; @@ -66,6 +67,7 @@ private slots: private: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + bool matchesTypeFilter(const IDevice::ConstPtr &dev) const; Internal::DeviceManagerModelPrivate * const d; }; -- cgit v1.2.3