summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qmlscriptparser.cpp
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2009-05-01 04:37:50 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2009-05-01 04:37:50 (GMT)
commited07e08b5d5d3ce8a514e9a9974fe6e581f24d0d (patch)
tree10221c7b589beee908de93707c35cbf590eeea18 /src/declarative/qml/qmlscriptparser.cpp
parent4eb455e6e109052ec39b10bfe36f7649c3c7cf0b (diff)
downloadQt-ed07e08b5d5d3ce8a514e9a9974fe6e581f24d0d.zip
Qt-ed07e08b5d5d3ce8a514e9a9974fe6e581f24d0d.tar.gz
Qt-ed07e08b5d5d3ce8a514e9a9974fe6e581f24d0d.tar.bz2
Tweak QML property syntax
The syntax is now [default] property <type> <name> [ : <expression> ] where name is one of "int", "bool", "double", "real", "string", "color", "date", "var" or "variant"
Diffstat (limited to 'src/declarative/qml/qmlscriptparser.cpp')
-rw-r--r--src/declarative/qml/qmlscriptparser.cpp76
1 files changed, 41 insertions, 35 deletions
diff --git a/src/declarative/qml/qmlscriptparser.cpp b/src/declarative/qml/qmlscriptparser.cpp
index 61cb2ee..89cde7b 100644
--- a/src/declarative/qml/qmlscriptparser.cpp
+++ b/src/declarative/qml/qmlscriptparser.cpp
@@ -337,46 +337,52 @@ bool ProcessAST::visit(AST::UiPublicMember *node)
const QString memberType = node->memberType->asString();
const QString name = node->name->asString();
- if (node->isDefaultMember)
- qWarning() << "default-ness not implemented";
-
- if (memberType == QLatin1String("property")) {
- _stateStack.pushProperty(QLatin1String("properties"), node->publicToken.startLine);
-
- Object *obj = defineObjectBinding(node->identifierToken.startLine,
- 0,
- QLatin1String("Property"));
-
- _stateStack.pushObject(obj);
-
- defineProperty(QLatin1String("name"), node->identifierToken.startLine, name);
- if (node->expression) // default value
- defineProperty(QLatin1String("value"), node->identifierToken.startLine, getPrimitive("value", node->expression));
-
- _stateStack.pop(); // object
- _stateStack.pop(); // properties
-
- } else if (memberType == QLatin1String("signal")) {
- _stateStack.pushProperty(QLatin1String("signals"), node->publicToken.startLine);
-
- Object *obj = defineObjectBinding(node->identifierToken.startLine,
- 0,
- QLatin1String("Signal"));
-
- _stateStack.pushObject(obj);
+ const struct TypeNameToType {
+ const char *name;
+ Object::DynamicProperty::Type type;
+ } propTypeNameToTypes[] = {
+ { "int", Object::DynamicProperty::Int },
+ { "bool", Object::DynamicProperty::Bool },
+ { "double", Object::DynamicProperty::Real },
+ { "real", Object::DynamicProperty::Real },
+ { "string", Object::DynamicProperty::String },
+ { "color", Object::DynamicProperty::Color },
+ { "date", Object::DynamicProperty::Date },
+ { "var", Object::DynamicProperty::Variant },
+ { "variant", Object::DynamicProperty::Variant }
+ };
+ const int propTypeNameToTypesCount = sizeof(propTypeNameToTypes) /
+ sizeof(propTypeNameToTypes[0]);
+
+ bool typeFound = false;
+ Object::DynamicProperty::Type type;
+ for(int ii = 0; !typeFound && ii < propTypeNameToTypesCount; ++ii) {
+ if(QLatin1String(propTypeNameToTypes[ii].name) == memberType) {
+ type = propTypeNameToTypes[ii].type;
+ typeFound = true;
+ }
+ }
+
+ if(!typeFound) {
+ qWarning() << "Unknown property type" << memberType; // ### FIXME
+ return false;
+ }
- defineProperty(QLatin1String("name"), node->identifierToken.startLine, name);
+ Object::DynamicProperty property;
+ property.isDefaultProperty = node->isDefaultMember;
+ property.type = type;
+ property.name = name.toUtf8();
- _stateStack.pop(); // object
- _stateStack.pop(); // signals
- } else {
- qWarning() << "bad public identifier" << memberType; // ### FIXME
+ if (node->expression) { // default value
+ property.defaultValue = new Property;
+ Value *value = new Value;
+ value->primitive = getPrimitive("value", node->expression);
+ property.defaultValue->values << value;
}
+ _stateStack.top().object->dynamicProperties << property;
- // ### TODO drop initializer (unless some example needs differnet properties than name and type and value.
-
- return false;
+ return true;
}