summaryrefslogtreecommitdiffstats
path: root/tools/qmldebugger/engine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/qmldebugger/engine.cpp')
-rw-r--r--tools/qmldebugger/engine.cpp77
1 files changed, 71 insertions, 6 deletions
diff --git a/tools/qmldebugger/engine.cpp b/tools/qmldebugger/engine.cpp
index 3b8c8b1..229cd3f 100644
--- a/tools/qmldebugger/engine.cpp
+++ b/tools/qmldebugger/engine.cpp
@@ -2,7 +2,10 @@
#include <QtDeclarative/qmldebugclient.h>
#include <QPushButton>
#include <QVBoxLayout>
+#include <QHBoxLayout>
#include <QLineEdit>
+#include <QTreeWidget>
+#include <QTableWidget>
#include <private/qmlenginedebug_p.h>
#include <QtDeclarative/qmlcomponent.h>
#include <QtDeclarative/qfxitem.h>
@@ -11,9 +14,9 @@ QT_BEGIN_NAMESPACE
class DebuggerEngineItem : public QObject
{
-Q_OBJECT
-Q_PROPERTY(QString name READ name CONSTANT);
-Q_PROPERTY(QString engineId READ engineId CONSTANT);
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name CONSTANT);
+ Q_PROPERTY(int engineId READ engineId CONSTANT);
public:
DebuggerEngineItem(const QString &name, int id)
@@ -56,7 +59,23 @@ EnginePane::EnginePane(QmlDebugConnection *client, QWidget *parent)
QObject::connect(query, SIGNAL(clicked()), this, SLOT(fetchClicked()));
layout->addWidget(query);
- layout->addStretch(10);
+ QHBoxLayout *hbox = new QHBoxLayout;
+ hbox->setContentsMargins(0, 0, 0, 0);
+
+ m_objTree = new QTreeWidget(this);
+ m_objTree->setHeaderHidden(true);
+ connect(m_objTree, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(itemClicked(QTreeWidgetItem *)));
+ hbox->addWidget(m_objTree);
+
+ m_propTable = new QTableWidget(this);
+ m_propTable->setColumnCount(2);
+ m_propTable->setColumnWidth(0, 150);
+ m_propTable->setColumnWidth(1, 400);
+ m_propTable->setHorizontalHeaderLabels(QStringList() << "name" << "value");
+ hbox->addWidget(m_propTable);
+ hbox->setStretchFactor(m_propTable, 2);
+
+ layout->addLayout(hbox);
}
void EnginePane::engineSelected(int id)
@@ -65,6 +84,40 @@ void EnginePane::engineSelected(int id)
queryContext(id);
}
+void EnginePane::itemClicked(QTreeWidgetItem *item)
+{
+ m_propTable->clearContents();
+
+ if (m_object) {
+ delete m_object;
+ m_object = 0;
+ }
+
+ m_object = m_client.queryObjectRecursive(QmlDebugObjectReference(item->data(0, Qt::UserRole).toInt()), this);
+ if (!m_object->isWaiting())
+ showProperties();
+ else
+ QObject::connect(m_object, SIGNAL(stateChanged(State)),
+ this, SLOT(showProperties()));
+}
+
+void EnginePane::showProperties()
+{
+ QmlDebugObjectReference obj = m_object->object();
+ m_propTable->setRowCount(obj.properties().count());
+ for (int ii = 0; ii < obj.properties().count(); ++ii) {
+ QTableWidgetItem *name = new QTableWidgetItem(obj.properties().at(ii).name());
+ m_propTable->setItem(ii, 0, name);
+ QTableWidgetItem *value;
+ if (!obj.properties().at(ii).binding().isEmpty())
+ value = new QTableWidgetItem(obj.properties().at(ii).binding());
+ else
+ value = new QTableWidgetItem(obj.properties().at(ii).value().toString());
+ m_propTable->setItem(ii, 1, value);
+ }
+ delete m_object; m_object = 0;
+}
+
void EnginePane::queryContext(int id)
{
if (m_context) {
@@ -110,6 +163,17 @@ void EnginePane::dump(const QmlDebugObjectReference &obj, int ind)
dump(obj.children().at(ii), ind + 1);
}
+
+void EnginePane::buildTree(const QmlDebugObjectReference &obj, QTreeWidgetItem *parent)
+{
+ QTreeWidgetItem *item = parent ? new QTreeWidgetItem(parent) : new QTreeWidgetItem(m_objTree);
+ item->setText(0, obj.className());
+ item->setData(0, Qt::UserRole, obj.debugId());
+
+ for (int ii = 0; ii < obj.children().count(); ++ii)
+ buildTree(obj.children().at(ii), item);
+}
+
void EnginePane::queryEngines()
{
if (m_engines)
@@ -131,8 +195,8 @@ void EnginePane::enginesChanged()
QList<QmlDebugEngineReference> engines = m_engines->engines();
delete m_engines; m_engines = 0;
- for (int ii = 0; ii < engines.count(); ++ii)
- m_engineItems << new DebuggerEngineItem(engines.at(ii).name(),
+ for (int ii = 0; ii < engines.count(); ++ii)
+ m_engineItems << new DebuggerEngineItem(engines.at(ii).name(),
engines.at(ii).debugId());
m_engineView->rootContext()->setContextProperty("engines", qVariantFromValue(&m_engineItems));
@@ -162,6 +226,7 @@ void EnginePane::fetchObject(int id)
void EnginePane::objectFetched()
{
dump(m_object->object(), 0);
+ buildTree(m_object->object(), 0);
delete m_object; m_object = 0;
}