From: Lars Knoll Date: Mon, 10 Jun 2013 14:16:40 +0000 (+0200) Subject: Add convenience method for creating accessor properties X-Git-Tag: upstream/5.2.1~669^2~276 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3d483980723ddf84cbb9a1586a6ff5eb6ee0d807;p=platform%2Fupstream%2Fqtdeclarative.git Add convenience method for creating accessor properties Change-Id: I982cd16e6069e444a9311fe7695a56b7fbdfb161 Reviewed-by: Simon Hausmann --- diff --git a/src/qml/qml/v4/qv4object.cpp b/src/qml/qml/v4/qv4object.cpp index f64ab60..89b8575 100644 --- a/src/qml/qml/v4/qv4object.cpp +++ b/src/qml/qml/v4/qv4object.cpp @@ -221,6 +221,23 @@ void Object::defineDefaultProperty(ExecutionEngine *engine, const QString &name, defineDefaultProperty(s, Value::fromObject(function)); } +void Object::defineAccessorProperty(ExecutionEngine *engine, const QString &name, + Value (*getter)(SimpleCallContext *), Value (*setter)(SimpleCallContext *)) +{ + String *s = engine->newString(name); + defineAccessorProperty(s, getter, setter); +} + +void Object::defineAccessorProperty(String *name, Value (*getter)(SimpleCallContext *), Value (*setter)(SimpleCallContext *)) +{ + ExecutionEngine *v4 = engine(); + Property *p = insertMember(name, QV4::Attr_Accessor|QV4::Attr_NotConfigurable|QV4::Attr_NotEnumerable); + if (getter) + p->setGetter(v4->newBuiltinFunction(v4->rootContext, name, getter)); + if (setter) + p->setSetter(v4->newBuiltinFunction(v4->rootContext, name, setter)); +} + void Object::defineReadonlyProperty(ExecutionEngine *engine, const QString &name, Value value) { defineReadonlyProperty(engine->newIdentifier(name), value); diff --git a/src/qml/qml/v4/qv4object_p.h b/src/qml/qml/v4/qv4object_p.h index a2fb50d..98bb218 100644 --- a/src/qml/qml/v4/qv4object_p.h +++ b/src/qml/qml/v4/qv4object_p.h @@ -171,6 +171,8 @@ struct Q_QML_EXPORT Object: Managed { void defineDefaultProperty(ExecutionEngine *engine, const QString &name, Value value); void defineDefaultProperty(ExecutionContext *context, const QString &name, Value (*code)(SimpleCallContext *), int count = 0); void defineDefaultProperty(ExecutionEngine *engine, const QString &name, Value (*code)(SimpleCallContext *), int count = 0); + void defineAccessorProperty(ExecutionEngine *engine, const QString &name, Value (*getter)(SimpleCallContext *), Value (*setter)(SimpleCallContext *)); + void defineAccessorProperty(String *name, Value (*getter)(SimpleCallContext *), Value (*setter)(SimpleCallContext *)); /* Fixed: Writable: false, Enumerable: false, Configurable: false */ void defineReadonlyProperty(ExecutionEngine *engine, const QString &name, Value value); void defineReadonlyProperty(String *name, Value value); diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp index 7e9585c..8effbd8 100644 --- a/src/qml/types/qqmldelegatemodel.cpp +++ b/src/qml/types/qqmldelegatemodel.cpp @@ -1592,14 +1592,9 @@ void QQmlDelegateModelItemMetaType::initializePrototype() QV4::ExecutionEngine *v4 = QV8Engine::getV4(v8Engine); QV4::Object *proto = v4->newObject(); - QV4::Property *p = proto->insertMember(v4->newString(QStringLiteral("model")), - QV4::Attr_Accessor|QV4::Attr_NotConfigurable|QV4::Attr_NotEnumerable); - p->setGetter(v4->newBuiltinFunction(v4->rootContext, v4->newString(QStringLiteral("model")), QQmlDelegateModelItem::get_model)); - p = proto->insertMember(v4->newString(QStringLiteral("groups")), - QV4::Attr_Accessor|QV4::Attr_NotConfigurable|QV4::Attr_NotEnumerable); - p->setGetter(v4->newBuiltinFunction(v4->rootContext, v4->newString(QStringLiteral("groups")), QQmlDelegateModelItem::get_groups)); - p->setSetter(v4->newBuiltinFunction(v4->rootContext, v4->newString(QStringLiteral("groups")), QQmlDelegateModelItem::set_groups)); - p = proto->insertMember(v4->newString(QStringLiteral("isUnresolved")), + proto->defineAccessorProperty(v4, QStringLiteral("model"), QQmlDelegateModelItem::get_model, 0); + proto->defineAccessorProperty(v4, QStringLiteral("groups"), QQmlDelegateModelItem::get_groups, QQmlDelegateModelItem::set_groups); + QV4::Property *p = proto->insertMember(v4->newString(QStringLiteral("isUnresolved")), QV4::Attr_Accessor|QV4::Attr_NotConfigurable|QV4::Attr_NotEnumerable); p->setGetter(new (v4->memoryManager) DelegateModelGroupFunction(v4->rootContext, 30, QQmlDelegateModelItem::get_member)); p = proto->insertMember(v4->newString(QStringLiteral("inItems")),