diff options
author | Lasse Holmstedt <lasse.holmstedt@nokia.com> | 2010-07-16 09:41:56 +0200 |
---|---|---|
committer | Lasse Holmstedt <lasse.holmstedt@nokia.com> | 2010-07-16 10:25:32 +0200 |
commit | a457d2eec3117b08d5dd27ec6605a9beab2b49cd (patch) | |
tree | 6a52fc8a8e9434d50412f771a33a1cd0681ef5a5 /src/plugins | |
parent | c77e560f659e1c0c42b616b89a5072d3bda472f3 (diff) | |
download | qt-creator-a457d2eec3117b08d5dd27ec6605a9beab2b49cd.tar.gz |
Live preview: Creating objects dynamically
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/qmljsinspector/qmljsclientproxy.cpp | 7 | ||||
-rw-r--r-- | src/plugins/qmljsinspector/qmljsclientproxy.h | 2 | ||||
-rw-r--r-- | src/plugins/qmljsinspector/qmljsdelta.cpp | 32 | ||||
-rw-r--r-- | src/plugins/qmljsinspector/qmljsdelta.h | 4 | ||||
-rw-r--r-- | src/plugins/qmljsinspector/qmljsdesigndebugclient.cpp | 18 | ||||
-rw-r--r-- | src/plugins/qmljsinspector/qmljsdesigndebugclient.h | 3 |
6 files changed, 65 insertions, 1 deletions
diff --git a/src/plugins/qmljsinspector/qmljsclientproxy.cpp b/src/plugins/qmljsinspector/qmljsclientproxy.cpp index 9b01e49e3c..9300cc6f3f 100644 --- a/src/plugins/qmljsinspector/qmljsclientproxy.cpp +++ b/src/plugins/qmljsinspector/qmljsclientproxy.cpp @@ -408,6 +408,13 @@ void ClientProxy::changeToSelectMarqueeTool() m_designClient->changeToSelectMarqueeTool(); } +void ClientProxy::createQmlObject(const QString &qmlText, const QDeclarativeDebugObjectReference &parentRef, + const QStringList &imports, const QString &filename) +{ + if (isDesignClientConnected()) + m_designClient->createQmlObject(qmlText, parentRef, imports, filename); +} + bool ClientProxy::isDesignClientConnected() const { return (m_designClient && m_conn->isConnected()); diff --git a/src/plugins/qmljsinspector/qmljsclientproxy.h b/src/plugins/qmljsinspector/qmljsclientproxy.h index 8aca054636..85d002425d 100644 --- a/src/plugins/qmljsinspector/qmljsclientproxy.h +++ b/src/plugins/qmljsinspector/qmljsclientproxy.h @@ -102,6 +102,8 @@ public slots: void changeToZoomTool(); void changeToSelectTool(); void changeToSelectMarqueeTool(); + void createQmlObject(const QString &qmlText, const QDeclarativeDebugObjectReference &parent, + const QStringList &imports, const QString &filename = QString()); private slots: void contextChanged(); diff --git a/src/plugins/qmljsinspector/qmljsdelta.cpp b/src/plugins/qmljsinspector/qmljsdelta.cpp index 5a90b7fb34..5a304dc51d 100644 --- a/src/plugins/qmljsinspector/qmljsdelta.cpp +++ b/src/plugins/qmljsinspector/qmljsdelta.cpp @@ -98,6 +98,7 @@ static QString label(UiObjectMember *member, Document::Ptr doc) } else if(UiArrayBinding *foo = cast<UiArrayBinding *>(member)) { str = label(foo->qualifiedId) + QLatin1String("[]"); } else if(UiScriptBinding *foo = cast<UiScriptBinding *>(member)) { + Q_UNUSED(foo) } else { quint32 start = member->firstSourceLocation().begin(); quint32 end = member->lastSourceLocation().end(); @@ -277,6 +278,34 @@ static QString _methodName(UiSourceElement *source) } +void Delta::insert(UiObjectMember *member, UiObjectMember *parentMember, const QList<QDeclarativeDebugObjectReference > &debugReferences, const Document::Ptr &doc) +{ + if (!member || !parentMember) + return; + + // create new objects + if (UiObjectDefinition* uiObjectDef = cast<UiObjectDefinition *>(member)) { + unsigned begin = uiObjectDef->firstSourceLocation().begin(); + unsigned end = uiObjectDef->lastSourceLocation().end(); + QString qmlText = doc->source().mid(begin, end - begin); + QStringList importList; + for (UiImportList *it = doc->qmlProgram()->imports; it; it = it->next) { + if (!it->import) + continue; + unsigned importBegin = it->import->firstSourceLocation().begin(); + unsigned importEnd = it->import->lastSourceLocation().end(); + + importList << doc->source().mid(importBegin, importEnd - importBegin); + } + + foreach(const QDeclarativeDebugObjectReference &ref, debugReferences) { + if (ref.debugId() != -1) { + ClientProxy::instance()->createQmlObject(qmlText, ref, importList, doc->fileName()); + } + } + } +} + Delta::DebugIdMap Delta::operator()(const Document::Ptr &doc1, const Document::Ptr &doc2, const DebugIdMap &debugIds) { Q_ASSERT(doc1->qmlProgram()); @@ -297,13 +326,14 @@ Delta::DebugIdMap Delta::operator()(const Document::Ptr &doc1, const Document::P while(!todo.isEmpty()) { UiObjectMember *y = todo.takeFirst(); todo += children(y); + if (!M.way2.contains(y)) { + insert(y, parents2.parent.value(y), newDebuggIds.value(parents2.parent.value(y)), doc2); qDebug () << "insert " << label(y, doc2) << " to " << label(parents2.parent.value(y), doc2); continue; } UiObjectMember *x = M.way2[y]; - //--8<--------------------------------------------------------------------------------------- if (debugIds.contains(x)) { newDebuggIds[y] = debugIds[x]; diff --git a/src/plugins/qmljsinspector/qmljsdelta.h b/src/plugins/qmljsinspector/qmljsdelta.h index 38d9922378..0138e88031 100644 --- a/src/plugins/qmljsinspector/qmljsdelta.h +++ b/src/plugins/qmljsinspector/qmljsdelta.h @@ -78,6 +78,10 @@ public: static QmlJS::AST::UiObjectMemberList *objectMembers(QmlJS::AST::UiObjectMember *object); private: + void insert(UiObjectMember *member, UiObjectMember *parentMember, + const QList<QDeclarativeDebugObjectReference> &debugReferences, const Document::Ptr &doc); + +private: QmlJS::Document::Ptr _doc; QmlJS::Document::Ptr _previousDoc; QList<Change> _changes; diff --git a/src/plugins/qmljsinspector/qmljsdesigndebugclient.cpp b/src/plugins/qmljsinspector/qmljsdesigndebugclient.cpp index 819336639c..0e8a2c9a46 100644 --- a/src/plugins/qmljsinspector/qmljsdesigndebugclient.cpp +++ b/src/plugins/qmljsinspector/qmljsdesigndebugclient.cpp @@ -213,6 +213,24 @@ void QmlJSDesignDebugClient::changeToZoomTool() sendMessage(message); } +void QmlJSDesignDebugClient::createQmlObject(const QString &qmlText, const QDeclarativeDebugObjectReference &parentRef, + const QStringList &imports, const QString &filename) +{ + if (!m_connection || !m_connection->isConnected()) + return; + + QByteArray message; + QDataStream ds(&message, QIODevice::WriteOnly); + + ds << QByteArray("CREATE_OBJECT") + << qmlText + << parentRef.debugId() + << imports + << filename; + + sendMessage(message); +} + void QmlJSDesignDebugClient::applyChangesToQmlFile() { if (!m_connection || !m_connection->isConnected()) diff --git a/src/plugins/qmljsinspector/qmljsdesigndebugclient.h b/src/plugins/qmljsinspector/qmljsdesigndebugclient.h index f4124b1a81..32c0fcbf4a 100644 --- a/src/plugins/qmljsinspector/qmljsdesigndebugclient.h +++ b/src/plugins/qmljsinspector/qmljsdesigndebugclient.h @@ -64,6 +64,9 @@ public: void changeToSelectMarqueeTool(); void changeToZoomTool(); + void createQmlObject(const QString &qmlText, const QDeclarativeDebugObjectReference &parentRef, + const QStringList &imports, const QString &filename); + void applyChangesToQmlFile(); void applyChangesFromQmlFile(); |