Improve QJSValueIterator implementation.
[profile/ivi/qtdeclarative.git] / src / declarative / qml / qdeclarativevaluetype_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 ** 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 QDECLARATIVEVALUETYPE_P_H
43 #define QDECLARATIVEVALUETYPE_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 "qdeclarativeproperty.h"
57 #include "private/qdeclarativeproperty_p.h"
58 #include "private/qdeclarativenullablevalue_p_p.h"
59
60 #include <QtCore/qobject.h>
61 #include <QtCore/qrect.h>
62 #include <QtCore/qeasingcurve.h>
63 #include <QtCore/qvariant.h>
64 #include <QtGui/qvector2d.h>
65 #include <QtGui/qvector3d.h>
66 #include <QtGui/qvector4d.h>
67 #include <QtGui/qmatrix4x4.h>
68 #include <QtGui/qquaternion.h>
69 #include <QtGui/qfont.h>
70 #include <QtGui/qcolor.h>
71
72 QT_BEGIN_NAMESPACE
73
74 class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeValueType : public QObject
75 {
76     Q_OBJECT
77 public:
78     QDeclarativeValueType(QObject *parent = 0);
79     virtual void read(QObject *, int) = 0;
80     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags flags) = 0;
81     virtual QVariant value() = 0;
82     virtual void setValue(QVariant) = 0;
83
84     virtual QString toString() const = 0;
85     virtual bool isEqual(const QVariant &value) const = 0;
86 };
87
88 class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeValueTypeFactory
89 {
90 public:
91     QDeclarativeValueTypeFactory();
92     ~QDeclarativeValueTypeFactory();
93     static bool isValueType(int);
94     static QDeclarativeValueType *valueType(int);
95
96     static void registerBaseTypes(const char *uri, int versionMajor, int versionMinor);
97     static void registerValueTypes();
98
99     QDeclarativeValueType *operator[](int idx) const {
100         if (idx >= (int)QVariant::UserType) return 0;
101         else return valueTypes[idx];
102     }
103
104 private:
105     QDeclarativeValueType *valueTypes[QVariant::UserType - 1]; 
106 };
107
108 class Q_AUTOTEST_EXPORT QDeclarativePointFValueType : public QDeclarativeValueType
109 {
110     Q_PROPERTY(qreal x READ x WRITE setX)
111     Q_PROPERTY(qreal y READ y WRITE setY)
112     Q_OBJECT
113 public:
114     QDeclarativePointFValueType(QObject *parent = 0);
115
116     virtual void read(QObject *, int);
117     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
118     virtual QVariant value();
119     virtual void setValue(QVariant value);
120     virtual QString toString() const;
121     virtual bool isEqual(const QVariant &value) const;
122
123     qreal x() const;
124     qreal y() const;
125     void setX(qreal);
126     void setY(qreal);
127
128 private:
129     QPointF point;
130 };
131
132 class Q_AUTOTEST_EXPORT QDeclarativePointValueType : public QDeclarativeValueType
133 {
134     Q_PROPERTY(int x READ x WRITE setX)
135     Q_PROPERTY(int y READ y WRITE setY)
136     Q_OBJECT
137 public:
138     QDeclarativePointValueType(QObject *parent = 0);
139
140     virtual void read(QObject *, int);
141     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
142     virtual QVariant value();
143     virtual void setValue(QVariant value);
144     virtual QString toString() const;
145     virtual bool isEqual(const QVariant &value) const;
146
147     int x() const;
148     int y() const;
149     void setX(int);
150     void setY(int);
151
152 private:
153     QPoint point;
154 };
155
156 class Q_AUTOTEST_EXPORT QDeclarativeSizeFValueType : public QDeclarativeValueType
157 {
158     Q_PROPERTY(qreal width READ width WRITE setWidth)
159     Q_PROPERTY(qreal height READ height WRITE setHeight)
160     Q_OBJECT
161 public:
162     QDeclarativeSizeFValueType(QObject *parent = 0);
163
164     virtual void read(QObject *, int);
165     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
166     virtual QVariant value();
167     virtual void setValue(QVariant value);
168     virtual QString toString() const;
169     virtual bool isEqual(const QVariant &value) const;
170
171     qreal width() const;
172     qreal height() const;
173     void setWidth(qreal);
174     void setHeight(qreal);
175
176 private:
177     QSizeF size;
178 };
179
180 class Q_AUTOTEST_EXPORT QDeclarativeSizeValueType : public QDeclarativeValueType
181 {
182     Q_PROPERTY(int width READ width WRITE setWidth)
183     Q_PROPERTY(int height READ height WRITE setHeight)
184     Q_OBJECT
185 public:
186     QDeclarativeSizeValueType(QObject *parent = 0);
187
188     virtual void read(QObject *, int);
189     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
190     virtual QVariant value();
191     virtual void setValue(QVariant value);
192     virtual QString toString() const;
193     virtual bool isEqual(const QVariant &value) const;
194
195     int width() const;
196     int height() const;
197     void setWidth(int);
198     void setHeight(int);
199
200 private:
201     QSize size;
202 };
203
204 class Q_AUTOTEST_EXPORT QDeclarativeRectFValueType : public QDeclarativeValueType
205 {
206     Q_PROPERTY(qreal x READ x WRITE setX)
207     Q_PROPERTY(qreal y READ y WRITE setY)
208     Q_PROPERTY(qreal width READ width WRITE setWidth)
209     Q_PROPERTY(qreal height READ height WRITE setHeight)
210     Q_OBJECT
211 public:
212     QDeclarativeRectFValueType(QObject *parent = 0);
213
214     virtual void read(QObject *, int);
215     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
216     virtual QVariant value();
217     virtual void setValue(QVariant value);
218     virtual QString toString() const;
219     virtual bool isEqual(const QVariant &value) const;
220
221     qreal x() const;
222     qreal y() const;
223     void setX(qreal);
224     void setY(qreal);
225     
226     qreal width() const;
227     qreal height() const;
228     void setWidth(qreal);
229     void setHeight(qreal);
230
231 private:
232     QRectF rect;
233 };
234
235 class Q_AUTOTEST_EXPORT QDeclarativeRectValueType : public QDeclarativeValueType
236 {
237     Q_PROPERTY(int x READ x WRITE setX)
238     Q_PROPERTY(int y READ y WRITE setY)
239     Q_PROPERTY(int width READ width WRITE setWidth)
240     Q_PROPERTY(int height READ height WRITE setHeight)
241     Q_OBJECT
242 public:
243     QDeclarativeRectValueType(QObject *parent = 0);
244
245     virtual void read(QObject *, int);
246     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
247     virtual QVariant value();
248     virtual void setValue(QVariant value);
249     virtual QString toString() const;
250     virtual bool isEqual(const QVariant &value) const;
251
252     int x() const;
253     int y() const;
254     void setX(int);
255     void setY(int);
256     
257     int width() const;
258     int height() const;
259     void setWidth(int);
260     void setHeight(int);
261
262 private:
263     QRect rect;
264 };
265
266 class Q_AUTOTEST_EXPORT QDeclarativeVector2DValueType : public QDeclarativeValueType
267 {
268     Q_PROPERTY(qreal x READ x WRITE setX)
269     Q_PROPERTY(qreal y READ y WRITE setY)
270     Q_OBJECT
271 public:
272     QDeclarativeVector2DValueType(QObject *parent = 0);
273
274     virtual void read(QObject *, int);
275     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
276     virtual QVariant value();
277     virtual void setValue(QVariant value);
278     virtual QString toString() const;
279     virtual bool isEqual(const QVariant &value) const;
280
281     qreal x() const;
282     qreal y() const;
283     void setX(qreal);
284     void setY(qreal);
285
286 private:
287     QVector2D vector;
288 };
289
290 class Q_AUTOTEST_EXPORT QDeclarativeVector3DValueType : public QDeclarativeValueType
291 {
292     Q_PROPERTY(qreal x READ x WRITE setX)
293     Q_PROPERTY(qreal y READ y WRITE setY)
294     Q_PROPERTY(qreal z READ z WRITE setZ)
295     Q_OBJECT
296 public:
297     QDeclarativeVector3DValueType(QObject *parent = 0);
298
299     virtual void read(QObject *, int);
300     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
301     virtual QVariant value();
302     virtual void setValue(QVariant value);
303     virtual QString toString() const;
304     virtual bool isEqual(const QVariant &value) const;
305
306     qreal x() const;
307     qreal y() const;
308     qreal z() const;
309     void setX(qreal);
310     void setY(qreal);
311     void setZ(qreal);
312
313 private:
314     QVector3D vector;
315 };
316
317 class Q_AUTOTEST_EXPORT QDeclarativeVector4DValueType : public QDeclarativeValueType
318 {
319     Q_PROPERTY(qreal x READ x WRITE setX)
320     Q_PROPERTY(qreal y READ y WRITE setY)
321     Q_PROPERTY(qreal z READ z WRITE setZ)
322     Q_PROPERTY(qreal w READ w WRITE setW)
323     Q_OBJECT
324 public:
325     QDeclarativeVector4DValueType(QObject *parent = 0);
326
327     virtual void read(QObject *, int);
328     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
329     virtual QVariant value();
330     virtual void setValue(QVariant value);
331     virtual QString toString() const;
332     virtual bool isEqual(const QVariant &value) const;
333
334     qreal x() const;
335     qreal y() const;
336     qreal z() const;
337     qreal w() const;
338     void setX(qreal);
339     void setY(qreal);
340     void setZ(qreal);
341     void setW(qreal);
342
343 private:
344     QVector4D vector;
345 };
346
347 class Q_AUTOTEST_EXPORT QDeclarativeQuaternionValueType : public QDeclarativeValueType
348 {
349     Q_PROPERTY(qreal scalar READ scalar WRITE setScalar)
350     Q_PROPERTY(qreal x READ x WRITE setX)
351     Q_PROPERTY(qreal y READ y WRITE setY)
352     Q_PROPERTY(qreal z READ z WRITE setZ)
353     Q_OBJECT
354 public:
355     QDeclarativeQuaternionValueType(QObject *parent = 0);
356
357     virtual void read(QObject *, int);
358     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
359     virtual QVariant value();
360     virtual void setValue(QVariant value);
361     virtual QString toString() const;
362     virtual bool isEqual(const QVariant &value) const;
363
364     qreal scalar() const;
365     qreal x() const;
366     qreal y() const;
367     qreal z() const;
368     void setScalar(qreal);
369     void setX(qreal);
370     void setY(qreal);
371     void setZ(qreal);
372
373 private:
374     QQuaternion quaternion;
375 };
376
377 class Q_AUTOTEST_EXPORT QDeclarativeMatrix4x4ValueType : public QDeclarativeValueType
378 {
379     Q_PROPERTY(qreal m11 READ m11 WRITE setM11)
380     Q_PROPERTY(qreal m12 READ m12 WRITE setM12)
381     Q_PROPERTY(qreal m13 READ m13 WRITE setM13)
382     Q_PROPERTY(qreal m14 READ m14 WRITE setM14)
383     Q_PROPERTY(qreal m21 READ m21 WRITE setM21)
384     Q_PROPERTY(qreal m22 READ m22 WRITE setM22)
385     Q_PROPERTY(qreal m23 READ m23 WRITE setM23)
386     Q_PROPERTY(qreal m24 READ m24 WRITE setM24)
387     Q_PROPERTY(qreal m31 READ m31 WRITE setM31)
388     Q_PROPERTY(qreal m32 READ m32 WRITE setM32)
389     Q_PROPERTY(qreal m33 READ m33 WRITE setM33)
390     Q_PROPERTY(qreal m34 READ m34 WRITE setM34)
391     Q_PROPERTY(qreal m41 READ m41 WRITE setM41)
392     Q_PROPERTY(qreal m42 READ m42 WRITE setM42)
393     Q_PROPERTY(qreal m43 READ m43 WRITE setM43)
394     Q_PROPERTY(qreal m44 READ m44 WRITE setM44)
395     Q_OBJECT
396 public:
397     QDeclarativeMatrix4x4ValueType(QObject *parent = 0);
398
399     virtual void read(QObject *, int);
400     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
401     virtual QVariant value();
402     virtual void setValue(QVariant value);
403     virtual QString toString() const;
404     virtual bool isEqual(const QVariant &value) const;
405
406     qreal m11() const { return matrix(0, 0); }
407     qreal m12() const { return matrix(0, 1); }
408     qreal m13() const { return matrix(0, 2); }
409     qreal m14() const { return matrix(0, 3); }
410     qreal m21() const { return matrix(1, 0); }
411     qreal m22() const { return matrix(1, 1); }
412     qreal m23() const { return matrix(1, 2); }
413     qreal m24() const { return matrix(1, 3); }
414     qreal m31() const { return matrix(2, 0); }
415     qreal m32() const { return matrix(2, 1); }
416     qreal m33() const { return matrix(2, 2); }
417     qreal m34() const { return matrix(2, 3); }
418     qreal m41() const { return matrix(3, 0); }
419     qreal m42() const { return matrix(3, 1); }
420     qreal m43() const { return matrix(3, 2); }
421     qreal m44() const { return matrix(3, 3); }
422
423     void setM11(qreal value) { matrix(0, 0) = value; }
424     void setM12(qreal value) { matrix(0, 1) = value; }
425     void setM13(qreal value) { matrix(0, 2) = value; }
426     void setM14(qreal value) { matrix(0, 3) = value; }
427     void setM21(qreal value) { matrix(1, 0) = value; }
428     void setM22(qreal value) { matrix(1, 1) = value; }
429     void setM23(qreal value) { matrix(1, 2) = value; }
430     void setM24(qreal value) { matrix(1, 3) = value; }
431     void setM31(qreal value) { matrix(2, 0) = value; }
432     void setM32(qreal value) { matrix(2, 1) = value; }
433     void setM33(qreal value) { matrix(2, 2) = value; }
434     void setM34(qreal value) { matrix(2, 3) = value; }
435     void setM41(qreal value) { matrix(3, 0) = value; }
436     void setM42(qreal value) { matrix(3, 1) = value; }
437     void setM43(qreal value) { matrix(3, 2) = value; }
438     void setM44(qreal value) { matrix(3, 3) = value; }
439
440 private:
441     QMatrix4x4 matrix;
442 };
443
444 class Q_AUTOTEST_EXPORT QDeclarativeEasingValueType : public QDeclarativeValueType
445 {
446     Q_OBJECT
447     Q_ENUMS(Type)
448
449     Q_PROPERTY(QDeclarativeEasingValueType::Type type READ type WRITE setType)
450     Q_PROPERTY(qreal amplitude READ amplitude WRITE setAmplitude)
451     Q_PROPERTY(qreal overshoot READ overshoot WRITE setOvershoot)
452     Q_PROPERTY(qreal period READ period WRITE setPeriod)
453 public:
454     enum Type {
455         Linear = QEasingCurve::Linear,
456         InQuad = QEasingCurve::InQuad, OutQuad = QEasingCurve::OutQuad,
457         InOutQuad = QEasingCurve::InOutQuad, OutInQuad = QEasingCurve::OutInQuad,
458         InCubic = QEasingCurve::InCubic, OutCubic = QEasingCurve::OutCubic,
459         InOutCubic = QEasingCurve::InOutCubic, OutInCubic = QEasingCurve::OutInCubic,
460         InQuart = QEasingCurve::InQuart, OutQuart = QEasingCurve::OutQuart,
461         InOutQuart = QEasingCurve::InOutQuart, OutInQuart = QEasingCurve::OutInQuart,
462         InQuint = QEasingCurve::InQuint, OutQuint = QEasingCurve::OutQuint,
463         InOutQuint = QEasingCurve::InOutQuint, OutInQuint = QEasingCurve::OutInQuint,
464         InSine = QEasingCurve::InSine, OutSine = QEasingCurve::OutSine,
465         InOutSine = QEasingCurve::InOutSine, OutInSine = QEasingCurve::OutInSine,
466         InExpo = QEasingCurve::InExpo, OutExpo = QEasingCurve::OutExpo,
467         InOutExpo = QEasingCurve::InOutExpo, OutInExpo = QEasingCurve::OutInExpo,
468         InCirc = QEasingCurve::InCirc, OutCirc = QEasingCurve::OutCirc,
469         InOutCirc = QEasingCurve::InOutCirc, OutInCirc = QEasingCurve::OutInCirc,
470         InElastic = QEasingCurve::InElastic, OutElastic = QEasingCurve::OutElastic,
471         InOutElastic = QEasingCurve::InOutElastic, OutInElastic = QEasingCurve::OutInElastic,
472         InBack = QEasingCurve::InBack, OutBack = QEasingCurve::OutBack,
473         InOutBack = QEasingCurve::InOutBack, OutInBack = QEasingCurve::OutInBack,
474         InBounce = QEasingCurve::InBounce, OutBounce = QEasingCurve::OutBounce,
475         InOutBounce = QEasingCurve::InOutBounce, OutInBounce = QEasingCurve::OutInBounce,
476         InCurve = QEasingCurve::InCurve, OutCurve = QEasingCurve::OutCurve,
477         SineCurve = QEasingCurve::SineCurve, CosineCurve = QEasingCurve::CosineCurve
478     };
479
480     QDeclarativeEasingValueType(QObject *parent = 0);
481
482     virtual void read(QObject *, int);
483     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
484     virtual QVariant value();
485     virtual void setValue(QVariant value);
486     virtual QString toString() const;
487     virtual bool isEqual(const QVariant &value) const;
488
489     Type type() const;
490     qreal amplitude() const;
491     qreal overshoot() const;
492     qreal period() const;
493     void setType(Type);
494     void setAmplitude(qreal);
495     void setOvershoot(qreal);
496     void setPeriod(qreal);
497
498 private:
499     QEasingCurve easing;
500 };
501
502 class Q_AUTOTEST_EXPORT QDeclarativeFontValueType : public QDeclarativeValueType
503 {
504     Q_OBJECT
505     Q_ENUMS(FontWeight)
506     Q_ENUMS(Capitalization)
507
508     Q_PROPERTY(QString family READ family WRITE setFamily)
509     Q_PROPERTY(bool bold READ bold WRITE setBold)
510     Q_PROPERTY(FontWeight weight READ weight WRITE setWeight)
511     Q_PROPERTY(bool italic READ italic WRITE setItalic)
512     Q_PROPERTY(bool underline READ underline WRITE setUnderline)
513     Q_PROPERTY(bool overline READ overline WRITE setOverline)
514     Q_PROPERTY(bool strikeout READ strikeout WRITE setStrikeout)
515     Q_PROPERTY(qreal pointSize READ pointSize WRITE setPointSize)
516     Q_PROPERTY(int pixelSize READ pixelSize WRITE setPixelSize)
517     Q_PROPERTY(Capitalization capitalization READ capitalization WRITE setCapitalization)
518     Q_PROPERTY(qreal letterSpacing READ letterSpacing WRITE setLetterSpacing)
519     Q_PROPERTY(qreal wordSpacing READ wordSpacing WRITE setWordSpacing)
520
521 public:
522     enum FontWeight { Light = QFont::Light,
523                        Normal = QFont::Normal,
524                        DemiBold = QFont::DemiBold,
525                        Bold = QFont::Bold,
526                        Black = QFont::Black };
527     enum Capitalization { MixedCase = QFont::MixedCase,
528                            AllUppercase = QFont::AllUppercase,
529                            AllLowercase = QFont::AllLowercase,
530                            SmallCaps = QFont::SmallCaps,
531                            Capitalize = QFont::Capitalize };
532
533     QDeclarativeFontValueType(QObject *parent = 0);
534
535     virtual void read(QObject *, int);
536     virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
537     virtual QVariant value();
538     virtual void setValue(QVariant value);
539     virtual QString toString() const;
540     virtual bool isEqual(const QVariant &value) const;
541
542     QString family() const;
543     void setFamily(const QString &);
544
545     bool bold() const;
546     void setBold(bool b);
547
548     FontWeight weight() const;
549     void setWeight(FontWeight);
550
551     bool italic() const;
552     void setItalic(bool b);
553
554     bool underline() const;
555     void setUnderline(bool b);
556
557     bool overline() const;
558     void setOverline(bool b);
559
560     bool strikeout() const;
561     void setStrikeout(bool b);
562
563     qreal pointSize() const;
564     void setPointSize(qreal size);
565
566     int pixelSize() const;
567     void setPixelSize(int size);
568
569     Capitalization capitalization() const;
570     void setCapitalization(Capitalization);
571
572     qreal letterSpacing() const;
573     void setLetterSpacing(qreal spacing);
574
575     qreal wordSpacing() const;
576     void setWordSpacing(qreal spacing);
577
578 private:
579     QFont font;
580     bool pixelSizeSet;
581     bool pointSizeSet;
582     mutable QDeclarativeNullableValue<int> dpi;
583 };
584
585 QT_END_NAMESPACE
586
587 #endif  // QDECLARATIVEVALUETYPE_P_H