Add convenience method for creating accessor properties
authorLars Knoll <lars.knoll@digia.com>
Mon, 10 Jun 2013 14:16:40 +0000 (16:16 +0200)
committerSimon Hausmann <simon.hausmann@digia.com>
Tue, 11 Jun 2013 04:56:43 +0000 (06:56 +0200)
Change-Id: I982cd16e6069e444a9311fe7695a56b7fbdfb161
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/qml/qml/v4/qv4object.cpp
src/qml/qml/v4/qv4object_p.h
src/qml/types/qqmldelegatemodel.cpp

index f64ab60..89b8575 100644 (file)
@@ -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);
index a2fb50d..98bb218 100644 (file)
@@ -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);
index 7e9585c..8effbd8 100644 (file)
@@ -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")),