QML JS Debugger: Be able to expand objects

This commit is contained in:
Olivier Goffart
2010-07-22 14:58:37 +02:00
parent 4995c38861
commit 050905157c
6 changed files with 92 additions and 12 deletions

View File

@@ -87,10 +87,11 @@ QDataStream& operator>>(QDataStream& s, WatchData &data)
QString value;
QString type;
bool hasChildren;
s >> data.exp >> data.name >> value >> type >> hasChildren;
s >> data.exp >> data.name >> value >> type >> hasChildren >> data.objectId;
data.setType(type, false);
data.setValue(value);
data.setHasChildren(hasChildren);
data.setAllUnneeded();
return s;
}
@@ -526,7 +527,7 @@ void QmlEngine::updateWatchData(const WatchData &data)
//watchHandler()->rebuildModel();
showStatusMessage(tr("Stopped."), 5000);
if (!data.name.isEmpty()) {
if (!data.name.isEmpty() && data.isValueNeeded()) {
QByteArray reply;
QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("EXEC");
@@ -534,6 +535,10 @@ void QmlEngine::updateWatchData(const WatchData &data)
sendMessage(reply);
}
if (!data.name.isEmpty() && data.isChildrenNeeded() && watchHandler()->isExpandedIName(data.iname)) {
expandObject(data.iname, data.objectId);
}
{
QByteArray reply;
QDataStream rs(&reply, QIODevice::WriteOnly);
@@ -543,6 +548,16 @@ void QmlEngine::updateWatchData(const WatchData &data)
}
}
void QmlEngine::expandObject(const QByteArray& iname, quint64 objectId)
{
QByteArray reply;
QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("EXPAND");
rs << iname << objectId;
sendMessage(reply);
}
DebuggerEngine *createQmlEngine(const DebuggerStartParameters &sp)
{
return new QmlEngine(sp);
@@ -599,11 +614,17 @@ void QmlEngine::messageReceived(const QByteArray &message)
foreach (WatchData data, watches) {
data.iname = watchHandler()->watcherName(data.exp);
watchHandler()->insertData(data);
if (watchHandler()->expandedINames().contains(data.iname))
expandObject(data.iname, data.objectId);
}
foreach (WatchData data, locals) {
data.iname = "local." + data.exp;
watchHandler()->insertData(data);
if (watchHandler()->expandedINames().contains(data.iname))
expandObject(data.iname, data.objectId);
}
watchHandler()->endCycle();
@@ -614,6 +635,18 @@ void QmlEngine::messageReceived(const QByteArray &message)
stream >> iname >> data;
data.iname = iname;
watchHandler()->insertData(data);
} else if (command == "EXPANDED") {
QList<WatchData> result;
QByteArray iname;
stream >> iname >> result;
foreach (WatchData data, result) {
data.iname = iname + '.' + data.exp;
watchHandler()->insertData(data);
if (watchHandler()->expandedINames().contains(data.iname))
expandObject(data.iname, data.objectId);
}
} else {
qDebug() << Q_FUNC_INFO << "Unknown command: " << command;
}