diff options
Diffstat (limited to 'tools/qmldebugger/propertyview.cpp')
-rw-r--r-- | tools/qmldebugger/propertyview.cpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/tools/qmldebugger/propertyview.cpp b/tools/qmldebugger/propertyview.cpp new file mode 100644 index 0000000..d5bb3df --- /dev/null +++ b/tools/qmldebugger/propertyview.cpp @@ -0,0 +1,117 @@ +#include "propertyview.h" +#include <QtCore/qdebug.h> +#include <QtGui/qboxlayout.h> +#include <QtGui/qtreewidget.h> + +QT_BEGIN_NAMESPACE + +PropertyView::PropertyView(QWidget *parent) +: QWidget(parent), m_tree(0) +{ + QVBoxLayout *layout = new QVBoxLayout; + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + setLayout(layout); + + m_tree = new QTreeWidget(this); + m_tree->setExpandsOnDoubleClick(false); + m_tree->setHeaderLabels(QStringList() << tr("Property") << tr("Value")); + QObject::connect(m_tree, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), + this, SLOT(itemDoubleClicked(QTreeWidgetItem *))); + + m_tree->setColumnCount(2); + + layout->addWidget(m_tree); +} + +class PropertyViewItem : public QObject, public QTreeWidgetItem +{ + Q_OBJECT +public: + PropertyViewItem(QTreeWidget *widget); + PropertyViewItem(QTreeWidgetItem *parent); + + QmlDebugPropertyReference property; +}; + +PropertyViewItem::PropertyViewItem(QTreeWidget *widget) +: QTreeWidgetItem(widget) +{ +} + +PropertyViewItem::PropertyViewItem(QTreeWidgetItem *parent) +: QTreeWidgetItem(parent) +{ +} + + +void PropertyView::setObject(const QmlDebugObjectReference &object) +{ + m_object = object; + m_tree->clear(); + + QList<QmlDebugPropertyReference> properties = object.properties(); + for (int i=0; i<properties.count(); i++) { + const QmlDebugPropertyReference &p = properties[i]; + + PropertyViewItem *item = new PropertyViewItem(m_tree); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled); + item->setCheckState(0, Qt::Unchecked); + item->property = p; + + item->setText(0, p.name()); + + if (!p.binding().isEmpty()) { + PropertyViewItem *binding = new PropertyViewItem(item); + binding->setText(1, p.binding()); + binding->setForeground(1, Qt::darkGreen); + } + + item->setExpanded(true); + } + + m_tree->resizeColumnToContents(0); +} + +const QmlDebugObjectReference &PropertyView::object() const +{ + return m_object; +} + +void PropertyView::clear() +{ + setObject(QmlDebugObjectReference()); +} + +void PropertyView::updateProperty(const QString &name, const QVariant &value) +{ + for (int i=0; i<m_tree->topLevelItemCount(); i++) { + PropertyViewItem *item = static_cast<PropertyViewItem *>(m_tree->topLevelItem(i)); + if (item->property.name() == name) + item->setText(1, value.toString()); + } +} + +void PropertyView::setPropertyIsWatched(const QString &name, bool watched) +{ + for (int i=0; i<m_tree->topLevelItemCount(); i++) { + PropertyViewItem *item = static_cast<PropertyViewItem *>(m_tree->topLevelItem(i)); + if (item->property.name() == name) { + if (watched) + item->setCheckState(0, Qt::Checked); + else + item->setCheckState(0, Qt::Unchecked); + } + } +} + +void PropertyView::itemDoubleClicked(QTreeWidgetItem *i) +{ + PropertyViewItem *item = static_cast<PropertyViewItem *>(i); + if (!item->property.name().isEmpty()) + emit propertyDoubleClicked(item->property); +} + +QT_END_NAMESPACE + +#include "propertyview.moc" |