From 3bdabea8096b5ea20b7097fc4c480caeb5b7bb9e Mon Sep 17 00:00:00 2001 From: Kai Koehne <kai.koehne@nokia.com> Date: Thu, 8 Apr 2010 13:56:15 +0200 Subject: [PATCH] Cache dynamic properties. (Patch done by marco) --- .../core/instances/nodeinstancemetaobject.cpp | 10 ++++++---- .../core/instances/nodeinstancemetaobject.h | 4 ++-- .../qmldesigner/core/instances/objectnodeinstance.cpp | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp index a99742dc778..befbc524eea 100644 --- a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp +++ b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp @@ -8,18 +8,20 @@ namespace QmlDesigner { namespace Internal { -NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstance::Pointer &nodeInstance) - : QDeclarativeOpenMetaObject(nodeInstance->object()), +NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstance::Pointer &nodeInstance, QDeclarativeEngine *engine) + : QDeclarativeOpenMetaObject(nodeInstance->object(), new QDeclarativeOpenMetaObjectType(nodeInstance->object()->metaObject(), engine)), m_nodeInstance(nodeInstance), m_context(nodeInstance->modelNode().isRootNode() ? nodeInstance->context() : 0) { + setCached(true); } -NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix) - : QDeclarativeOpenMetaObject(object), +NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QDeclarativeEngine *engine) + : QDeclarativeOpenMetaObject(object, new QDeclarativeOpenMetaObjectType(object->metaObject(), engine)), m_nodeInstance(nodeInstance), m_prefix(prefix) { + setCached(true); } void NodeInstanceMetaObject::createNewProperty(const QString &name) diff --git a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h index 9a877f2322b..795c5171896 100644 --- a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h +++ b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h @@ -14,8 +14,8 @@ typedef QWeakPointer<ObjectNodeInstance> ObjectNodeInstanceWeakPointer; class NodeInstanceMetaObject : public QDeclarativeOpenMetaObject { public: - NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance); - NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix); + NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QDeclarativeEngine *engine); + NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QDeclarativeEngine *engine); void createNewProperty(const QString &name); protected: diff --git a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp index 4dc99587e72..446be865f6c 100644 --- a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp +++ b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp @@ -176,12 +176,12 @@ void ObjectNodeInstance::initializePropertyWatcher(const ObjectNodeInstance::Poi { if (!objectNodeInstance->modelNode().metaInfo().isComponent()) { // TODO: this is a nasty workaround which needs to be removed const QMetaObject *metaObject = objectNodeInstance->object()->metaObject(); - m_metaObject = new NodeInstanceMetaObject(objectNodeInstance); + m_metaObject = new NodeInstanceMetaObject(objectNodeInstance, nodeInstanceView()->engine()); for(int propertyIndex = QObject::staticMetaObject.propertyCount(); propertyIndex < metaObject->propertyCount(); propertyIndex++) { if (QDeclarativeMetaType::isQObject(metaObject->property(propertyIndex).userType())) { QObject *propertyObject = QDeclarativeMetaType::toQObject(metaObject->property(propertyIndex).read(objectNodeInstance->object())); if (propertyObject && hasPropertiesWitoutNotifications(propertyObject->metaObject())) { - new NodeInstanceMetaObject(objectNodeInstance, propertyObject, metaObject->property(propertyIndex).name()); + new NodeInstanceMetaObject(objectNodeInstance, propertyObject, metaObject->property(propertyIndex).name(), nodeInstanceView()->engine()); } } } -- GitLab