diff options
Diffstat (limited to 'tests/auto/qml/qqmlvaluetypeproviders/testtypes.h')
-rw-r--r-- | tests/auto/qml/qqmlvaluetypeproviders/testtypes.h | 216 |
1 files changed, 213 insertions, 3 deletions
diff --git a/tests/auto/qml/qqmlvaluetypeproviders/testtypes.h b/tests/auto/qml/qqmlvaluetypeproviders/testtypes.h index ca1d1b2b7a..8130ea2912 100644 --- a/tests/auto/qml/qqmlvaluetypeproviders/testtypes.h +++ b/tests/auto/qml/qqmlvaluetypeproviders/testtypes.h @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef TESTTYPES_H #define TESTTYPES_H @@ -33,6 +33,8 @@ struct ConstructibleValueType public: ConstructibleValueType() = default; Q_INVOKABLE ConstructibleValueType(int foo) : m_foo(foo) {} + Q_INVOKABLE ConstructibleValueType(QObject *) : m_foo(67) {} + Q_INVOKABLE ConstructibleValueType(const QUrl &) : m_foo(68) {} int foo() const { return m_foo; } @@ -96,6 +98,8 @@ public: const QList<QSizeF> &sizes() const { return m_sizes; } void setSizes(const QList<QSizeF> &sizes) { m_sizes = sizes; } + Q_INVOKABLE QList<QSizeF> sizesDetached() const { return m_sizes; } + private: friend bool operator==(const StructuredValueType &a, const StructuredValueType &b) @@ -109,6 +113,35 @@ private: QList<QSizeF> m_sizes = { QSizeF(1, 1), QSizeF(2, 2) }; }; +struct BarrenValueType +{ + Q_GADGET + Q_PROPERTY(int i READ i WRITE setI) + +public: + BarrenValueType() = default; + Q_INVOKABLE BarrenValueType(const QString &) : m_i(25) {} + + int i() const { return m_i; } + void setI(int newI) { m_i = newI; } + +private: + friend bool operator==(const BarrenValueType &a, const BarrenValueType &b) + { + return a.m_i == b.m_i; + } + + int m_i = 0; +}; + +struct ForeignAnonymousStructuredValueType +{ + Q_GADGET + QML_ANONYMOUS + QML_FOREIGN(BarrenValueType) + QML_STRUCTURED_VALUE +}; + class MyTypeObject : public QObject { Q_OBJECT @@ -133,6 +166,7 @@ class MyTypeObject : public QObject Q_PROPERTY(QVariant variant READ variant NOTIFY changed) Q_PROPERTY(ConstructibleValueType constructible READ constructible WRITE setConstructible NOTIFY constructibleChanged) Q_PROPERTY(StructuredValueType structured READ structured WRITE setStructured NOTIFY structuredChanged) + Q_PROPERTY(BarrenValueType barren READ barren WRITE setBarren NOTIFY barrenChanged) Q_PROPERTY(QDateTime aDateTime READ aDateTime WRITE setADateTime NOTIFY aDateTimeChanged) Q_PROPERTY(QDate aDate READ aDate WRITE setADate NOTIFY aDateChanged) @@ -275,7 +309,7 @@ public: { return m_aDate; } - void setADate(const QDate &newADate) + void setADate(QDate newADate) { if (m_aDate == newADate) return; @@ -287,7 +321,7 @@ public: { return m_aTime; } - void setATime(const QTime &newATime) + void setATime(QTime newATime) { if (m_aTime == newATime) return; @@ -307,6 +341,47 @@ public: emit aVariantChanged(); } + BarrenValueType barren() const + { + return m_barren; + } + + void setBarren(const BarrenValueType &newBarren) + { + if (m_barren == newBarren) + return; + m_barren = newBarren; + emit barrenChanged(); + } + + Q_INVOKABLE void acceptConstructible(const ConstructibleValueType &a) + { + setAVariant(QVariant::fromValue(a)); + } + + Q_INVOKABLE int acceptConstructibles(const QList<ConstructibleValueType> &constructibles) + { + int result = 0; + for (const auto &c: constructibles) { + result += c.foo(); + } + return result; + } + + Q_INVOKABLE StructuredValueType acceptStructured(const StructuredValueType &a) + { + return a; + } + + Q_INVOKABLE void setEffectPadding(const QRect &r) + { + m_hasEffectPadding = true; + m_effectPadding = r; + } + + bool hasEffectPadding() const { return m_hasEffectPadding; } + QRectF effectPadding() const { return m_effectPadding; } + signals: void changed(); void runScript(); @@ -319,6 +394,8 @@ signals: void aTimeChanged(); void aVariantChanged(); + void barrenChanged(); + public slots: QSize method() { return QSize(13, 14); } private: @@ -329,6 +406,139 @@ private: QDate m_aDate; QTime m_aTime; QVariant m_aVariant; + BarrenValueType m_barren; + QRectF m_effectPadding; + bool m_hasEffectPadding = false; +}; + +class Padding +{ + Q_GADGET + + Q_PROPERTY(int left READ left WRITE setLeft) + Q_PROPERTY(int right READ right WRITE setRight) + + QML_VALUE_TYPE(padding) + QML_STRUCTURED_VALUE + +public: + enum LogType { + DefaultCtor, + CopyCtor, + MoveCtor, + CopyAssign, + MoveAssign, + InvokableCtor, + CustomCtor, + Invalid, + }; + + Q_ENUM(LogType); + + struct LogEntry { + LogType type = Invalid; + int left = 0; + int right = 0; + + friend QDebug operator<<(QDebug &debug, const LogEntry &self) + { + return debug << self.type << " " << self.left << " " << self.right; + } + }; + + static QList<LogEntry> log; + + void doLog(LogType type) { + log.append({ + type, m_left, m_right + }); + } + + Padding() + { + doLog(DefaultCtor); + } + + Padding(const Padding &other) + : m_left(other.m_left) + , m_right(other.m_right) + { + doLog(CopyCtor); + } + + Padding(Padding &&other) + : m_left(other.m_left) + , m_right(other.m_right) + { + doLog(MoveCtor); + } + + Padding(int left, int right) + : m_left( left ) + , m_right( right ) + { + doLog(CustomCtor); + } + + Padding &operator=(const Padding &other) { + if (this != &other) { + m_left = other.m_left; + m_right = other.m_right; + } + doLog(CopyAssign); + return *this; + } + + Padding &operator=(Padding &&other) { + if (this != &other) { + m_left = other.m_left; + m_right = other.m_right; + } + doLog(MoveAssign); + return *this; + } + + Q_INVOKABLE Padding(int padding ) + : m_left( padding ) + , m_right( padding ) + { + doLog(InvokableCtor); + } + + void setLeft(int padding) { m_left = padding; } + int left() const { return m_left; } + + void setRight(int padding) { m_right = padding; } + int right() const { return m_right; } + +private: + int m_left = 0; + int m_right = 0; +}; + +class MyItem : public QObject +{ + Q_OBJECT + Q_PROPERTY(Padding padding READ padding WRITE setPadding NOTIFY paddingChanged) + QML_ELEMENT + +public: + void setPadding(const Padding &padding) + { + if (padding.left() == m_padding.left() && padding.right() == m_padding.right()) + return; + + m_padding = padding; + emit paddingChanged(); + } + + const Padding &padding() const{ return m_padding; } + +signals: + void paddingChanged(); + +private: + Padding m_padding{ 17, 17 }; }; void registerTypes(); |