summaryrefslogtreecommitdiffstats
path: root/src/declarative/debugger
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2009-05-08 03:04:54 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2009-05-08 03:04:54 (GMT)
commite4fb4f78ae18e3b5a538ce47b43136b4c666674e (patch)
treeea7ad4818ff1e23cfc926c989130f750057292a9 /src/declarative/debugger
parent1e71ce9f221c739f03c9e6d49faf7cd7b0c85ae2 (diff)
downloadQt-e4fb4f78ae18e3b5a538ce47b43136b4c666674e.zip
Qt-e4fb4f78ae18e3b5a538ce47b43136b4c666674e.tar.gz
Qt-e4fb4f78ae18e3b5a538ce47b43136b4c666674e.tar.bz2
Cross link properties to the tree view
Diffstat (limited to 'src/declarative/debugger')
-rw-r--r--src/declarative/debugger/qmldebugger.cpp24
-rw-r--r--src/declarative/debugger/qmldebugger.h4
-rw-r--r--src/declarative/debugger/qmlpropertyview.cpp28
-rw-r--r--src/declarative/debugger/qmlpropertyview_p.h4
-rw-r--r--src/declarative/debugger/qmlwatches.cpp4
-rw-r--r--src/declarative/debugger/qmlwatches_p.h1
6 files changed, 61 insertions, 4 deletions
diff --git a/src/declarative/debugger/qmldebugger.cpp b/src/declarative/debugger/qmldebugger.cpp
index 250f451..907b91b 100644
--- a/src/declarative/debugger/qmldebugger.cpp
+++ b/src/declarative/debugger/qmldebugger.cpp
@@ -62,7 +62,7 @@
QmlDebugger::QmlDebugger(QWidget *parent)
: QWidget(parent), m_tree(0), m_warnings(0), m_watchTable(0), m_watches(0),
- m_properties(0), m_text(0)
+ m_properties(0), m_text(0), m_highlightedItem(0)
{
QHBoxLayout *layout = new QHBoxLayout;
setLayout(layout);
@@ -102,7 +102,10 @@ QmlDebugger::QmlDebugger(QWidget *parent)
tabs->addTab(m_watchTable, "Watches");
m_properties = new QmlPropertyView(m_watches, this);
+ QObject::connect(m_properties, SIGNAL(objectClicked(quint32)),
+ this, SLOT(highlightObject(quint32)));
tabs->addTab(m_properties, "Properties");
+ tabs->setCurrentWidget(m_properties);
splitter->addWidget(tabs);
splitter->setStretchFactor(1, 2);
@@ -135,6 +138,22 @@ void QmlDebugger::itemDoubleClicked(QTreeWidgetItem *i)
{
}
+void QmlDebugger::highlightObject(quint32 id)
+{
+ QHash<quint32, QTreeWidgetItem *>::ConstIterator iter = m_items.find(id);
+ if (m_highlightedItem) {
+ m_highlightedItem->setBackground(0, QPalette().base());
+ m_highlightedItem = 0;
+ }
+
+ if (iter != m_items.end()) {
+ m_highlightedItem = *iter;
+ m_highlightedItem->setBackground(0, QColor("cyan"));
+ m_tree->expandItem(m_highlightedItem);
+ m_tree->scrollToItem(m_highlightedItem);
+ }
+}
+
void QmlDebugger::itemClicked(QTreeWidgetItem *i)
{
QmlDebuggerItem *item = static_cast<QmlDebuggerItem *>(i);
@@ -293,6 +312,7 @@ bool QmlDebugger::makeItem(QObject *obj, QmlDebuggerItem *item)
item->setForeground(0, Qt::lightGray);
}
+ m_items.insert(m_watches->objectId(obj), item);
item->setText(0, text);
return rv;
@@ -324,6 +344,8 @@ void QmlDebugger::setDebugObject(QObject *obj)
{
m_tree->clear();
m_warnings->clear();
+ m_items.clear();
+ m_highlightedItem = 0;
m_object = obj;
if(!obj)
diff --git a/src/declarative/debugger/qmldebugger.h b/src/declarative/debugger/qmldebugger.h
index 776ded3..6495a49 100644
--- a/src/declarative/debugger/qmldebugger.h
+++ b/src/declarative/debugger/qmldebugger.h
@@ -73,6 +73,7 @@ public slots:
private slots:
void itemClicked(QTreeWidgetItem *);
void itemDoubleClicked(QTreeWidgetItem *);
+ void highlightObject(quint32);
private:
void buildTree(QObject *obj, QmlDebuggerItem *parent);
@@ -85,6 +86,9 @@ private:
QPlainTextEdit *m_text;
QPointer<QObject> m_object;
QPointer<QObject> m_selectedItem;
+
+ QTreeWidgetItem *m_highlightedItem;
+ QHash<quint32, QTreeWidgetItem *> m_items;
};
QT_END_NAMESPACE
diff --git a/src/declarative/debugger/qmlpropertyview.cpp b/src/declarative/debugger/qmlpropertyview.cpp
index b46a1bf..eda97b7 100644
--- a/src/declarative/debugger/qmlpropertyview.cpp
+++ b/src/declarative/debugger/qmlpropertyview.cpp
@@ -59,6 +59,8 @@ QmlPropertyView::QmlPropertyView(QmlWatches *watches, QWidget *parent)
m_tree->setHeaderLabels(QStringList() << "Property" << "Value");
QObject::connect(m_tree, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),
this, SLOT(itemDoubleClicked(QTreeWidgetItem *)));
+ QObject::connect(m_tree, SIGNAL(itemClicked(QTreeWidgetItem *, int)),
+ this, SLOT(itemClicked(QTreeWidgetItem *)));
m_tree->setColumnCount(2);
@@ -93,7 +95,31 @@ QmlPropertyViewItem::QmlPropertyViewItem(QTreeWidgetItem *parent)
void QmlPropertyViewItem::refresh()
{
- setText(1, property.read(object).toString());
+ QVariant v = property.read(object);
+ QString str = v.toString();
+
+ if (QmlMetaType::isObject(v.userType()))
+ str = QmlWatches::objectToString(QmlMetaType::toQObject(v));
+
+ setText(1, str);
+}
+
+void QmlPropertyView::itemClicked(QTreeWidgetItem *i)
+{
+ QmlPropertyViewItem *item = static_cast<QmlPropertyViewItem *>(i);
+
+ if(item->object) {
+ QVariant v = item->property.read(item->object);
+ if (QmlMetaType::isObject(v.userType())) {
+ QObject *obj = QmlMetaType::toQObject(v);
+
+ if(obj) {
+ quint32 id = m_watches->objectId(obj);
+ emit objectClicked(id);
+ }
+ }
+ }
+
}
void QmlPropertyView::itemDoubleClicked(QTreeWidgetItem *i)
diff --git a/src/declarative/debugger/qmlpropertyview_p.h b/src/declarative/debugger/qmlpropertyview_p.h
index a671ea1..469a08d 100644
--- a/src/declarative/debugger/qmlpropertyview_p.h
+++ b/src/declarative/debugger/qmlpropertyview_p.h
@@ -58,9 +58,13 @@ public:
void setObject(QObject *);
+signals:
+ void objectClicked(quint32);
+
public slots:
void refresh();
void itemDoubleClicked(QTreeWidgetItem *);
+ void itemClicked(QTreeWidgetItem *);
private:
QPointer<QObject> m_object;
diff --git a/src/declarative/debugger/qmlwatches.cpp b/src/declarative/debugger/qmlwatches.cpp
index 1b9befd..1cc9469 100644
--- a/src/declarative/debugger/qmlwatches.cpp
+++ b/src/declarative/debugger/qmlwatches.cpp
@@ -45,10 +45,10 @@
#include <QtGui/qcolor.h>
#include <QtDeclarative/qmlmetatype.h>
-static QString objectToString(QObject *obj)
+QString QmlWatches::objectToString(QObject *obj)
{
if(!obj)
- return QString();
+ return QLatin1String("NULL");
QString objectName = obj->objectName();
if(objectName.isEmpty())
diff --git a/src/declarative/debugger/qmlwatches_p.h b/src/declarative/debugger/qmlwatches_p.h
index 12a6468..4570a4f 100644
--- a/src/declarative/debugger/qmlwatches_p.h
+++ b/src/declarative/debugger/qmlwatches_p.h
@@ -69,6 +69,7 @@ public:
quint32 objectId(QObject *);
QObject *object(quint32);
+ static QString objectToString(QObject *obj);
protected:
int columnCount(const QModelIndex &) const;
int rowCount(const QModelIndex &) const;