QML Live Preview: Find the debug ids of the root nodes

This commit is contained in:
Olivier Goffart
2010-07-19 11:24:44 +02:00
parent d7db1c9b60
commit 3961676569

View File

@@ -173,13 +173,25 @@ void QmlJSLiveTextPreview::changeSelectedElements(QList<int> offsets, const QStr
emit selectedItemsChanged(selectedReferences); emit selectedItemsChanged(selectedReferences);
} }
static QList<QDeclarativeDebugObjectReference> findRootObjectRecursive(const QDeclarativeDebugObjectReference &object, const Document::Ptr &doc)
{
QList<QDeclarativeDebugObjectReference> result;
if (object.className() == doc->componentName())
result += object;
foreach (const QDeclarativeDebugObjectReference &it, object.children()) {
result += findRootObjectRecursive(it, doc);
}
return result;
}
void QmlJSLiveTextPreview::updateDebugIds(const QDeclarativeDebugObjectReference &rootReference) void QmlJSLiveTextPreview::updateDebugIds(const QDeclarativeDebugObjectReference &rootReference)
{ {
QmlJS::Document::Ptr doc = m_initialDoc; if (!m_initialDoc->qmlProgram())
if (!doc->qmlProgram())
return; return;
{ // Map all the object that comes from the document as it has been loaded by the server.
const QmlJS::Document::Ptr &doc = m_initialDoc;
MapObjectWithDebugReference visitor; MapObjectWithDebugReference visitor;
visitor.root = rootReference; visitor.root = rootReference;
visitor.filename = doc->fileName(); visitor.filename = doc->fileName();
@@ -189,6 +201,19 @@ void QmlJSLiveTextPreview::updateDebugIds(const QDeclarativeDebugObjectReference
Delta delta; Delta delta;
delta.doNotSendChanges = true; delta.doNotSendChanges = true;
m_debugIds = delta(doc, m_previousDoc, m_debugIds); m_debugIds = delta(doc, m_previousDoc, m_debugIds);
}
const QmlJS::Document::Ptr &doc = m_previousDoc;
if (!doc->qmlProgram())
return;
// Map the root nodes of the document.
if(doc->qmlProgram()->members && doc->qmlProgram()->members->member) {
UiObjectMember* root = doc->qmlProgram()->members->member;
QList< QDeclarativeDebugObjectReference > r = findRootObjectRecursive(rootReference, doc);
if (!r.isEmpty())
m_debugIds[root] += r;
}
} }
void QmlJSLiveTextPreview::documentChanged(QmlJS::Document::Ptr doc) void QmlJSLiveTextPreview::documentChanged(QmlJS::Document::Ptr doc)