PluginManager: Introduce a getObjects() function taking a predicate

Change-Id: I8a822d76a3dc358de48e96801e4e531f3bbb8669
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@digia.com>
Reviewed-by: hjk <hjk121@nokiamail.com>
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
This commit is contained in:
Daniel Teske
2014-05-06 18:33:10 +02:00
parent 248964789a
commit ce1a691abe
3 changed files with 69 additions and 1 deletions

View File

@@ -75,6 +75,19 @@ public:
}
return results;
}
template <typename T, typename Predicate>
static QList<T *> getObjects(Predicate predicate)
{
QReadLocker lock(listLock());
QList<T *> results;
QList<QObject *> all = allObjects();
foreach (QObject *obj, all) {
T *result = qobject_cast<T *>(obj);
if (result && predicate(result))
results += result;
}
return results;
}
template <typename T> static T *getObject()
{
QReadLocker lock(listLock());
@@ -85,6 +98,17 @@ public:
}
return 0;
}
template <typename T, typename Predicate> static T *getObject(Predicate predicate)
{
QReadLocker lock(listLock());
QList<QObject *> all = allObjects();
foreach (QObject *obj, all) {
if (T *result = qobject_cast<T *>(obj))
if (predicate(result))
return result;
}
return 0;
}
static QObject *getObjectByName(const QString &name);
static QObject *getObjectByClassName(const QString &className);