summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qmlcompiler.cpp
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2009-10-09 10:17:04 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2009-10-09 10:17:04 (GMT)
commita700d7c263748d3635eb06a7091164fd75ec608c (patch)
tree17fc6e408bc49003ddb5800ca6a60f5725849626 /src/declarative/qml/qmlcompiler.cpp
parent65aa9ff2704fed181eee2b189fc0db81a59ff75f (diff)
downloadQt-a700d7c263748d3635eb06a7091164fd75ec608c.zip
Qt-a700d7c263748d3635eb06a7091164fd75ec608c.tar.gz
Qt-a700d7c263748d3635eb06a7091164fd75ec608c.tar.bz2
Add id aliases
Diffstat (limited to 'src/declarative/qml/qmlcompiler.cpp')
-rw-r--r--src/declarative/qml/qmlcompiler.cpp33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp
index 8856892..d36b1c9 100644
--- a/src/declarative/qml/qmlcompiler.cpp
+++ b/src/declarative/qml/qmlcompiler.cpp
@@ -2236,31 +2236,44 @@ bool QmlCompiler::compileAlias(QMetaObjectBuilder &builder,
QStringList alias = astNodeToStringList(node);
- if (alias.count() != 2)
+ if (alias.count() != 1 && alias.count() != 2)
COMPILE_EXCEPTION(prop.defaultValue, "Invalid alias location");
if (!compileState.ids.contains(alias.at(0)))
COMPILE_EXCEPTION(prop.defaultValue, "Invalid alias location");
Object *idObject = compileState.ids[alias.at(0)];
- int propIdx = idObject->metaObject()->indexOfProperty(alias.at(1).toUtf8().constData());
- if (-1 == propIdx)
- COMPILE_EXCEPTION(prop.defaultValue, "Invalid alias location");
+ QByteArray typeName;
+
+ int propIdx = -1;
+ bool writable = false;
+ if (alias.count() == 2) {
+ propIdx = idObject->metaObject()->indexOfProperty(alias.at(1).toUtf8().constData());
+
+ if (-1 == propIdx)
+ COMPILE_EXCEPTION(prop.defaultValue, "Invalid alias location");
+
+ QMetaProperty aliasProperty = idObject->metaObject()->property(propIdx);
+ writable = aliasProperty.isWritable();
- QMetaProperty aliasProperty = idObject->metaObject()->property(propIdx);
+ if (aliasProperty.isEnumType())
+ typeName = "int"; // Avoid introducing a dependency on the aliased metaobject
+ else
+ typeName = aliasProperty.typeName();
+ } else {
+ typeName = idObject->metaObject()->className();
+ typeName += "*";
+ }
data.append((const char *)&idObject->idIndex, sizeof(idObject->idIndex));
data.append((const char *)&propIdx, sizeof(propIdx));
- const char *typeName = aliasProperty.typeName();
- if (aliasProperty.isEnumType())
- typeName = "int"; // Avoid introducing a dependency on the aliased metaobject
-
builder.addSignal(prop.name + "Changed()");
QMetaPropertyBuilder propBuilder =
- builder.addProperty(prop.name, typeName, builder.methodCount() - 1);
+ builder.addProperty(prop.name, typeName.constData(), builder.methodCount() - 1);
propBuilder.setScriptable(true);
+ propBuilder.setWritable(writable);
return true;
}