aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-09-21 12:54:10 +0200
committerQt by Nokia <qt-info@nokia.com>2011-09-21 15:28:01 +0200
commit26e15e877fb7db31928e1e90aa50bca841522711 (patch)
tree35bb6bd886ce82353a008cec7527d63b0f82536b
parent43ff44058d75bec6ad1b8a597fe52009c2bee610 (diff)
qmlplugindump: Describe meta object revisions of exported types.
Adds the exportMetaObjectRevisions property to generated qmltypes files. Change-Id: Iafe2fe408c88bb6dd02cbb558404a5f654431248 Reviewed-on: http://codereview.qt-project.org/5311 Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
-rw-r--r--doc/src/declarative/modules.qdoc9
-rw-r--r--tools/qmlplugindump/main.cpp37
-rw-r--r--tools/qmlplugindump/qmlstreamwriter.cpp16
3 files changed, 49 insertions, 13 deletions
diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc
index efca620e43..259c77ff3c 100644
--- a/doc/src/declarative/modules.qdoc
+++ b/doc/src/declarative/modules.qdoc
@@ -445,6 +445,13 @@ Module {
"QtQuick/Animation 1.0"
]
+ // The meta object revisions for the exports specified in 'exports'.
+ // Describes with revisioned properties will be visible in an export.
+ // The list must have exactly the same length as the 'exports' list.
+ // For example the 'animations' propery described below will only be
+ // available through the QtQuick/Animation 1.0 export.
+ exportMetaObjectRevisions: [0, 1]
+
Property {
name: "animations";
type: "QDeclarativeAbstractAnimation"
@@ -454,7 +461,7 @@ Module {
isPointer: true
// defaults to false: whether the type actually is a QDeclarativeListProperty<type>
isList: true
- // defaults to 0: the minor version that introduced this property
+ // defaults to 0: the meta object revision that introduced this property
revision: 1
}
Property { name: "loops"; type: "int" }
diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp
index c53fd3c7fd..6132d15d0d 100644
--- a/tools/qmlplugindump/main.cpp
+++ b/tools/qmlplugindump/main.cpp
@@ -256,30 +256,43 @@ public:
QSet<const QDeclarativeType *> qmlTypes = qmlTypesByCppName.value(meta->className());
if (!qmlTypes.isEmpty()) {
- QStringList exports;
+ QHash<QString, const QDeclarativeType *> exports;
foreach (const QDeclarativeType *qmlTy, qmlTypes) {
QString qmlTyName = qmlTy->qmlTypeName();
- // some qmltype names are missing the actual names, ignore that import
- if (qmlTyName.endsWith('/'))
- continue;
if (qmlTyName.startsWith(relocatableModuleUri + QLatin1Char('/'))) {
qmlTyName.remove(0, relocatableModuleUri.size() + 1);
}
if (qmlTyName.startsWith("./")) {
qmlTyName.remove(0, 2);
}
- exports += enquote(QString("%1 %2.%3").arg(
- qmlTyName,
- QString::number(qmlTy->majorVersion()),
- QString::number(qmlTy->minorVersion())));
+ if (qmlTyName.startsWith("/")) {
+ qmlTyName.remove(0, 1);
+ }
+ const QString exportString = enquote(
+ QString("%1 %2.%3").arg(
+ qmlTyName,
+ QString::number(qmlTy->majorVersion()),
+ QString::number(qmlTy->minorVersion())));
+ exports.insert(exportString, qmlTy);
}
// ensure exports are sorted and don't change order when the plugin is dumped again
- exports.removeDuplicates();
- qSort(exports);
-
- qml->writeArrayBinding(QLatin1String("exports"), exports);
+ QStringList exportStrings = exports.keys();
+ qSort(exportStrings);
+ qml->writeArrayBinding(QLatin1String("exports"), exportStrings);
+
+ // write meta object revisions unless they're all zero
+ QStringList metaObjectRevisions;
+ bool shouldWriteMetaObjectRevisions = false;
+ foreach (const QString &exportString, exportStrings) {
+ int metaObjectRevision = exports[exportString]->metaObjectRevision();
+ if (metaObjectRevision != 0)
+ shouldWriteMetaObjectRevisions = true;
+ metaObjectRevisions += QString::number(metaObjectRevision);
+ }
+ if (shouldWriteMetaObjectRevisions)
+ qml->writeArrayBinding(QLatin1String("exportMetaObjectRevisions"), metaObjectRevisions);
if (const QMetaObject *attachedType = (*qmlTypes.begin())->attachedPropertiesType()) {
qml->writeScriptBinding(QLatin1String("attachedType"), enquote(
diff --git a/tools/qmlplugindump/qmlstreamwriter.cpp b/tools/qmlplugindump/qmlstreamwriter.cpp
index ca52a7a3f8..a5c110ee3f 100644
--- a/tools/qmlplugindump/qmlstreamwriter.cpp
+++ b/tools/qmlplugindump/qmlstreamwriter.cpp
@@ -110,6 +110,22 @@ void QmlStreamWriter::writeArrayBinding(const QString &name, const QStringList &
{
flushPotentialLinesWithNewlines();
writeIndent();
+
+ // try to use a single line
+ QString singleLine;
+ singleLine += QString("%1: [").arg(name);
+ for (int i = 0; i < elements.size(); ++i) {
+ singleLine += elements.at(i);
+ if (i != elements.size() - 1)
+ singleLine += QLatin1String(", ");
+ }
+ singleLine += QLatin1String("]\n");
+ if (singleLine.size() + m_indentDepth * 4 < 80) {
+ m_stream->write(singleLine.toUtf8());
+ return;
+ }
+
+ // write multi-line
m_stream->write(QString("%1: [\n").arg(name).toUtf8());
++m_indentDepth;
for (int i = 0; i < elements.size(); ++i) {