diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-05-01 04:37:50 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-05-01 04:37:50 (GMT) |
commit | ed07e08b5d5d3ce8a514e9a9974fe6e581f24d0d (patch) | |
tree | 10221c7b589beee908de93707c35cbf590eeea18 /src/declarative/qml/qmlscriptparser.cpp | |
parent | 4eb455e6e109052ec39b10bfe36f7649c3c7cf0b (diff) | |
download | Qt-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.cpp | 76 |
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; } |