diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-05-08 03:04:54 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-05-08 03:04:54 (GMT) |
commit | e4fb4f78ae18e3b5a538ce47b43136b4c666674e (patch) | |
tree | ea7ad4818ff1e23cfc926c989130f750057292a9 /src/declarative/debugger | |
parent | 1e71ce9f221c739f03c9e6d49faf7cd7b0c85ae2 (diff) | |
download | Qt-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.cpp | 24 | ||||
-rw-r--r-- | src/declarative/debugger/qmldebugger.h | 4 | ||||
-rw-r--r-- | src/declarative/debugger/qmlpropertyview.cpp | 28 | ||||
-rw-r--r-- | src/declarative/debugger/qmlpropertyview_p.h | 4 | ||||
-rw-r--r-- | src/declarative/debugger/qmlwatches.cpp | 4 | ||||
-rw-r--r-- | src/declarative/debugger/qmlwatches_p.h | 1 |
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; |