summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/declarative/debugger/qmldebug.cpp42
-rw-r--r--src/declarative/qml/qmlenginedebug.cpp60
-rw-r--r--src/declarative/qml/qmlenginedebug_p.h2
-rw-r--r--tools/qmldebugger/standalone/expressionquerywidget.cpp13
-rw-r--r--tools/qmldebugger/standalone/objectpropertiesview.cpp2
-rw-r--r--tools/qmldebugger/standalone/qmldebugger.cpp3
-rw-r--r--tools/qmldebugger/standalone/watchtable.cpp2
7 files changed, 86 insertions, 38 deletions
diff --git a/src/declarative/debugger/qmldebug.cpp b/src/declarative/debugger/qmldebug.cpp
index ebad10f..b06a250 100644
--- a/src/declarative/debugger/qmldebug.cpp
+++ b/src/declarative/debugger/qmldebug.cpp
@@ -150,6 +150,15 @@ void QmlEngineDebugPrivate::decode(QDataStream &ds, QmlDebugObjectReference &o,
if (simple)
return;
+ int childCount;
+ bool recur;
+ ds >> childCount >> recur;
+
+ for (int ii = 0; ii < childCount; ++ii) {
+ o.m_children.append(QmlDebugObjectReference());
+ decode(ds, o.m_children.last(), !recur);
+ }
+
int propCount;
ds >> propCount;
@@ -162,25 +171,26 @@ void QmlEngineDebugPrivate::decode(QDataStream &ds, QmlDebugObjectReference &o,
prop.m_binding = data.binding;
prop.m_hasNotifySignal = data.hasNotifySignal;
prop.m_valueTypeName = data.valueTypeName;
- if (data.type == QmlEngineDebugServer::QmlObjectProperty::Basic
- || data.type == QmlEngineDebugServer::QmlObjectProperty::List) {
- prop.m_value = data.value;
- } else if (data.type == QmlEngineDebugServer::QmlObjectProperty::Object) {
- QmlDebugObjectReference obj;
- obj.m_debugId = prop.m_value.toInt();
- prop.m_value = qVariantFromValue(obj);
+ switch (data.type) {
+ case QmlEngineDebugServer::QmlObjectProperty::Basic:
+ case QmlEngineDebugServer::QmlObjectProperty::List:
+ case QmlEngineDebugServer::QmlObjectProperty::SignalProperty:
+ {
+ prop.m_value = data.value;
+ break;
+ }
+ case QmlEngineDebugServer::QmlObjectProperty::Object:
+ {
+ QmlDebugObjectReference obj;
+ obj.m_debugId = prop.m_value.toInt();
+ prop.m_value = qVariantFromValue(obj);
+ break;
+ }
+ case QmlEngineDebugServer::QmlObjectProperty::Unknown:
+ break;
}
o.m_properties << prop;
}
-
- int childCount;
- bool recur;
- ds >> childCount >> recur;
-
- for (int ii = 0; ii < childCount; ++ii) {
- o.m_children.append(QmlDebugObjectReference());
- decode(ds, o.m_children.last(), !recur);
- }
}
void QmlEngineDebugPrivate::decode(QDataStream &ds, QmlDebugContextReference &c)
diff --git a/src/declarative/qml/qmlenginedebug.cpp b/src/declarative/qml/qmlenginedebug.cpp
index 05c5429..2d8acf7 100644
--- a/src/declarative/qml/qmlenginedebug.cpp
+++ b/src/declarative/qml/qmlenginedebug.cpp
@@ -143,7 +143,7 @@ QVariant QmlEngineDebugServer::valueContents(const QVariant &value) const
if (o) {
QString name = o->objectName();
if (name.isEmpty())
- name = QLatin1String("<unnamed>");
+ name = QLatin1String("<unnamed object>");
return name;
}
}
@@ -155,21 +155,61 @@ void QmlEngineDebugServer::buildObjectDump(QDataStream &message,
QObject *object, bool recur)
{
message << objectData(object);
- message << object->metaObject()->propertyCount();
- for (int ii = 0; ii < object->metaObject()->propertyCount(); ++ii)
- message << propertyData(object, ii);
+ // Some children aren't added to an object until particular properties are read
+ // - e.g. child state objects aren't added until the 'states' property is read -
+ // but this should only affect internal objects that aren't shown by the
+ // debugger anyway.
QObjectList children = object->children();
- message << children.count() << recur;
+
+ int childrenCount = children.count();
+ for (int ii = 0; ii < children.count(); ++ii) {
+ if (QmlBoundSignal::cast(children[ii]))
+ --childrenCount;
+ }
+
+ message << childrenCount << recur;
+
+ QList<QmlObjectProperty> fakeProperties;
for (int ii = 0; ii < children.count(); ++ii) {
QObject *child = children.at(ii);
- if (recur)
- buildObjectDump(message, child, recur);
- else
- message << objectData(child);
+ QmlBoundSignal *signal = QmlBoundSignal::cast(child);
+ if (signal) {
+ QmlObjectProperty prop;
+ prop.type = QmlObjectProperty::SignalProperty;
+ prop.hasNotifySignal = false;
+ QmlExpression *expr = signal->expression();
+ if (expr) {
+ prop.value = expr->expression();
+ QObject *scope = expr->scopeObject();
+ if (scope) {
+ QString sig = scope->metaObject()->method(signal->index()).signature();
+ int lparen = sig.indexOf(QLatin1Char('('));
+ if (lparen >= 0) {
+ QString methodName = sig.mid(0, lparen);
+ prop.name = QLatin1String("on") + methodName[0].toUpper()
+ + methodName.mid(1);
+ }
+ }
+ }
+ fakeProperties << prop;
+ } else {
+ if (recur)
+ buildObjectDump(message, child, recur);
+ else
+ message << objectData(child);
+ }
}
+
+ message << (object->metaObject()->propertyCount() + fakeProperties.count());
+
+ for (int ii = 0; ii < object->metaObject()->propertyCount(); ++ii)
+ message << propertyData(object, ii);
+
+ for (int ii = 0; ii < fakeProperties.count(); ++ii)
+ message << fakeProperties[ii];
}
void QmlEngineDebugServer::buildObjectList(QDataStream &message,
@@ -378,7 +418,7 @@ void QmlEngineDebugServer::propertyChanged(int id, int objectId, const QMetaProp
QByteArray reply;
QDataStream rs(&reply, QIODevice::WriteOnly);
- rs << QByteArray("UPDATE_WATCH") << id << objectId << QString::fromUtf8(property.name()) << valueContents(value);
+ rs << QByteArray("UPDATE_WATCH") << id << objectId << QByteArray(property.name()) << valueContents(value);
sendMessage(reply);
}
diff --git a/src/declarative/qml/qmlenginedebug_p.h b/src/declarative/qml/qmlenginedebug_p.h
index 23e2c30..8ba3d38 100644
--- a/src/declarative/qml/qmlenginedebug_p.h
+++ b/src/declarative/qml/qmlenginedebug_p.h
@@ -81,7 +81,7 @@ public:
};
struct QmlObjectProperty {
- enum Type { Unknown, Basic, Object, List };
+ enum Type { Unknown, Basic, Object, List, SignalProperty };
Type type;
QString name;
QVariant value;
diff --git a/tools/qmldebugger/standalone/expressionquerywidget.cpp b/tools/qmldebugger/standalone/expressionquerywidget.cpp
index 98d9a85..5b7bc8f 100644
--- a/tools/qmldebugger/standalone/expressionquerywidget.cpp
+++ b/tools/qmldebugger/standalone/expressionquerywidget.cpp
@@ -152,7 +152,7 @@ void ExpressionQueryWidget::showCurrentContext()
m_textEdit->setTextColor(Qt::darkGreen);
m_textEdit->append(m_currObject.className()
+ QLatin1String(": ")
- + (m_currObject.name().isEmpty() ? QLatin1String("<unnamed>") : m_currObject.name()));
+ + (m_currObject.name().isEmpty() ? QLatin1String("<unnamed object>") : m_currObject.name()));
appendPrompt();
}
@@ -189,15 +189,12 @@ void ExpressionQueryWidget::showResult()
QVariant value = m_query->result();
QString result;
- if (value.isNull()) {
+ if (value.type() == QVariant::List || value.type() == QVariant::StringList) {
+ result = tr("<%1 items>", "%1 = number of items").arg(value.toList().count());
+ } else if (value.isNull()) {
result = QLatin1String("<no value>");
} else {
- if (value.canConvert(QVariant::String)) {
- result = value.toString();
- } else {
- QDebug debug(&result);
- debug << value;
- }
+ result = value.toString();
}
if (m_mode == SeparateEntryMode) {
diff --git a/tools/qmldebugger/standalone/objectpropertiesview.cpp b/tools/qmldebugger/standalone/objectpropertiesview.cpp
index 17c5764..abfb7a5 100644
--- a/tools/qmldebugger/standalone/objectpropertiesview.cpp
+++ b/tools/qmldebugger/standalone/objectpropertiesview.cpp
@@ -181,7 +181,7 @@ void ObjectPropertiesView::setPropertyValue(PropertiesViewItem *item, const QVar
item->setExpanded(false);
} else {
- item->setText(1, (value.isNull() ? QLatin1String("<null>") : value.toString()));
+ item->setText(1, (value.isNull() ? QLatin1String("<no value>") : value.toString()));
item->setExpanded(true);
}
diff --git a/tools/qmldebugger/standalone/qmldebugger.cpp b/tools/qmldebugger/standalone/qmldebugger.cpp
index f4061ed..afcf84c 100644
--- a/tools/qmldebugger/standalone/qmldebugger.cpp
+++ b/tools/qmldebugger/standalone/qmldebugger.cpp
@@ -57,7 +57,6 @@ QmlDebugger::QmlDebugger(QWidget *parent)
QVBoxLayout *layout = new QVBoxLayout;
setLayout(layout);
-
QHBoxLayout *connectLayout = new QHBoxLayout;
layout->addLayout(connectLayout);
connectLayout->addStretch(2);
@@ -101,6 +100,8 @@ QmlDebugger::QmlDebugger(QWidget *parent)
this, SLOT(connectionError(QAbstractSocket::SocketError)));
m_tabs->setCurrentIndex(1);
+
+ connectToHost();
}
void QmlDebugger::setHost(const QString &host)
diff --git a/tools/qmldebugger/standalone/watchtable.cpp b/tools/qmldebugger/standalone/watchtable.cpp
index b3d3cec..47c1c88 100644
--- a/tools/qmldebugger/standalone/watchtable.cpp
+++ b/tools/qmldebugger/standalone/watchtable.cpp
@@ -257,7 +257,7 @@ void WatchTableModel::togglePropertyWatch(const QmlDebugObjectReference &object,
+ QLatin1String(" on\n")
+ object.className()
+ QLatin1String(":\n")
- + (object.name().isEmpty() ? QLatin1String("<unnamed>") : object.name());
+ + (object.name().isEmpty() ? QLatin1String("<unnamed object>") : object.name());
addWatch(watch, desc);
emit watchCreated(watch);
}