4#ifndef QQMLVALUETYPE_P_H
5#define QQMLVALUETYPE_P_H
18#include <QtQml/private/qqmlproperty_p.h>
20#include <private/qqmlnullablevalue_p.h>
21#include <private/qmetatype_p.h>
22#include <private/qv4referenceobject_p.h>
24#include <QtCore/qobject.h>
25#include <QtCore/qrect.h>
26#if QT_CONFIG(easingcurve)
27#include <QtCore/qeasingcurve.h>
29#include <QtCore/qvariant.h>
36 QQmlValueType() =
default;
37 QQmlValueType(QMetaType type,
const QMetaObject *staticMetaObject)
38 : m_metaType(type), m_staticMetaObject(staticMetaObject)
42 void *create()
const {
return m_metaType.create(); }
43 void destroy(
void *gadgetPtr)
const { m_metaType.destroy(gadgetPtr); }
45 void construct(
void *gadgetPtr,
const void *copy)
const { m_metaType.construct(gadgetPtr, copy); }
46 void destruct(
void *gadgetPtr)
const { m_metaType.destruct(gadgetPtr); }
48 QMetaType metaType()
const {
return m_metaType; }
49 const QMetaObject *staticMetaObject()
const {
return m_staticMetaObject; }
52 QMetaObject *toDynamicMetaObject(QObject *) override;
53 void objectDestroyed(QObject *) override;
54 int metaCall(QObject *obj, QMetaObject::Call type,
int _id,
void **argv) override;
59 const QMetaObject *m_staticMetaObject =
nullptr;
60 QMetaObject *m_dynamicMetaObject =
nullptr;
67 static QQmlGadgetPtrWrapper *instance(QQmlEngine *engine, QMetaType type);
69 QQmlGadgetPtrWrapper(QQmlValueType *valueType, QObject *parent =
nullptr);
70 ~QQmlGadgetPtrWrapper();
72 void read(QObject *obj,
int idx);
73 void write(QObject *obj,
int idx, QQmlPropertyData::WriteFlags flags,
74 int internalIndex = QV4::ReferenceObject::AllProperties)
const;
75 QVariant value()
const;
76 void setValue(
const QVariant &value);
78 QMetaType metaType()
const {
return valueType()->metaType(); }
79 int metaCall(QMetaObject::Call type,
int id,
void **argv);
81 QMetaProperty property(
int index)
const
83 return valueType()->staticMetaObject()->property(index);
86 QVariant readOnGadget(
const QMetaProperty &property)
const
88 return property.readOnGadget(m_gadgetPtr);
91 void writeOnGadget(
const QMetaProperty &property,
const QVariant &value)
93 property.writeOnGadget(m_gadgetPtr, value);
96 void writeOnGadget(
const QMetaProperty &property, QVariant &&value)
98 property.writeOnGadget(m_gadgetPtr, std::move(value));
102 const QQmlValueType *valueType()
const;
103 void *m_gadgetPtr =
nullptr;
109 Q_PROPERTY(qreal x READ x WRITE setX FINAL)
110 Q_PROPERTY(qreal y READ y WRITE setY FINAL)
112 QML_VALUE_TYPE(point)
114 QML_EXTENDED(QQmlPointFValueType)
118 Q_INVOKABLE QQmlPointFValueType() =
default;
119 Q_INVOKABLE QQmlPointFValueType(
const QPoint &point) : v(point) {}
120 Q_INVOKABLE QString toString()
const;
126 operator QPointF()
const {
return v; }
132 Q_PROPERTY(
int x READ x WRITE setX FINAL)
133 Q_PROPERTY(
int y READ y WRITE setY FINAL)
137 QML_EXTENDED(QQmlPointValueType)
141 QQmlPointValueType() =
default;
142 Q_INVOKABLE QQmlPointValueType(
const QPointF &point) : v(point.toPoint()) {}
143 Q_INVOKABLE QString toString()
const;
149 operator QPoint()
const {
return v; }
155 Q_PROPERTY(qreal width READ width WRITE setWidth FINAL)
156 Q_PROPERTY(qreal height READ height WRITE setHeight FINAL)
160 QML_EXTENDED(QQmlSizeFValueType)
164 Q_INVOKABLE QQmlSizeFValueType() =
default;
165 Q_INVOKABLE QQmlSizeFValueType(
const QSize &size) : v(size) {}
166 Q_INVOKABLE QString toString()
const;
168 qreal height()
const;
169 void setWidth(qreal);
170 void setHeight(qreal);
172 operator QSizeF()
const {
return v; }
178 Q_PROPERTY(
int width READ width WRITE setWidth FINAL)
179 Q_PROPERTY(
int height READ height WRITE setHeight FINAL)
183 QML_EXTENDED(QQmlSizeValueType)
187 QQmlSizeValueType() =
default;
188 Q_INVOKABLE QQmlSizeValueType(
const QSizeF &size) : v(size.toSize()) {}
189 Q_INVOKABLE QString toString()
const;
195 operator QSize()
const {
return v; }
201 Q_PROPERTY(qreal x READ x WRITE setX FINAL)
202 Q_PROPERTY(qreal y READ y WRITE setY FINAL)
203 Q_PROPERTY(qreal width READ width WRITE setWidth FINAL)
204 Q_PROPERTY(qreal height READ height WRITE setHeight FINAL)
205 Q_PROPERTY(qreal left READ left DESIGNABLE
false FINAL)
206 Q_PROPERTY(qreal right READ right DESIGNABLE
false FINAL)
207 Q_PROPERTY(qreal top READ top DESIGNABLE
false FINAL)
208 Q_PROPERTY(qreal bottom READ bottom DESIGNABLE
false FINAL)
212 QML_EXTENDED(QQmlRectFValueType)
216 Q_INVOKABLE QQmlRectFValueType() =
default;
217 Q_INVOKABLE QQmlRectFValueType(
const QRect &rect) : v(rect) {}
218 Q_INVOKABLE QString toString()
const;
225 qreal height()
const;
226 void setWidth(qreal);
227 void setHeight(qreal);
232 qreal bottom()
const;
234 operator QRectF()
const {
return v; }
240 Q_PROPERTY(
int x READ x WRITE setX FINAL)
241 Q_PROPERTY(
int y READ y WRITE setY FINAL)
242 Q_PROPERTY(
int width READ width WRITE setWidth FINAL)
243 Q_PROPERTY(
int height READ height WRITE setHeight FINAL)
244 Q_PROPERTY(
int left READ left DESIGNABLE
false FINAL)
245 Q_PROPERTY(
int right READ right DESIGNABLE
false FINAL)
246 Q_PROPERTY(
int top READ top DESIGNABLE
false FINAL)
247 Q_PROPERTY(
int bottom READ bottom DESIGNABLE
false FINAL)
251 QML_EXTENDED(QQmlRectValueType)
255 QQmlRectValueType() =
default;
256 Q_INVOKABLE QQmlRectValueType(
const QRectF &rect) : v(rect.toRect()) {}
257 Q_INVOKABLE QString toString()
const;
273 operator QRect()
const {
return v; }
276#if QT_CONFIG(easingcurve)
277namespace QQmlEasingEnums
279Q_NAMESPACE_EXPORT(Q_QML_EXPORT)
280QML_NAMED_ELEMENT(Easing)
283 Linear = QEasingCurve::Linear,
284 InQuad = QEasingCurve::InQuad, OutQuad = QEasingCurve::OutQuad,
285 InOutQuad = QEasingCurve::InOutQuad, OutInQuad = QEasingCurve::OutInQuad,
286 InCubic = QEasingCurve::InCubic, OutCubic = QEasingCurve::OutCubic,
287 InOutCubic = QEasingCurve::InOutCubic, OutInCubic = QEasingCurve::OutInCubic,
288 InQuart = QEasingCurve::InQuart, OutQuart = QEasingCurve::OutQuart,
289 InOutQuart = QEasingCurve::InOutQuart, OutInQuart = QEasingCurve::OutInQuart,
290 InQuint = QEasingCurve::InQuint, OutQuint = QEasingCurve::OutQuint,
291 InOutQuint = QEasingCurve::InOutQuint, OutInQuint = QEasingCurve::OutInQuint,
292 InSine = QEasingCurve::InSine, OutSine = QEasingCurve::OutSine,
293 InOutSine = QEasingCurve::InOutSine, OutInSine = QEasingCurve::OutInSine,
294 InExpo = QEasingCurve::InExpo, OutExpo = QEasingCurve::OutExpo,
295 InOutExpo = QEasingCurve::InOutExpo, OutInExpo = QEasingCurve::OutInExpo,
296 InCirc = QEasingCurve::InCirc, OutCirc = QEasingCurve::OutCirc,
297 InOutCirc = QEasingCurve::InOutCirc, OutInCirc = QEasingCurve::OutInCirc,
298 InElastic = QEasingCurve::InElastic, OutElastic = QEasingCurve::OutElastic,
299 InOutElastic = QEasingCurve::InOutElastic, OutInElastic = QEasingCurve::OutInElastic,
300 InBack = QEasingCurve::InBack, OutBack = QEasingCurve::OutBack,
301 InOutBack = QEasingCurve::InOutBack, OutInBack = QEasingCurve::OutInBack,
302 InBounce = QEasingCurve::InBounce, OutBounce = QEasingCurve::OutBounce,
303 InOutBounce = QEasingCurve::InOutBounce, OutInBounce = QEasingCurve::OutInBounce,
304 InCurve = QEasingCurve::InCurve, OutCurve = QEasingCurve::OutCurve,
305 SineCurve = QEasingCurve::SineCurve, CosineCurve = QEasingCurve::CosineCurve,
306 BezierSpline = QEasingCurve::BezierSpline,
308 Bezier = BezierSpline
313struct Q_QML_EXPORT QQmlEasingValueType
318 QML_FOREIGN(QEasingCurve)
319 QML_EXTENDED(QQmlEasingValueType)
322 Q_PROPERTY(QQmlEasingEnums::Type type READ type WRITE setType FINAL)
323 Q_PROPERTY(qreal amplitude READ amplitude WRITE setAmplitude FINAL)
324 Q_PROPERTY(qreal overshoot READ overshoot WRITE setOvershoot FINAL)
325 Q_PROPERTY(qreal period READ period WRITE setPeriod FINAL)
326 Q_PROPERTY(QVariantList bezierCurve READ bezierCurve WRITE setBezierCurve FINAL)
329 QQmlEasingEnums::Type type()
const;
330 qreal amplitude()
const;
331 qreal overshoot()
const;
332 qreal period()
const;
333 void setType(QQmlEasingEnums::Type);
334 void setAmplitude(qreal);
335 void setOvershoot(qreal);
336 void setPeriod(qreal);
337 void setBezierCurve(
const QVariantList &);
338 QVariantList bezierCurve()
const;
340 operator QEasingCurve()
const {
return v; }
Combined button and popup list for selecting options.