Updated d/changelog
[gammaray-debian.git] / metaobjectrepository.cpp
blob4c3d9b334ede66b6b39196563f3858d1ad10fec9
1 /*
2 metaobjectrepository.cpp
4 This file is part of GammaRay, the Qt application inspection and
5 manipulation tool.
7 Copyright (C) 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 "metaobjectrepository.h"
25 #include "metaobject.h"
26 #include "metatypedeclarations.h"
28 #include <qglobal.h>
29 #include <qgraphicsitem.h>
30 #include <qgraphicslayoutitem.h>
31 #include <qgraphicswidget.h>
32 #include <qgraphicsproxywidget.h>
33 #include <qpen.h>
34 #include <qobject.h>
35 #include <qpalette.h>
36 #include <qstyle.h>
37 #include <qwidget.h>
39 #define MO_ADD_BASECLASS(Base) \
40 Q_ASSERT( hasMetaObject( QLatin1String( #Base ) ) ); \
41 mo->addBaseClass( metaObject( QLatin1String( #Base ) ) );
43 #define MO_ADD_METAOBJECT0(Class) \
44 mo = new MetaObjectImpl<Class>; \
45 mo->setClassName( QLatin1String( #Class ) ); \
46 addMetaObject(mo);
48 #define MO_ADD_METAOBJECT1(Class, Base1) \
49 mo = new MetaObjectImpl<Class, Base1>; \
50 mo->setClassName( QLatin1String( #Class ) ); \
51 MO_ADD_BASECLASS( Base1 ) \
52 addMetaObject(mo);
54 #define MO_ADD_METAOBJECT2(Class, Base1, Base2) \
55 mo = new MetaObjectImpl<Class, Base1, Base2>; \
56 mo->setClassName( QLatin1String( #Class ) ); \
57 MO_ADD_BASECLASS( Base1 ) \
58 MO_ADD_BASECLASS( Base2 ) \
59 addMetaObject(mo);
61 #define MO_ADD_PROPERTY(Class, Type, Getter, Setter) \
62 mo->addProperty( new MetaPropertyImpl<Class, Type>( \
63 QLatin1String( #Getter ), \
64 &Class::Getter, \
65 static_cast<void (Class::*)(Type)>(&Class::Setter) ) \
68 #define MO_ADD_PROPERTY_CR(Class, Type, Getter, Setter) \
69 mo->addProperty( new MetaPropertyImpl<Class, Type, const Type&>( \
70 QLatin1String( #Getter ), \
71 &Class::Getter, \
72 static_cast<void (Class::*)(const Type&)>(&Class::Setter) ) \
75 #define MO_ADD_PROPERTY_RO(Class, Type, Getter) \
76 mo->addProperty( new MetaPropertyImpl<Class, Type>( \
77 QLatin1String( #Getter ), \
78 &Class::Getter ) );
80 using namespace GammaRay;
82 namespace GammaRay {
84 class StaticMetaObjectRepository : public MetaObjectRepository
86 public:
87 StaticMetaObjectRepository() : MetaObjectRepository() {}
92 Q_GLOBAL_STATIC(StaticMetaObjectRepository, s_instance)
94 MetaObjectRepository::MetaObjectRepository()
96 initBuiltInTypes();
99 MetaObjectRepository::~MetaObjectRepository()
101 qDeleteAll(m_metaObjects);
104 void MetaObjectRepository::initBuiltInTypes()
106 initQObjectTypes();
107 initGraphicsViewTypes();
110 void MetaObjectRepository::initQObjectTypes()
112 MetaObject *mo = 0;
113 MO_ADD_METAOBJECT0(QObject);
114 MO_ADD_PROPERTY_RO(QObject, bool, signalsBlocked); // TODO setter has non-void return type
116 MO_ADD_METAOBJECT0(QPaintDevice);
117 MO_ADD_PROPERTY_RO(QPaintDevice, int, colorCount);
118 MO_ADD_PROPERTY_RO(QPaintDevice, int, heightMM);
119 MO_ADD_PROPERTY_RO(QPaintDevice, int, logicalDpiX);
120 MO_ADD_PROPERTY_RO(QPaintDevice, int, logicalDpiY);
121 MO_ADD_PROPERTY_RO(QPaintDevice, bool, paintingActive);
122 MO_ADD_PROPERTY_RO(QPaintDevice, int, physicalDpiX);
123 MO_ADD_PROPERTY_RO(QPaintDevice, int, physicalDpiY);
124 MO_ADD_PROPERTY_RO(QPaintDevice, int, widthMM);
126 MO_ADD_METAOBJECT2(QWidget, QObject, QPaintDevice);
127 MO_ADD_PROPERTY_RO(QWidget, QWidget*, focusProxy);
129 MO_ADD_METAOBJECT1(QStyle, QObject);
130 MO_ADD_PROPERTY_RO(QStyle, const QStyle*, proxy);
131 MO_ADD_PROPERTY_RO(QStyle, QPalette, standardPalette);
134 void MetaObjectRepository::initGraphicsViewTypes()
136 MetaObject *mo = 0; //createMetaObject( "QGraphicsItem" );
137 MO_ADD_METAOBJECT0(QGraphicsItem);
138 MO_ADD_PROPERTY (QGraphicsItem, bool, acceptDrops, setAcceptDrops);
139 MO_ADD_PROPERTY (QGraphicsItem, bool, acceptHoverEvents, setAcceptHoverEvents);
140 MO_ADD_PROPERTY (QGraphicsItem, bool, acceptTouchEvents, setAcceptTouchEvents);
141 MO_ADD_PROPERTY (QGraphicsItem, Qt::MouseButtons, acceptedMouseButtons, setAcceptedMouseButtons);
142 MO_ADD_PROPERTY_RO(QGraphicsItem, QRectF, boundingRect);
143 MO_ADD_PROPERTY (QGraphicsItem, qreal, boundingRegionGranularity, setBoundingRegionGranularity);
144 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsItem::CacheMode, cacheMode);
145 MO_ADD_PROPERTY_RO(QGraphicsItem, QRectF, childrenBoundingRect);
146 MO_ADD_PROPERTY_RO(QGraphicsItem, QPainterPath, clipPath);
147 MO_ADD_PROPERTY_CR(QGraphicsItem, QCursor, cursor, setCursor);
148 MO_ADD_PROPERTY_RO(QGraphicsItem, qreal, effectiveOpacity);
149 MO_ADD_PROPERTY (QGraphicsItem, bool, filtersChildEvents, setFiltersChildEvents);
150 MO_ADD_PROPERTY (QGraphicsItem, QGraphicsItem::GraphicsItemFlags, flags, setFlags);
151 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsItem*, focusItem);
152 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsItem*, focusProxy);
153 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsEffect*, graphicsEffect);
154 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsItemGroup*, group);
155 MO_ADD_PROPERTY_RO(QGraphicsItem, bool, hasCursor);
156 MO_ADD_PROPERTY_RO(QGraphicsItem, bool, hasFocus);
157 MO_ADD_PROPERTY (QGraphicsItem, Qt::InputMethodHints, inputMethodHints, setInputMethodHints);
158 MO_ADD_PROPERTY_RO(QGraphicsItem, bool, isActive);
159 MO_ADD_PROPERTY_RO(QGraphicsItem, bool, isClipped);
160 MO_ADD_PROPERTY (QGraphicsItem, bool, isEnabled, setEnabled);
161 MO_ADD_PROPERTY_RO(QGraphicsItem, bool, isObscured);
162 MO_ADD_PROPERTY_RO(QGraphicsItem, bool, isPanel);
163 MO_ADD_PROPERTY (QGraphicsItem, bool, isSelected, setSelected);
164 MO_ADD_PROPERTY_RO(QGraphicsItem, bool, isUnderMouse);
165 MO_ADD_PROPERTY (QGraphicsItem, bool, isVisible, setVisible);
166 MO_ADD_PROPERTY_RO(QGraphicsItem, bool, isWidget);
167 MO_ADD_PROPERTY_RO(QGraphicsItem, bool, isWindow);
168 MO_ADD_PROPERTY (QGraphicsItem, qreal, opacity, setOpacity);
169 MO_ADD_PROPERTY_RO(QGraphicsItem, QPainterPath, opaqueArea);
170 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsItem*, panel);
171 MO_ADD_PROPERTY (QGraphicsItem, QGraphicsItem::PanelModality, panelModality, setPanelModality);
172 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsItem*, parentItem);
173 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsObject*, parentObject);
174 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsWidget*, parentWidget);
175 MO_ADD_PROPERTY_CR(QGraphicsItem, QPointF, pos, setPos);
176 MO_ADD_PROPERTY (QGraphicsItem, qreal, rotation, setRotation);
177 MO_ADD_PROPERTY (QGraphicsItem, qreal, scale, setScale);
178 MO_ADD_PROPERTY_RO(QGraphicsItem, QRectF, sceneBoundingRect);
179 MO_ADD_PROPERTY_RO(QGraphicsItem, QPointF, scenePos);
180 MO_ADD_PROPERTY_RO(QGraphicsItem, QTransform, sceneTransform);
181 MO_ADD_PROPERTY_RO(QGraphicsItem, QPainterPath, shape);
182 MO_ADD_PROPERTY_CR(QGraphicsItem, QString, toolTip, setToolTip);
183 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsItem*, topLevelItem);
184 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsWidget*, topLevelWidget);
185 MO_ADD_PROPERTY_RO(QGraphicsItem, QTransform, transform/*, setTransform*/); // TODO: support setTransform
186 MO_ADD_PROPERTY_CR(QGraphicsItem, QPointF, transformOriginPoint, setTransformOriginPoint);
187 MO_ADD_PROPERTY_RO(QGraphicsItem, int, type);
188 MO_ADD_PROPERTY_RO(QGraphicsItem, QGraphicsWidget*, window);
189 MO_ADD_PROPERTY (QGraphicsItem, qreal, x, setX);
190 MO_ADD_PROPERTY (QGraphicsItem, qreal, y, setY);
191 MO_ADD_PROPERTY (QGraphicsItem, qreal, zValue, setZValue);
193 MO_ADD_METAOBJECT1(QAbstractGraphicsShapeItem, QGraphicsItem);
194 MO_ADD_PROPERTY_CR(QAbstractGraphicsShapeItem, QBrush, brush, setBrush);
195 MO_ADD_PROPERTY_CR(QAbstractGraphicsShapeItem, QPen, pen, setPen);
197 MO_ADD_METAOBJECT1(QGraphicsEllipseItem, QAbstractGraphicsShapeItem);
198 MO_ADD_PROPERTY_CR(QGraphicsEllipseItem, QRectF, rect, setRect);
199 MO_ADD_PROPERTY (QGraphicsEllipseItem, int, spanAngle, setSpanAngle);
200 MO_ADD_PROPERTY (QGraphicsEllipseItem, int, startAngle, setStartAngle);
202 MO_ADD_METAOBJECT1(QGraphicsPathItem, QAbstractGraphicsShapeItem);
203 MO_ADD_PROPERTY_CR(QGraphicsPathItem, QPainterPath, path, setPath);
205 MO_ADD_METAOBJECT1(QGraphicsPolygonItem, QAbstractGraphicsShapeItem);
206 MO_ADD_PROPERTY (QGraphicsPolygonItem, Qt::FillRule, fillRule, setFillRule);
207 MO_ADD_PROPERTY_CR(QGraphicsPolygonItem, QPolygonF, polygon, setPolygon);
209 MO_ADD_METAOBJECT1(QGraphicsSimpleTextItem, QAbstractGraphicsShapeItem);
210 MO_ADD_PROPERTY_CR(QGraphicsSimpleTextItem, QFont, font, setFont);
211 MO_ADD_PROPERTY_CR(QGraphicsSimpleTextItem, QString, text, setText);
213 MO_ADD_METAOBJECT1(QGraphicsRectItem, QAbstractGraphicsShapeItem);
214 MO_ADD_PROPERTY_CR(QGraphicsRectItem, QRectF, rect, setRect);
216 MO_ADD_METAOBJECT1(QGraphicsLineItem, QGraphicsItem);
217 MO_ADD_PROPERTY_CR(QGraphicsLineItem, QLineF, line, setLine);
218 MO_ADD_PROPERTY_CR(QGraphicsLineItem, QPen, pen, setPen);
220 MO_ADD_METAOBJECT1(QGraphicsPixmapItem, QGraphicsItem);
221 MO_ADD_PROPERTY_CR(QGraphicsPixmapItem, QPointF, offset, setOffset);
222 MO_ADD_PROPERTY_CR(QGraphicsPixmapItem, QPixmap, pixmap, setPixmap);
223 MO_ADD_PROPERTY (QGraphicsPixmapItem, QGraphicsPixmapItem::ShapeMode, shapeMode, setShapeMode);
224 MO_ADD_PROPERTY (QGraphicsPixmapItem, Qt::TransformationMode, transformationMode, setTransformationMode);
226 // no extra properties, but we need the inheritance connection for anything above to work
227 MO_ADD_METAOBJECT2(QGraphicsObject, QGraphicsItem, QObject);
229 MO_ADD_METAOBJECT0(QGraphicsLayoutItem);
230 MO_ADD_PROPERTY_RO(QGraphicsLayoutItem, QRectF, contentsRect);
231 MO_ADD_PROPERTY_RO(QGraphicsLayoutItem, bool, isLayout);
232 MO_ADD_PROPERTY_RO(QGraphicsLayoutItem, bool, ownedByLayout);
234 MO_ADD_METAOBJECT2(QGraphicsWidget, QGraphicsObject, QGraphicsLayoutItem);
235 MO_ADD_PROPERTY_RO(QGraphicsWidget, QRectF, windowFrameGeometry);
236 MO_ADD_PROPERTY_RO(QGraphicsWidget, QRectF, windowFrameRect);
238 MO_ADD_METAOBJECT1(QGraphicsProxyWidget, QGraphicsWidget);
239 MO_ADD_PROPERTY_RO(QGraphicsProxyWidget, QWidget*, widget);
242 MetaObjectRepository *MetaObjectRepository::instance()
244 return s_instance();
247 void MetaObjectRepository::addMetaObject(MetaObject *mo)
249 Q_ASSERT(!mo->className().isEmpty());
250 m_metaObjects.insert(mo->className(), mo);
253 MetaObject *MetaObjectRepository::metaObject(const QString &typeName) const
255 return m_metaObjects.value(typeName);
258 bool MetaObjectRepository::hasMetaObject(const QString &typeName) const
260 return m_metaObjects.contains(typeName);