From bf33e654aa0cde3f896a6707689ea5761cbf6970 Mon Sep 17 00:00:00 2001 From: Marco Bubke <marco.bubke@nokia.com> Date: Wed, 9 Jun 2010 14:52:33 +0200 Subject: [PATCH] Get in component and connect every signal to the signal watcher This is improving the updating. --- .../instances/nodeinstancesignalspy.cpp | 28 +++++++++++++++++++ .../instances/nodeinstancesignalspy.h | 1 + 2 files changed, 29 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstancesignalspy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstancesignalspy.cpp index f28a8768ab5..d47bf05fe37 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstancesignalspy.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstancesignalspy.cpp @@ -26,10 +26,16 @@ void NodeInstanceSignalSpy::setObjectNodeInstance(const ObjectNodeInstance::Poin void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const QString &prefix) { + if (registeredObjectList.contains(spiedObject)) // prevent cycles + return; + + registeredObjectList.append(spiedObject); for (int index = QObject::staticMetaObject.propertyOffset(); index < spiedObject->metaObject()->propertyCount(); index++) { QMetaProperty metaProperty = spiedObject->metaObject()->property(index); + + // handle dot properties and connect the signals to the object if (metaProperty.isReadable() && !metaProperty.isWritable() && QDeclarativeMetaType::isQObject(metaProperty.userType())) { @@ -43,6 +49,28 @@ void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const QString & m_indexPropertyHash.insert(methodeOffset, prefix + metaProperty.name()); methodeOffset++; } + + // search recursive in objects + if (metaProperty.isReadable() + && metaProperty.isWritable() + && QDeclarativeMetaType::isQObject(metaProperty.userType())) { + QObject *propertyObject = QDeclarativeMetaType::toQObject(metaProperty.read(spiedObject)); + if (propertyObject) + registerObject(propertyObject, prefix + metaProperty.name() + "/"); + } + + // search recursive in objects list + if (metaProperty.isReadable() + && QDeclarativeMetaType::isList(metaProperty.userType())) { + QDeclarativeListReference list(spiedObject, metaProperty.name()); + if (list.canCount() && list.canAt()) { + for (int i = 0; i < list.count(); i++) { + QObject *propertyObject = list.at(i); + if (propertyObject) + registerObject(propertyObject, prefix + metaProperty.name() + "/"); + } + } + } } } diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstancesignalspy.h b/src/plugins/qmldesigner/designercore/instances/nodeinstancesignalspy.h index ff33b8cdbef..94cef6d2321 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstancesignalspy.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstancesignalspy.h @@ -27,6 +27,7 @@ protected: private: int methodeOffset; QHash<int, QString> m_indexPropertyHash; + QObjectList registeredObjectList; ObjectNodeInstanceWeakPointer m_objectNodeInstance; }; -- GitLab