aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@nokia.com>2011-04-12 19:16:25 +0200
committerMarco Bubke <marco.bubke@nokia.com>2011-04-12 19:24:11 +0200
commit075b0aeb09211129c21557ee11571d312b3bdc2f (patch)
treed02d5f1196c567fdecbad1f37e54e39e9bdbd624 /src/plugins
parente3c59a5800f5b922a58d09e18befffd1148be16d (diff)
QmlDesigner.NodeInstances: Use dummy data for components too
Reviewed-By: Thomas Hartmann
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp46
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h8
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;