2 metaobjectrepository.cpp
4 This file is part of GammaRay, the Qt application inspection and
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"
29 #include <qgraphicsitem.h>
30 #include <qgraphicslayoutitem.h>
31 #include <qgraphicswidget.h>
32 #include <qgraphicsproxywidget.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 ) ); \
48 #define MO_ADD_METAOBJECT1(Class, Base1) \
49 mo = new MetaObjectImpl<Class, Base1>; \
50 mo->setClassName( QLatin1String( #Class ) ); \
51 MO_ADD_BASECLASS( Base1 ) \
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 ) \
61 #define MO_ADD_PROPERTY(Class, Type, Getter, Setter) \
62 mo->addProperty( new MetaPropertyImpl<Class, Type>( \
63 QLatin1String( #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 ), \
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 ), \
80 using namespace GammaRay
;
84 class StaticMetaObjectRepository
: public MetaObjectRepository
87 StaticMetaObjectRepository() : MetaObjectRepository() {}
92 Q_GLOBAL_STATIC(StaticMetaObjectRepository
, s_instance
)
94 MetaObjectRepository::MetaObjectRepository()
99 MetaObjectRepository::~MetaObjectRepository()
101 qDeleteAll(m_metaObjects
);
104 void MetaObjectRepository::initBuiltInTypes()
107 initGraphicsViewTypes();
110 void MetaObjectRepository::initQObjectTypes()
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()
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
);