summaryrefslogtreecommitdiffstats
path: root/src/corelib/plugin/qfactoryloader.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-05-04 15:57:21 +0200
committerQt by Nokia <qt-info@nokia.com>2012-05-07 12:57:48 +0200
commit053576e88045642a0d34003d57a2d087cc5d903f (patch)
treec55242cc30ec0e2fdd3e4b913154e0cdacebf5bc /src/corelib/plugin/qfactoryloader.cpp
parent864f930ba9e78dc2239d62bcf4038aead5e0490a (diff)
QFactoryLoader: Add API for supporting the metadata containing keys.
- Add a method returning a QMultiMap<int index, QString key> to QFactoryLoader, determined from metadata(), correctly reflecting the data structure ('Keys' being a list) - Add convenience templates to create plugins via factory interfaces Change-Id: I247749aa3245f635e476605db1c4cd9c74b74dea Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/corelib/plugin/qfactoryloader.cpp')
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index fc9e94037f..67b59f96ec 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -370,6 +370,39 @@ void QFactoryLoader::refreshAll()
}
}
+QMultiMap<int, QString> QFactoryLoader::keyMap() const
+{
+ QMultiMap<int, QString> result;
+ const QString metaDataKey = QStringLiteral("MetaData");
+ const QString keysKey = QStringLiteral("Keys");
+ const QList<QJsonObject> metaDataList = metaData();
+ for (int i = 0; i < metaDataList.size(); ++i) {
+ const QJsonObject metaData = metaDataList.at(i).value(metaDataKey).toObject();
+ const QJsonArray keys = metaData.value(keysKey).toArray();
+ const int keyCount = keys.size();
+ for (int k = 0; k < keyCount; ++k)
+ result.insert(i, keys.at(k).toString());
+ }
+ return result;
+}
+
+int QFactoryLoader::indexOf(const QString &needle) const
+{
+ const QString metaDataKey = QStringLiteral("MetaData");
+ const QString keysKey = QStringLiteral("Keys");
+ const QList<QJsonObject> metaDataList = metaData();
+ for (int i = 0; i < metaDataList.size(); ++i) {
+ const QJsonObject metaData = metaDataList.at(i).value(metaDataKey).toObject();
+ const QJsonArray keys = metaData.value(keysKey).toArray();
+ const int keyCount = keys.size();
+ for (int k = 0; k < keyCount; ++k) {
+ if (!keys.at(k).toString().compare(needle, Qt::CaseInsensitive))
+ return i;
+ }
+ }
+ return -1;
+}
+
QT_END_NAMESPACE
#endif // QT_NO_LIBRARY