diff options
author | Marco Bubke <marco.bubke@nokia.com> | 2011-04-12 19:16:25 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@nokia.com> | 2011-04-12 19:24:11 +0200 |
commit | 075b0aeb09211129c21557ee11571d312b3bdc2f (patch) | |
tree | d02d5f1196c567fdecbad1f37e54e39e9bdbd624 /src/plugins/qmldesigner/designercore | |
parent | e3c59a5800f5b922a58d09e18befffd1148be16d (diff) | |
download | qt-creator-075b0aeb09211129c21557ee11571d312b3bdc2f.tar.gz |
QmlDesigner.NodeInstances: Use dummy data for components too
Reviewed-By: Thomas Hartmann
Diffstat (limited to 'src/plugins/qmldesigner/designercore')
-rw-r--r-- | src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp | 46 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h | 8 |
2 files changed, 54 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp index 4f0a2c01bc..4b0d00680e 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp @@ -124,6 +124,9 @@ QList<ServerNodeInstance> NodeInstanceServer::createInstances(const QVector<Ins } } + + foreach (QDeclarativeContext* context, allSubContextsForObject(instance.internalObject())) + setupDummysForContext(context); } return instanceList; @@ -474,6 +477,43 @@ void NodeInstanceServer::clearChangedPropertyList() m_changedPropertyList.clear(); } +void NodeInstanceServer::setupDummysForContext(QDeclarativeContext *context) +{ + foreach (const DummyPair& dummyPair, m_dummyObjectList) { + if (dummyPair.second) { + context->setContextProperty(dummyPair.first, dummyPair.second.data()); + } + } +} + + +QList<QDeclarativeContext*> NodeInstanceServer::allSubContextsForObject(QObject *object) +{ + QList<QDeclarativeContext*> 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<QObject*> NodeInstanceServer::allSubObjectsForObject(QObject *object) +{ + QList<QObject*> subChildren; + if (object) { + subChildren = object->findChildren<QObject*>(); + } + + 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 28bc3b4388..2bab6aeebc 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h @@ -73,6 +73,8 @@ public: typedef QPair<QWeakPointer<QObject>, QString> ObjectPropertyPair; typedef QPair<qint32, QString> IdPropertyPair; typedef QPair<ServerNodeInstance, QString> InstancePropertyPair; + typedef QPair<QString, QWeakPointer<QObject> > DummyPair; + explicit NodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient); ~NodeInstanceServer(); @@ -180,12 +182,18 @@ protected: void refreshBindings(); + void setupDummysForContext(QDeclarativeContext *context); + + QList<QDeclarativeContext*> allSubContextsForObject(QObject *object); + static QList<QObject*> allSubObjectsForObject(QObject *object); + private: ServerNodeInstance m_rootNodeInstance; ServerNodeInstance m_activeStateInstance; QHash<qint32, ServerNodeInstance> m_idInstanceHash; QHash<QObject*, ServerNodeInstance> m_objectInstanceHash; QMultiHash<QString, ObjectPropertyPair> m_fileSystemWatcherHash; + QList<QPair<QString, QWeakPointer<QObject> > > m_dummyObjectList; QWeakPointer<QFileSystemWatcher> m_fileSystemWatcher; QWeakPointer<QFileSystemWatcher> m_dummdataFileSystemWatcher; QWeakPointer<QDeclarativeView> m_declarativeView; |