Initial import from the monolithic Qt.
[profile/ivi/qtdeclarative.git] / src / declarative / graphicsitems / qdeclarativeitem_p.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 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file.  Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23 **
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27 **
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
30 **
31 **
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QDECLARATIVEITEM_P_H
43 #define QDECLARATIVEITEM_P_H
44
45 //
46 //  W A R N I N G
47 //  -------------
48 //
49 // This file is not part of the Qt API.  It exists purely as an
50 // implementation detail.  This header file may change from version to
51 // version without notice, or even be removed.
52 //
53 // We mean it.
54 //
55
56 #include "qdeclarativeitem.h"
57
58 #include "private/qdeclarativeanchors_p.h"
59 #include "private/qdeclarativeanchors_p_p.h"
60 #include "private/qdeclarativeitemchangelistener_p.h"
61 #include <private/qpodvector_p.h>
62
63 #include <private/qdeclarativestate_p.h>
64 #include <private/qdeclarativenullablevalue_p_p.h>
65 #include <private/qdeclarativenotifier_p.h>
66 #include <private/qdeclarativeglobal_p.h>
67
68 #include <qdeclarative.h>
69 #include <qdeclarativecontext.h>
70
71 #include <QtCore/qlist.h>
72 #include <QtCore/qdebug.h>
73
74 #include <private/qgraphicsitem_p.h>
75
76 QT_BEGIN_NAMESPACE
77
78 class QNetworkReply;
79 class QDeclarativeItemKeyFilter;
80 class QDeclarativeLayoutMirroringAttached;
81
82 //### merge into private?
83 class QDeclarativeContents : public QObject, public QDeclarativeItemChangeListener
84 {
85     Q_OBJECT
86 public:
87     QDeclarativeContents(QDeclarativeItem *item);
88     ~QDeclarativeContents();
89
90     QRectF rectF() const;
91
92     void childRemoved(QDeclarativeItem *item);
93     void childAdded(QDeclarativeItem *item);
94
95     void calcGeometry() { calcWidth(); calcHeight(); }
96     void complete();
97
98 Q_SIGNALS:
99     void rectChanged(QRectF);
100
101 protected:
102     void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry);
103     void itemDestroyed(QDeclarativeItem *item);
104     //void itemVisibilityChanged(QDeclarativeItem *item)
105
106 private:
107     void calcHeight(QDeclarativeItem *changed = 0);
108     void calcWidth(QDeclarativeItem *changed = 0);
109
110     QDeclarativeItem *m_item;
111     qreal m_x;
112     qreal m_y;
113     qreal m_width;
114     qreal m_height;
115 };
116
117 class Q_DECLARATIVE_EXPORT QDeclarativeItemPrivate : public QGraphicsItemPrivate
118 {
119     Q_DECLARE_PUBLIC(QDeclarativeItem)
120
121 public:
122     QDeclarativeItemPrivate()
123     : _anchors(0), _contents(0),
124       baselineOffset(0),
125       _anchorLines(0),
126       _stateGroup(0), origin(QDeclarativeItem::Center),
127       widthValid(false), heightValid(false),
128       componentComplete(true), keepMouse(false),
129       smooth(false), transformOriginDirty(true), doneEventPreHandler(false),
130       inheritedLayoutMirror(false), effectiveLayoutMirror(false), isMirrorImplicit(true),
131       inheritMirrorFromParent(false), inheritMirrorFromItem(false), keyHandler(0),
132       mWidth(0), mHeight(0), mImplicitWidth(0), mImplicitHeight(0), attachedLayoutDirection(0), hadSubFocusItem(false)
133     {
134         QGraphicsItemPrivate::acceptedMouseButtons = 0;
135         isDeclarativeItem = 1;
136         QGraphicsItemPrivate::flags = QGraphicsItem::GraphicsItemFlags(
137                                       QGraphicsItem::ItemHasNoContents
138                                       | QGraphicsItem::ItemIsFocusable
139                                       | QGraphicsItem::ItemNegativeZStacksBehindParent);
140     }
141
142     void init(QDeclarativeItem *parent)
143     {
144         Q_Q(QDeclarativeItem);
145         if (parent) {
146             QDeclarative_setParent_noEvent(q, parent);
147             q->setParentItem(parent);
148             QDeclarativeItemPrivate *parentPrivate = QDeclarativeItemPrivate::get(parent);
149             setImplicitLayoutMirror(parentPrivate->inheritedLayoutMirror, parentPrivate->inheritMirrorFromParent);
150         }
151         baselineOffset.invalidate();
152         mouseSetsFocus = false;
153     }
154
155     bool isMirrored() const {
156         return effectiveLayoutMirror;
157     }
158
159     // Private Properties
160     qreal width() const;
161     void setWidth(qreal);
162     void resetWidth();
163
164     qreal height() const;
165     void setHeight(qreal);
166     void resetHeight();
167
168     virtual qreal implicitWidth() const;
169     virtual qreal implicitHeight() const;
170     virtual void implicitWidthChanged();
171     virtual void implicitHeightChanged();
172
173     void resolveLayoutMirror();
174     void setImplicitLayoutMirror(bool mirror, bool inherit);
175     void setLayoutMirror(bool mirror);
176
177     QDeclarativeListProperty<QObject> data();
178     QDeclarativeListProperty<QObject> resources();
179
180     QDeclarativeListProperty<QDeclarativeState> states();
181     QDeclarativeListProperty<QDeclarativeTransition> transitions();
182
183     QString state() const;
184     void setState(const QString &);
185
186     QDeclarativeAnchorLine left() const;
187     QDeclarativeAnchorLine right() const;
188     QDeclarativeAnchorLine horizontalCenter() const;
189     QDeclarativeAnchorLine top() const;
190     QDeclarativeAnchorLine bottom() const;
191     QDeclarativeAnchorLine verticalCenter() const;
192     QDeclarativeAnchorLine baseline() const;
193
194     // data property
195     static void data_append(QDeclarativeListProperty<QObject> *, QObject *);
196     static int data_count(QDeclarativeListProperty<QObject> *);
197     static QObject *data_at(QDeclarativeListProperty<QObject> *, int);
198     static void data_clear(QDeclarativeListProperty<QObject> *);
199
200     // resources property
201     static QObject *resources_at(QDeclarativeListProperty<QObject> *, int);
202     static void resources_append(QDeclarativeListProperty<QObject> *, QObject *);
203     static int resources_count(QDeclarativeListProperty<QObject> *);
204     static void resources_clear(QDeclarativeListProperty<QObject> *);
205
206     // transform property
207     static int transform_count(QDeclarativeListProperty<QGraphicsTransform> *list);
208     static void transform_append(QDeclarativeListProperty<QGraphicsTransform> *list, QGraphicsTransform *);
209     static QGraphicsTransform *transform_at(QDeclarativeListProperty<QGraphicsTransform> *list, int);
210     static void transform_clear(QDeclarativeListProperty<QGraphicsTransform> *list);
211
212     static QDeclarativeItemPrivate* get(QDeclarativeItem *item)
213     {
214         return item->d_func();
215     }
216
217     // Accelerated property accessors
218     QDeclarativeNotifier parentNotifier;
219     static void parentProperty(QObject *o, void *rv, QDeclarativeNotifierEndpoint *e);
220
221     QDeclarativeAnchors *anchors() {
222         if (!_anchors) {
223             Q_Q(QDeclarativeItem);
224             _anchors = new QDeclarativeAnchors(q);
225             if (!componentComplete)
226                 _anchors->classBegin();
227         }
228         return _anchors;
229     }
230     QDeclarativeAnchors *_anchors;
231     QDeclarativeContents *_contents;
232
233     QDeclarativeNullableValue<qreal> baselineOffset;
234
235     struct AnchorLines {
236         AnchorLines(QGraphicsObject *);
237         QDeclarativeAnchorLine left;
238         QDeclarativeAnchorLine right;
239         QDeclarativeAnchorLine hCenter;
240         QDeclarativeAnchorLine top;
241         QDeclarativeAnchorLine bottom;
242         QDeclarativeAnchorLine vCenter;
243         QDeclarativeAnchorLine baseline;
244     };
245     mutable AnchorLines *_anchorLines;
246     AnchorLines *anchorLines() const {
247         Q_Q(const QDeclarativeItem);
248         if (!_anchorLines) _anchorLines =
249             new AnchorLines(const_cast<QDeclarativeItem *>(q));
250         return _anchorLines;
251     }
252
253     enum ChangeType {
254         Geometry = 0x01,
255         SiblingOrder = 0x02,
256         Visibility = 0x04,
257         Opacity = 0x08,
258         Destroyed = 0x10
259     };
260
261     Q_DECLARE_FLAGS(ChangeTypes, ChangeType)
262
263     struct ChangeListener {
264         ChangeListener(QDeclarativeItemChangeListener *l, QDeclarativeItemPrivate::ChangeTypes t) : listener(l), types(t) {}
265         QDeclarativeItemChangeListener *listener;
266         QDeclarativeItemPrivate::ChangeTypes types;
267         bool operator==(const ChangeListener &other) const { return listener == other.listener && types == other.types; }
268     };
269
270     void addItemChangeListener(QDeclarativeItemChangeListener *listener, ChangeTypes types) {
271         changeListeners.append(ChangeListener(listener, types));
272     }
273     void removeItemChangeListener(QDeclarativeItemChangeListener *, ChangeTypes types);
274     QPODVector<ChangeListener,4> changeListeners;
275
276     QDeclarativeStateGroup *_states();
277     QDeclarativeStateGroup *_stateGroup;
278
279     QDeclarativeItem::TransformOrigin origin:5;
280     bool widthValid:1;
281     bool heightValid:1;
282     bool componentComplete:1;
283     bool keepMouse:1;
284     bool smooth:1;
285     bool transformOriginDirty : 1;
286     bool doneEventPreHandler : 1;
287     bool inheritedLayoutMirror:1;
288     bool effectiveLayoutMirror:1;
289     bool isMirrorImplicit:1;
290     bool inheritMirrorFromParent:1;
291     bool inheritMirrorFromItem:1;
292
293     QDeclarativeItemKeyFilter *keyHandler;
294
295     qreal mWidth;
296     qreal mHeight;
297     qreal mImplicitWidth;
298     qreal mImplicitHeight;
299
300     QDeclarativeLayoutMirroringAttached* attachedLayoutDirection;
301
302     bool hadSubFocusItem;
303
304     QPointF computeTransformOrigin() const;
305
306     virtual void setPosHelper(const QPointF &pos)
307     {
308         Q_Q(QDeclarativeItem);
309         QRectF oldGeometry(this->pos.x(), this->pos.y(), mWidth, mHeight);
310         QGraphicsItemPrivate::setPosHelper(pos);
311         q->geometryChanged(QRectF(this->pos.x(), this->pos.y(), mWidth, mHeight), oldGeometry);
312     }
313
314     // Reimplemented from QGraphicsItemPrivate
315     virtual void subFocusItemChange()
316     {
317         bool hasSubFocusItem = subFocusItem != 0;
318         if (((flags & QGraphicsItem::ItemIsFocusScope) || !parent) && hasSubFocusItem != hadSubFocusItem)
319             emit q_func()->activeFocusChanged(hasSubFocusItem);
320         //see also QDeclarativeItemPrivate::focusChanged
321         hadSubFocusItem = hasSubFocusItem;
322     }
323
324     // Reimplemented from QGraphicsItemPrivate
325     virtual void focusScopeItemChange(bool isSubFocusItem)
326     {
327         emit q_func()->focusChanged(isSubFocusItem);
328     }
329
330
331     // Reimplemented from QGraphicsItemPrivate
332     virtual void siblingOrderChange()
333     {
334         Q_Q(QDeclarativeItem);
335         for(int ii = 0; ii < changeListeners.count(); ++ii) {
336             const QDeclarativeItemPrivate::ChangeListener &change = changeListeners.at(ii);
337             if (change.types & QDeclarativeItemPrivate::SiblingOrder) {
338                 change.listener->itemSiblingOrderChanged(q);
339             }
340         }
341     }
342
343     // Reimplemented from QGraphicsItemPrivate
344     virtual void transformChanged();
345
346     virtual void focusChanged(bool);
347
348     virtual void mirrorChange() {};
349
350     static qint64 consistentTime;
351     static void setConsistentTime(qint64 t);
352     static void start(QElapsedTimer &);
353     static qint64 elapsed(QElapsedTimer &);
354     static qint64 restart(QElapsedTimer &);
355 };
356
357 /*
358     Key filters can be installed on a QDeclarativeItem, but not removed.  Currently they
359     are only used by attached objects (which are only destroyed on Item
360     destruction), so this isn't a problem.  If in future this becomes any form
361     of public API, they will have to support removal too.
362 */
363 class QDeclarativeItemKeyFilter
364 {
365 public:
366     QDeclarativeItemKeyFilter(QDeclarativeItem * = 0);
367     virtual ~QDeclarativeItemKeyFilter();
368
369     virtual void keyPressed(QKeyEvent *event, bool post);
370     virtual void keyReleased(QKeyEvent *event, bool post);
371     virtual void inputMethodEvent(QInputMethodEvent *event, bool post);
372     virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
373     virtual void componentComplete();
374
375     bool m_processPost;
376
377 private:
378     QDeclarativeItemKeyFilter *m_next;
379 };
380
381 class QDeclarativeKeyNavigationAttachedPrivate : public QObjectPrivate
382 {
383 public:
384     QDeclarativeKeyNavigationAttachedPrivate()
385         : QObjectPrivate(), left(0), right(0), up(0), down(0), tab(0), backtab(0) {}
386
387     QDeclarativeItem *left;
388     QDeclarativeItem *right;
389     QDeclarativeItem *up;
390     QDeclarativeItem *down;
391     QDeclarativeItem *tab;
392     QDeclarativeItem *backtab;
393 };
394
395 class QDeclarativeKeyNavigationAttached : public QObject, public QDeclarativeItemKeyFilter
396 {
397     Q_OBJECT
398     Q_DECLARE_PRIVATE(QDeclarativeKeyNavigationAttached)
399
400     Q_PROPERTY(QDeclarativeItem *left READ left WRITE setLeft NOTIFY leftChanged)
401     Q_PROPERTY(QDeclarativeItem *right READ right WRITE setRight NOTIFY rightChanged)
402     Q_PROPERTY(QDeclarativeItem *up READ up WRITE setUp NOTIFY upChanged)
403     Q_PROPERTY(QDeclarativeItem *down READ down WRITE setDown NOTIFY downChanged)
404     Q_PROPERTY(QDeclarativeItem *tab READ tab WRITE setTab NOTIFY tabChanged)
405     Q_PROPERTY(QDeclarativeItem *backtab READ backtab WRITE setBacktab NOTIFY backtabChanged)
406     Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
407
408     Q_ENUMS(Priority)
409
410 public:
411     QDeclarativeKeyNavigationAttached(QObject * = 0);
412
413     QDeclarativeItem *left() const;
414     void setLeft(QDeclarativeItem *);
415     QDeclarativeItem *right() const;
416     void setRight(QDeclarativeItem *);
417     QDeclarativeItem *up() const;
418     void setUp(QDeclarativeItem *);
419     QDeclarativeItem *down() const;
420     void setDown(QDeclarativeItem *);
421     QDeclarativeItem *tab() const;
422     void setTab(QDeclarativeItem *);
423     QDeclarativeItem *backtab() const;
424     void setBacktab(QDeclarativeItem *);
425
426     enum Priority { BeforeItem, AfterItem };
427     Priority priority() const;
428     void setPriority(Priority);
429
430     static QDeclarativeKeyNavigationAttached *qmlAttachedProperties(QObject *);
431
432 Q_SIGNALS:
433     void leftChanged();
434     void rightChanged();
435     void upChanged();
436     void downChanged();
437     void tabChanged();
438     void backtabChanged();
439     void priorityChanged();
440
441 private:
442     virtual void keyPressed(QKeyEvent *event, bool post);
443     virtual void keyReleased(QKeyEvent *event, bool post);
444     void setFocusNavigation(QDeclarativeItem *currentItem, const char *dir);
445 };
446
447 class QDeclarativeLayoutMirroringAttached : public QObject
448 {
449     Q_OBJECT
450     Q_PROPERTY(bool enabled READ enabled WRITE setEnabled RESET resetEnabled NOTIFY enabledChanged)
451     Q_PROPERTY(bool childrenInherit READ childrenInherit WRITE setChildrenInherit NOTIFY childrenInheritChanged)
452
453 public:
454     explicit QDeclarativeLayoutMirroringAttached(QObject *parent = 0);
455
456     bool enabled() const;
457     void setEnabled(bool);
458     void resetEnabled();
459
460     bool childrenInherit() const;
461     void setChildrenInherit(bool);
462
463     static QDeclarativeLayoutMirroringAttached *qmlAttachedProperties(QObject *);
464 Q_SIGNALS:
465     void enabledChanged();
466     void childrenInheritChanged();
467 private:
468     friend class QDeclarativeItemPrivate;
469     QDeclarativeItemPrivate *itemPrivate;
470 };
471
472 class QDeclarativeKeysAttachedPrivate : public QObjectPrivate
473 {
474 public:
475     QDeclarativeKeysAttachedPrivate()
476         : QObjectPrivate(), inPress(false), inRelease(false)
477         , inIM(false), enabled(true), imeItem(0), item(0)
478     {}
479
480     bool isConnected(const char *signalName);
481
482     QGraphicsItem *finalFocusProxy(QGraphicsItem *item) const
483     {
484         QGraphicsItem *fp;
485         while ((fp = item->focusProxy()))
486             item = fp;
487         return item;
488     }
489
490     //loop detection
491     bool inPress:1;
492     bool inRelease:1;
493     bool inIM:1;
494
495     bool enabled : 1;
496
497     QGraphicsItem *imeItem;
498     QList<QDeclarativeItem *> targets;
499     QDeclarativeItem *item;
500 };
501
502 class QDeclarativeKeysAttached : public QObject, public QDeclarativeItemKeyFilter
503 {
504     Q_OBJECT
505     Q_DECLARE_PRIVATE(QDeclarativeKeysAttached)
506
507     Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
508     Q_PROPERTY(QDeclarativeListProperty<QDeclarativeItem> forwardTo READ forwardTo)
509     Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
510
511     Q_ENUMS(Priority)
512
513 public:
514     QDeclarativeKeysAttached(QObject *parent=0);
515     ~QDeclarativeKeysAttached();
516
517     bool enabled() const { Q_D(const QDeclarativeKeysAttached); return d->enabled; }
518     void setEnabled(bool enabled) {
519         Q_D(QDeclarativeKeysAttached);
520         if (enabled != d->enabled) {
521             d->enabled = enabled;
522             emit enabledChanged();
523         }
524     }
525
526     enum Priority { BeforeItem, AfterItem};
527     Priority priority() const;
528     void setPriority(Priority);
529
530     QDeclarativeListProperty<QDeclarativeItem> forwardTo() {
531         Q_D(QDeclarativeKeysAttached);
532         return QDeclarativeListProperty<QDeclarativeItem>(this, d->targets);
533     }
534
535     virtual void componentComplete();
536
537     static QDeclarativeKeysAttached *qmlAttachedProperties(QObject *);
538
539 Q_SIGNALS:
540     void enabledChanged();
541     void priorityChanged();
542     void pressed(QDeclarativeKeyEvent *event);
543     void released(QDeclarativeKeyEvent *event);
544     void digit0Pressed(QDeclarativeKeyEvent *event);
545     void digit1Pressed(QDeclarativeKeyEvent *event);
546     void digit2Pressed(QDeclarativeKeyEvent *event);
547     void digit3Pressed(QDeclarativeKeyEvent *event);
548     void digit4Pressed(QDeclarativeKeyEvent *event);
549     void digit5Pressed(QDeclarativeKeyEvent *event);
550     void digit6Pressed(QDeclarativeKeyEvent *event);
551     void digit7Pressed(QDeclarativeKeyEvent *event);
552     void digit8Pressed(QDeclarativeKeyEvent *event);
553     void digit9Pressed(QDeclarativeKeyEvent *event);
554
555     void leftPressed(QDeclarativeKeyEvent *event);
556     void rightPressed(QDeclarativeKeyEvent *event);
557     void upPressed(QDeclarativeKeyEvent *event);
558     void downPressed(QDeclarativeKeyEvent *event);
559     void tabPressed(QDeclarativeKeyEvent *event);
560     void backtabPressed(QDeclarativeKeyEvent *event);
561
562     void asteriskPressed(QDeclarativeKeyEvent *event);
563     void numberSignPressed(QDeclarativeKeyEvent *event);
564     void escapePressed(QDeclarativeKeyEvent *event);
565     void returnPressed(QDeclarativeKeyEvent *event);
566     void enterPressed(QDeclarativeKeyEvent *event);
567     void deletePressed(QDeclarativeKeyEvent *event);
568     void spacePressed(QDeclarativeKeyEvent *event);
569     void backPressed(QDeclarativeKeyEvent *event);
570     void cancelPressed(QDeclarativeKeyEvent *event);
571     void selectPressed(QDeclarativeKeyEvent *event);
572     void yesPressed(QDeclarativeKeyEvent *event);
573     void noPressed(QDeclarativeKeyEvent *event);
574     void context1Pressed(QDeclarativeKeyEvent *event);
575     void context2Pressed(QDeclarativeKeyEvent *event);
576     void context3Pressed(QDeclarativeKeyEvent *event);
577     void context4Pressed(QDeclarativeKeyEvent *event);
578     void callPressed(QDeclarativeKeyEvent *event);
579     void hangupPressed(QDeclarativeKeyEvent *event);
580     void flipPressed(QDeclarativeKeyEvent *event);
581     void menuPressed(QDeclarativeKeyEvent *event);
582     void volumeUpPressed(QDeclarativeKeyEvent *event);
583     void volumeDownPressed(QDeclarativeKeyEvent *event);
584
585 private:
586     virtual void keyPressed(QKeyEvent *event, bool post);
587     virtual void keyReleased(QKeyEvent *event, bool post);
588     virtual void inputMethodEvent(QInputMethodEvent *, bool post);
589     virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
590
591     const QByteArray keyToSignal(int key) {
592         QByteArray keySignal;
593         if (key >= Qt::Key_0 && key <= Qt::Key_9) {
594             keySignal = "digit0Pressed";
595             keySignal[5] = '0' + (key - Qt::Key_0);
596         } else {
597             int i = 0;
598             while (sigMap[i].key && sigMap[i].key != key)
599                 ++i;
600             keySignal = sigMap[i].sig;
601         }
602         return keySignal;
603     }
604
605     struct SigMap {
606         int key;
607         const char *sig;
608     };
609
610     static const SigMap sigMap[];
611 };
612
613 Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativeItemPrivate::ChangeTypes);
614
615 QT_END_NAMESPACE
616
617 QML_DECLARE_TYPE(QDeclarativeKeysAttached)
618 QML_DECLARE_TYPEINFO(QDeclarativeKeysAttached, QML_HAS_ATTACHED_PROPERTIES)
619 QML_DECLARE_TYPE(QDeclarativeKeyNavigationAttached)
620 QML_DECLARE_TYPEINFO(QDeclarativeKeyNavigationAttached, QML_HAS_ATTACHED_PROPERTIES)
621 QML_DECLARE_TYPE(QDeclarativeLayoutMirroringAttached)
622 QML_DECLARE_TYPEINFO(QDeclarativeLayoutMirroringAttached, QML_HAS_ATTACHED_PROPERTIES)
623
624 #endif // QDECLARATIVEITEM_P_H