blob: 3eada1c6bbf17ab21e79208f7641519c0725f01c [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QDECLARATIVEVALUETYPE_P_H
#define QDECLARATIVEVALUETYPE_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include "qdeclarativeproperty.h"
#include "private/qdeclarativeproperty_p.h"
#include "private/qdeclarativenullablevalue_p_p.h"
#include <QtCore/qobject.h>
#include <QtCore/qrect.h>
#include <QtCore/qeasingcurve.h>
#include <QtCore/qvariant.h>
#include <QtGui/qvector2d.h>
#include <QtGui/qvector3d.h>
#include <QtGui/qvector4d.h>
#include <QtGui/qmatrix4x4.h>
#include <QtGui/qquaternion.h>
#include <QtGui/qfont.h>
QT_BEGIN_NAMESPACE
class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeValueType : public QObject
{
Q_OBJECT
public:
QDeclarativeValueType(QObject *parent = 0);
virtual void read(QObject *, int) = 0;
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags flags) = 0;
virtual QVariant value() = 0;
virtual void setValue(QVariant) = 0;
};
class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeValueTypeFactory
{
public:
QDeclarativeValueTypeFactory();
~QDeclarativeValueTypeFactory();
static bool isValueType(int);
static QDeclarativeValueType *valueType(int);
static void registerValueTypes();
QDeclarativeValueType *operator[](int idx) const {
if (idx >= (int)QVariant::UserType) return 0;
else return valueTypes[idx];
}
private:
QDeclarativeValueType *valueTypes[QVariant::UserType - 1];
};
class Q_AUTOTEST_EXPORT QDeclarativePointFValueType : public QDeclarativeValueType
{
Q_PROPERTY(qreal x READ x WRITE setX)
Q_PROPERTY(qreal y READ y WRITE setY)
Q_OBJECT
public:
QDeclarativePointFValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
qreal x() const;
qreal y() const;
void setX(qreal);
void setY(qreal);
private:
QPointF point;
};
class Q_AUTOTEST_EXPORT QDeclarativePointValueType : public QDeclarativeValueType
{
Q_PROPERTY(int x READ x WRITE setX)
Q_PROPERTY(int y READ y WRITE setY)
Q_OBJECT
public:
QDeclarativePointValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
int x() const;
int y() const;
void setX(int);
void setY(int);
private:
QPoint point;
};
class Q_AUTOTEST_EXPORT QDeclarativeSizeFValueType : public QDeclarativeValueType
{
Q_PROPERTY(qreal width READ width WRITE setWidth)
Q_PROPERTY(qreal height READ height WRITE setHeight)
Q_OBJECT
public:
QDeclarativeSizeFValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
qreal width() const;
qreal height() const;
void setWidth(qreal);
void setHeight(qreal);
private:
QSizeF size;
};
class Q_AUTOTEST_EXPORT QDeclarativeSizeValueType : public QDeclarativeValueType
{
Q_PROPERTY(int width READ width WRITE setWidth)
Q_PROPERTY(int height READ height WRITE setHeight)
Q_OBJECT
public:
QDeclarativeSizeValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
int width() const;
int height() const;
void setWidth(int);
void setHeight(int);
private:
QSize size;
};
class Q_AUTOTEST_EXPORT QDeclarativeRectFValueType : public QDeclarativeValueType
{
Q_PROPERTY(qreal x READ x WRITE setX)
Q_PROPERTY(qreal y READ y WRITE setY)
Q_PROPERTY(qreal width READ width WRITE setWidth)
Q_PROPERTY(qreal height READ height WRITE setHeight)
Q_OBJECT
public:
QDeclarativeRectFValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
qreal x() const;
qreal y() const;
void setX(qreal);
void setY(qreal);
qreal width() const;
qreal height() const;
void setWidth(qreal);
void setHeight(qreal);
private:
QRectF rect;
};
class Q_AUTOTEST_EXPORT QDeclarativeRectValueType : public QDeclarativeValueType
{
Q_PROPERTY(int x READ x WRITE setX)
Q_PROPERTY(int y READ y WRITE setY)
Q_PROPERTY(int width READ width WRITE setWidth)
Q_PROPERTY(int height READ height WRITE setHeight)
Q_OBJECT
public:
QDeclarativeRectValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
int x() const;
int y() const;
void setX(int);
void setY(int);
int width() const;
int height() const;
void setWidth(int);
void setHeight(int);
private:
QRect rect;
};
class Q_AUTOTEST_EXPORT QDeclarativeVector2DValueType : public QDeclarativeValueType
{
Q_PROPERTY(qreal x READ x WRITE setX)
Q_PROPERTY(qreal y READ y WRITE setY)
Q_OBJECT
public:
QDeclarativeVector2DValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
qreal x() const;
qreal y() const;
void setX(qreal);
void setY(qreal);
private:
QVector2D vector;
};
class Q_AUTOTEST_EXPORT QDeclarativeVector3DValueType : public QDeclarativeValueType
{
Q_PROPERTY(qreal x READ x WRITE setX)
Q_PROPERTY(qreal y READ y WRITE setY)
Q_PROPERTY(qreal z READ z WRITE setZ)
Q_OBJECT
public:
QDeclarativeVector3DValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
qreal x() const;
qreal y() const;
qreal z() const;
void setX(qreal);
void setY(qreal);
void setZ(qreal);
private:
QVector3D vector;
};
class Q_AUTOTEST_EXPORT QDeclarativeVector4DValueType : public QDeclarativeValueType
{
Q_PROPERTY(qreal x READ x WRITE setX)
Q_PROPERTY(qreal y READ y WRITE setY)
Q_PROPERTY(qreal z READ z WRITE setZ)
Q_PROPERTY(qreal w READ w WRITE setW)
Q_OBJECT
public:
QDeclarativeVector4DValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
qreal x() const;
qreal y() const;
qreal z() const;
qreal w() const;
void setX(qreal);
void setY(qreal);
void setZ(qreal);
void setW(qreal);
private:
QVector4D vector;
};
class Q_AUTOTEST_EXPORT QDeclarativeQuaternionValueType : public QDeclarativeValueType
{
Q_PROPERTY(qreal scalar READ scalar WRITE setScalar)
Q_PROPERTY(qreal x READ x WRITE setX)
Q_PROPERTY(qreal y READ y WRITE setY)
Q_PROPERTY(qreal z READ z WRITE setZ)
Q_OBJECT
public:
QDeclarativeQuaternionValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
qreal scalar() const;
qreal x() const;
qreal y() const;
qreal z() const;
void setScalar(qreal);
void setX(qreal);
void setY(qreal);
void setZ(qreal);
private:
QQuaternion quaternion;
};
class Q_AUTOTEST_EXPORT QDeclarativeMatrix4x4ValueType : public QDeclarativeValueType
{
Q_PROPERTY(qreal m11 READ m11 WRITE setM11)
Q_PROPERTY(qreal m12 READ m12 WRITE setM12)
Q_PROPERTY(qreal m13 READ m13 WRITE setM13)
Q_PROPERTY(qreal m14 READ m14 WRITE setM14)
Q_PROPERTY(qreal m21 READ m21 WRITE setM21)
Q_PROPERTY(qreal m22 READ m22 WRITE setM22)
Q_PROPERTY(qreal m23 READ m23 WRITE setM23)
Q_PROPERTY(qreal m24 READ m24 WRITE setM24)
Q_PROPERTY(qreal m31 READ m31 WRITE setM31)
Q_PROPERTY(qreal m32 READ m32 WRITE setM32)
Q_PROPERTY(qreal m33 READ m33 WRITE setM33)
Q_PROPERTY(qreal m34 READ m34 WRITE setM34)
Q_PROPERTY(qreal m41 READ m41 WRITE setM41)
Q_PROPERTY(qreal m42 READ m42 WRITE setM42)
Q_PROPERTY(qreal m43 READ m43 WRITE setM43)
Q_PROPERTY(qreal m44 READ m44 WRITE setM44)
Q_OBJECT
public:
QDeclarativeMatrix4x4ValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
qreal m11() const { return matrix(0, 0); }
qreal m12() const { return matrix(0, 1); }
qreal m13() const { return matrix(0, 2); }
qreal m14() const { return matrix(0, 3); }
qreal m21() const { return matrix(1, 0); }
qreal m22() const { return matrix(1, 1); }
qreal m23() const { return matrix(1, 2); }
qreal m24() const { return matrix(1, 3); }
qreal m31() const { return matrix(2, 0); }
qreal m32() const { return matrix(2, 1); }
qreal m33() const { return matrix(2, 2); }
qreal m34() const { return matrix(2, 3); }
qreal m41() const { return matrix(3, 0); }
qreal m42() const { return matrix(3, 1); }
qreal m43() const { return matrix(3, 2); }
qreal m44() const { return matrix(3, 3); }
void setM11(qreal value) { matrix(0, 0) = value; }
void setM12(qreal value) { matrix(0, 1) = value; }
void setM13(qreal value) { matrix(0, 2) = value; }
void setM14(qreal value) { matrix(0, 3) = value; }
void setM21(qreal value) { matrix(1, 0) = value; }
void setM22(qreal value) { matrix(1, 1) = value; }
void setM23(qreal value) { matrix(1, 2) = value; }
void setM24(qreal value) { matrix(1, 3) = value; }
void setM31(qreal value) { matrix(2, 0) = value; }
void setM32(qreal value) { matrix(2, 1) = value; }
void setM33(qreal value) { matrix(2, 2) = value; }
void setM34(qreal value) { matrix(2, 3) = value; }
void setM41(qreal value) { matrix(3, 0) = value; }
void setM42(qreal value) { matrix(3, 1) = value; }
void setM43(qreal value) { matrix(3, 2) = value; }
void setM44(qreal value) { matrix(3, 3) = value; }
private:
QMatrix4x4 matrix;
};
class Q_AUTOTEST_EXPORT QDeclarativeEasingValueType : public QDeclarativeValueType
{
Q_OBJECT
Q_ENUMS(Type)
Q_PROPERTY(QDeclarativeEasingValueType::Type type READ type WRITE setType)
Q_PROPERTY(qreal amplitude READ amplitude WRITE setAmplitude)
Q_PROPERTY(qreal overshoot READ overshoot WRITE setOvershoot)
Q_PROPERTY(qreal period READ period WRITE setPeriod)
public:
enum Type {
Linear = QEasingCurve::Linear,
InQuad = QEasingCurve::InQuad, OutQuad = QEasingCurve::OutQuad,
InOutQuad = QEasingCurve::InOutQuad, OutInQuad = QEasingCurve::OutInQuad,
InCubic = QEasingCurve::InCubic, OutCubic = QEasingCurve::OutCubic,
InOutCubic = QEasingCurve::InOutCubic, OutInCubic = QEasingCurve::OutInCubic,
InQuart = QEasingCurve::InQuart, OutQuart = QEasingCurve::OutQuart,
InOutQuart = QEasingCurve::InOutQuart, OutInQuart = QEasingCurve::OutInQuart,
InQuint = QEasingCurve::InQuint, OutQuint = QEasingCurve::OutQuint,
InOutQuint = QEasingCurve::InOutQuint, OutInQuint = QEasingCurve::OutInQuint,
InSine = QEasingCurve::InSine, OutSine = QEasingCurve::OutSine,
InOutSine = QEasingCurve::InOutSine, OutInSine = QEasingCurve::OutInSine,
InExpo = QEasingCurve::InExpo, OutExpo = QEasingCurve::OutExpo,
InOutExpo = QEasingCurve::InOutExpo, OutInExpo = QEasingCurve::OutInExpo,
InCirc = QEasingCurve::InCirc, OutCirc = QEasingCurve::OutCirc,
InOutCirc = QEasingCurve::InOutCirc, OutInCirc = QEasingCurve::OutInCirc,
InElastic = QEasingCurve::InElastic, OutElastic = QEasingCurve::OutElastic,
InOutElastic = QEasingCurve::InOutElastic, OutInElastic = QEasingCurve::OutInElastic,
InBack = QEasingCurve::InBack, OutBack = QEasingCurve::OutBack,
InOutBack = QEasingCurve::InOutBack, OutInBack = QEasingCurve::OutInBack,
InBounce = QEasingCurve::InBounce, OutBounce = QEasingCurve::OutBounce,
InOutBounce = QEasingCurve::InOutBounce, OutInBounce = QEasingCurve::OutInBounce,
InCurve = QEasingCurve::InCurve, OutCurve = QEasingCurve::OutCurve,
SineCurve = QEasingCurve::SineCurve, CosineCurve = QEasingCurve::CosineCurve
};
QDeclarativeEasingValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
Type type() const;
qreal amplitude() const;
qreal overshoot() const;
qreal period() const;
void setType(Type);
void setAmplitude(qreal);
void setOvershoot(qreal);
void setPeriod(qreal);
private:
QEasingCurve easing;
};
class Q_AUTOTEST_EXPORT QDeclarativeFontValueType : public QDeclarativeValueType
{
Q_OBJECT
Q_ENUMS(FontWeight)
Q_ENUMS(Capitalization)
Q_PROPERTY(QString family READ family WRITE setFamily)
Q_PROPERTY(bool bold READ bold WRITE setBold)
Q_PROPERTY(FontWeight weight READ weight WRITE setWeight)
Q_PROPERTY(bool italic READ italic WRITE setItalic)
Q_PROPERTY(bool underline READ underline WRITE setUnderline)
Q_PROPERTY(bool overline READ overline WRITE setOverline)
Q_PROPERTY(bool strikeout READ strikeout WRITE setStrikeout)
Q_PROPERTY(qreal pointSize READ pointSize WRITE setPointSize)
Q_PROPERTY(int pixelSize READ pixelSize WRITE setPixelSize)
Q_PROPERTY(Capitalization capitalization READ capitalization WRITE setCapitalization)
Q_PROPERTY(qreal letterSpacing READ letterSpacing WRITE setLetterSpacing)
Q_PROPERTY(qreal wordSpacing READ wordSpacing WRITE setWordSpacing)
public:
enum FontWeight { Light = QFont::Light,
Normal = QFont::Normal,
DemiBold = QFont::DemiBold,
Bold = QFont::Bold,
Black = QFont::Black };
enum Capitalization { MixedCase = QFont::MixedCase,
AllUppercase = QFont::AllUppercase,
AllLowercase = QFont::AllLowercase,
SmallCaps = QFont::SmallCaps,
Capitalize = QFont::Capitalize };
QDeclarativeFontValueType(QObject *parent = 0);
virtual void read(QObject *, int);
virtual void write(QObject *, int, QDeclarativePropertyPrivate::WriteFlags);
virtual QVariant value();
virtual void setValue(QVariant value);
QString family() const;
void setFamily(const QString &);
bool bold() const;
void setBold(bool b);
FontWeight weight() const;
void setWeight(FontWeight);
bool italic() const;
void setItalic(bool b);
bool underline() const;
void setUnderline(bool b);
bool overline() const;
void setOverline(bool b);
bool strikeout() const;
void setStrikeout(bool b);
qreal pointSize() const;
void setPointSize(qreal size);
int pixelSize() const;
void setPixelSize(int size);
Capitalization capitalization() const;
void setCapitalization(Capitalization);
qreal letterSpacing() const;
void setLetterSpacing(qreal spacing);
qreal wordSpacing() const;
void setWordSpacing(qreal spacing);
private:
QFont font;
bool pixelSizeSet;
bool pointSizeSet;
mutable QDeclarativeNullableValue<int> dpi;
};
QT_END_NAMESPACE
#endif // QDECLARATIVEVALUETYPE_P_H