aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@digia.com>2012-10-10 15:12:43 +0200
committerTobias Hunger <tobias.hunger@digia.com>2012-10-15 13:32:02 +0200
commitdf2569938eba28a50621d28101a8af620bd107dd (patch)
tree0be149eb85fb000e249139bd400a907ab1da4627
parent52bf349bf3395fa99af522431592d90ed6ffad55 (diff)
DeviceManagerModel: Allow filtering by device type
Change-Id: Id19437fa64594231e1516ed60c913f77a1923fa2 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp26
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanagermodel.h2
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<IDevice::ConstPtr> devices;
QList<Core::Id> filter;
+ Core::Id typeToKeep;
};
} // namespace Internal
@@ -69,6 +70,14 @@ void DeviceManagerModel::setFilter(const QList<Core::Id> 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<Core::Id> 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;
};