Install gammaray_probe.so to /usr/lib/gammaray
[gammaray-debian.git] / objectpropertymodel.cpp
blobcd1600b8da198c25972f750be88d06a4c07d083a
1 /*
2 objectpropertymodel.cpp
4 This file is part of GammaRay, the Qt application inspection and
5 manipulation tool.
7 Copyright (C) 2010-2011 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
8 Author: Volker Krause <volker.krause@kdab.com>
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version 2 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>.
24 #include "objectpropertymodel.h"
26 #include <QtCore/QMetaProperty>
27 #include <QtCore/QTimer>
29 using namespace GammaRay;
31 ObjectPropertyModel::ObjectPropertyModel(QObject *parent)
32 : QAbstractTableModel(parent),
33 m_updateTimer(new QTimer(this))
35 connect(m_updateTimer, SIGNAL(timeout()), SLOT(doEmitChanged()));
36 m_updateTimer->setSingleShot(true);
39 void ObjectPropertyModel::setObject(QObject *object)
41 if (m_obj) {
42 disconnect(m_obj.data(), 0, this, SLOT(updateAll()));
43 disconnect(m_obj.data(), 0, this, SLOT(slotReset()));
45 m_obj = object;
46 if (object) {
47 connect(object, SIGNAL(destroyed(QObject*)), SLOT(slotReset()));
48 for (int i = 0; i < object->metaObject()->propertyCount(); ++i) {
49 const QMetaProperty prop = object->metaObject()->property(i);
50 if (prop.hasNotifySignal()) {
51 connect(object, QByteArray("2") + prop.notifySignal().signature(), SLOT(updateAll()));
55 reset();
58 QVariant ObjectPropertyModel::headerData(int section, Qt::Orientation orientation, int role) const
60 if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
61 switch (section) {
62 case 0:
63 return tr("Property");
64 case 1:
65 return tr("Value");
66 case 2:
67 return tr("Type");
68 case 3:
69 return tr("Class");
72 return QAbstractItemModel::headerData(section, orientation, role);
75 void ObjectPropertyModel::updateAll()
77 if (m_updateTimer->isActive()) {
78 return;
80 m_updateTimer->start(100);
83 void ObjectPropertyModel::doEmitChanged()
85 emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
88 #include "objectpropertymodel.moc"