Merge branch 'master' into refactor
[profile/ivi/qtdeclarative.git] / src / qtquick1 / graphicsitems / qdeclarativeitem.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the QtDeclarative module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QDECLARATIVEITEM_H
43 #define QDECLARATIVEITEM_H
44
45 #include <QtDeclarative/qdeclarative.h>
46 #include <QtDeclarative/qdeclarativecomponent.h>
47
48 #include <QtCore/QObject>
49 #include <QtCore/QList>
50 #include <QtGui/qfont.h>
51 #include <QtWidgets/qgraphicsitem.h>
52 #include <QtWidgets/qgraphicstransform.h>
53 #include <QtWidgets/qaction.h>
54
55 QT_BEGIN_HEADER
56
57 QT_BEGIN_NAMESPACE
58
59 QT_MODULE(Declarative)
60
61 class QDeclarative1State;
62 class QDeclarative1AnchorLine;
63 class QDeclarative1Transition;
64 class QDeclarative1KeyEvent;
65 class QDeclarative1Anchors;
66 class QDeclarativeItemPrivate;
67 class QDeclarativeV8Function;
68 class Q_DECLARATIVE_EXPORT QDeclarativeItem : public QGraphicsObject, public QDeclarativeParserStatus
69 {
70     Q_OBJECT
71     Q_INTERFACES(QDeclarativeParserStatus)
72
73     Q_PROPERTY(QDeclarativeItem * parent READ parentItem WRITE setParentItem NOTIFY parentChanged DESIGNABLE false FINAL)
74     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
75     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarativeListProperty<QObject> resources READ resources DESIGNABLE false)
76     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarativeListProperty<QDeclarative1State> states READ states DESIGNABLE false)
77     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarativeListProperty<QDeclarative1Transition> transitions READ transitions DESIGNABLE false)
78     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QString state READ state WRITE setState NOTIFY stateChanged)
79     Q_PROPERTY(QRectF childrenRect READ childrenRect NOTIFY childrenRectChanged DESIGNABLE false FINAL)
80     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1Anchors * anchors READ anchors DESIGNABLE false CONSTANT FINAL)
81     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine left READ left CONSTANT FINAL)
82     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine right READ right CONSTANT FINAL)
83     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine horizontalCenter READ horizontalCenter CONSTANT FINAL)
84     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine top READ top CONSTANT FINAL)
85     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine bottom READ bottom CONSTANT FINAL)
86     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine verticalCenter READ verticalCenter CONSTANT FINAL)
87     Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine baseline READ baseline CONSTANT FINAL)
88     Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged)
89     Q_PROPERTY(bool clip READ clip WRITE setClip NOTIFY clipChanged) // ### move to QGI/QGO, NOTIFY
90     Q_PROPERTY(bool focus READ hasFocus WRITE setFocus NOTIFY focusChanged FINAL)
91     Q_PROPERTY(bool activeFocus READ hasActiveFocus NOTIFY activeFocusChanged)
92     Q_PROPERTY(QDeclarativeListProperty<QGraphicsTransform> transform READ transform DESIGNABLE false FINAL)
93     Q_PROPERTY(TransformOrigin transformOrigin READ transformOrigin WRITE setTransformOrigin NOTIFY transformOriginChanged)
94     Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint) // transformOriginPoint is read-only for Item
95     Q_PROPERTY(bool smooth READ smooth WRITE setSmooth NOTIFY smoothChanged)
96     Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged REVISION 1)
97     Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged REVISION 1)
98
99     Q_ENUMS(TransformOrigin)
100     Q_CLASSINFO("DefaultProperty", "data")
101
102 public:
103     enum TransformOrigin {
104         TopLeft, Top, TopRight,
105         Left, Center, Right,
106         BottomLeft, Bottom, BottomRight
107     };
108
109     QDeclarativeItem(QDeclarativeItem *parent = 0);
110     virtual ~QDeclarativeItem();
111
112     QDeclarativeItem *parentItem() const;
113     void setParentItem(QDeclarativeItem *parent);
114
115     QRectF childrenRect();
116
117     bool clip() const;
118     void setClip(bool);
119
120     qreal baselineOffset() const;
121     void setBaselineOffset(qreal);
122
123     QDeclarativeListProperty<QGraphicsTransform> transform();
124
125     qreal width() const;
126     void setWidth(qreal);
127     void resetWidth();
128     qreal implicitWidth() const;
129
130     qreal height() const;
131     void setHeight(qreal);
132     void resetHeight();
133     qreal implicitHeight() const;
134
135     void setSize(const QSizeF &size);
136
137     TransformOrigin transformOrigin() const;
138     void setTransformOrigin(TransformOrigin);
139
140     bool smooth() const;
141     void setSmooth(bool);
142
143     QRectF boundingRect() const;
144     virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
145
146     bool hasActiveFocus() const;
147     bool hasFocus() const;
148     void setFocus(bool);
149
150     bool keepMouseGrab() const;
151     void setKeepMouseGrab(bool);
152
153     Q_INVOKABLE void mapFromItem(QDeclarativeV8Function*) const;
154     Q_INVOKABLE void mapToItem(QDeclarativeV8Function*) const;
155     Q_INVOKABLE void forceActiveFocus();
156     Q_INVOKABLE QDeclarativeItem *childAt(qreal x, qreal y) const;
157
158 Q_SIGNALS:
159     void childrenRectChanged(const QRectF &);
160     void baselineOffsetChanged(qreal);
161     void stateChanged(const QString &);
162     void focusChanged(bool);
163     void activeFocusChanged(bool);
164     void parentChanged(QDeclarativeItem *);
165     void transformOriginChanged(TransformOrigin);
166     void smoothChanged(bool);
167     void clipChanged(bool);
168     Q_REVISION(1) void implicitWidthChanged();
169     Q_REVISION(1) void implicitHeightChanged();
170
171 protected:
172     bool isComponentComplete() const;
173     virtual bool sceneEvent(QEvent *);
174     virtual bool event(QEvent *);
175     virtual QVariant itemChange(GraphicsItemChange, const QVariant &);
176
177     void setImplicitWidth(qreal);
178     bool widthValid() const; // ### better name?
179     void setImplicitHeight(qreal);
180     bool heightValid() const; // ### better name?
181
182     virtual void classBegin();
183     virtual void componentComplete();
184     virtual void keyPressEvent(QKeyEvent *event);
185     virtual void keyReleaseEvent(QKeyEvent *event);
186     virtual void inputMethodEvent(QInputMethodEvent *);
187     virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
188     void keyPressPreHandler(QKeyEvent *);
189     void keyReleasePreHandler(QKeyEvent *);
190     void inputMethodPreHandler(QInputMethodEvent *);
191
192     virtual void geometryChanged(const QRectF &newGeometry,
193                                  const QRectF &oldGeometry);
194
195 protected:
196     QDeclarativeItem(QDeclarativeItemPrivate &dd, QDeclarativeItem *parent = 0);
197
198 private:
199     Q_DISABLE_COPY(QDeclarativeItem)
200     Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarativeItem)
201 };
202
203 template<typename T>
204         T qobject_cast(QGraphicsObject *o)
205 {
206     QObject *obj = o;
207     return qobject_cast<T>(obj);
208 }
209
210 // ### move to QGO
211 template<typename T>
212 T qobject_cast(QGraphicsItem *item)
213 {
214     if (!item) return 0;
215     QObject *o = item->toGraphicsObject();
216     return qobject_cast<T>(o);
217 }
218
219 #ifndef QT_NO_DEBUG_STREAM
220 QDebug Q_DECLARATIVE_EXPORT operator<<(QDebug debug, QDeclarativeItem *item);
221 #endif
222
223 QT_END_NAMESPACE
224
225 QML_DECLARE_TYPE(QDeclarativeItem)
226 QML_DECLARE_TYPE(QGraphicsObject)
227 QML_DECLARE_TYPE(QGraphicsTransform)
228 QML_DECLARE_TYPE(QGraphicsScale)
229 QML_DECLARE_TYPE(QGraphicsRotation)
230 QML_DECLARE_TYPE(QGraphicsWidget)
231 QML_DECLARE_TYPE(QAction)
232
233 QT_END_HEADER
234
235 #endif // QDECLARATIVEITEM_H