diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2012-05-04 15:57:21 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-07 12:57:48 +0200 |
commit | 053576e88045642a0d34003d57a2d087cc5d903f (patch) | |
tree | c55242cc30ec0e2fdd3e4b913154e0cdacebf5bc /src/corelib/plugin/qfactoryloader.cpp | |
parent | 864f930ba9e78dc2239d62bcf4038aead5e0490a (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.cpp | 33 |
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 |