2 objectpropertymodel.cpp
4 This file is part of GammaRay, the Qt application inspection and
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
)
42 disconnect(m_obj
.data(), 0, this, SLOT(updateAll()));
43 disconnect(m_obj
.data(), 0, this, SLOT(slotReset()));
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()));
58 QVariant
ObjectPropertyModel::headerData(int section
, Qt::Orientation orientation
, int role
) const
60 if (orientation
== Qt::Horizontal
&& role
== Qt::DisplayRole
) {
63 return tr("Property");
72 return QAbstractItemModel::headerData(section
, orientation
, role
);
75 void ObjectPropertyModel::updateAll()
77 if (m_updateTimer
->isActive()) {
80 m_updateTimer
->start(100);
83 void ObjectPropertyModel::doEmitChanged()
85 emit
dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
88 #include "objectpropertymodel.moc"