diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp index 4f0a2c01bc3..4b0d00680e6 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp @@ -124,6 +124,9 @@ QList NodeInstanceServer::createInstances(const QVectorsetContextProperty(dummyPair.first, dummyPair.second.data()); + } + } +} + + +QList NodeInstanceServer::allSubContextsForObject(QObject *object) +{ + QList contextList; + + if (object) { + foreach (QObject *subObject, allSubObjectsForObject(object)) { + QDeclarativeContext *contextOfObject = QDeclarativeEngine::contextForObject(subObject); + if (contextOfObject) { + if (contextOfObject != context() && !contextList.contains(contextOfObject)) + contextList.append(contextOfObject); + } + } + } + + return contextList; +} + +QList NodeInstanceServer::allSubObjectsForObject(QObject *object) +{ + QList subChildren; + if (object) { + subChildren = object->findChildren(); + } + + return subChildren; +} + void NodeInstanceServer::refreshBindings() { static int counter = 0; @@ -1003,6 +1043,7 @@ void NodeInstanceServer::loadDummyDataFile(const QFileInfo& qmlFileInfo) qWarning() << "Loaded dummy data:" << qmlFileInfo.filePath(); m_declarativeView->rootContext()->setContextProperty(qmlFileInfo.completeBaseName(), dummyData); dummyData->setParent(this); + m_dummyObjectList.append(DummyPair(qmlFileInfo.completeBaseName(), dummyData)); } if (!oldDummyDataObject.isNull()) @@ -1010,6 +1051,11 @@ void NodeInstanceServer::loadDummyDataFile(const QFileInfo& qmlFileInfo) if (!dummydataFileSystemWatcher()->files().contains(qmlFileInfo.filePath())) dummydataFileSystemWatcher()->addPath(qmlFileInfo.filePath()); + + if (rootNodeInstance().isValid() && rootNodeInstance().internalObject()) { + foreach (QDeclarativeContext *context, allSubContextsForObject(rootNodeInstance().internalObject())) + setupDummysForContext(context); + } } void NodeInstanceServer::loadDummyContextObjectFile(const QFileInfo& qmlFileInfo) diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h index 28bc3b4388c..2bab6aeebce 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h @@ -73,6 +73,8 @@ public: typedef QPair, QString> ObjectPropertyPair; typedef QPair IdPropertyPair; typedef QPair InstancePropertyPair; + typedef QPair > DummyPair; + explicit NodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient); ~NodeInstanceServer(); @@ -180,12 +182,18 @@ protected: void refreshBindings(); + void setupDummysForContext(QDeclarativeContext *context); + + QList allSubContextsForObject(QObject *object); + static QList allSubObjectsForObject(QObject *object); + private: ServerNodeInstance m_rootNodeInstance; ServerNodeInstance m_activeStateInstance; QHash m_idInstanceHash; QHash m_objectInstanceHash; QMultiHash m_fileSystemWatcherHash; + QList > > m_dummyObjectList; QWeakPointer m_fileSystemWatcher; QWeakPointer m_dummdataFileSystemWatcher; QWeakPointer m_declarativeView;