From 03107d0ccd4bed91b13f05c5ab36776e054dde8f Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 11 Apr 2019 16:16:37 +0200 Subject: Add some support to flag alias properties This is required if we want to be able to get rid of the property cache. Also reserve a flag for var properties, in case it turns out that we need to keep the distinction between var and QVariant properties in QML. Change-Id: I55c2191adcc2d94bd8f148216e26423defaa900f Reviewed-by: Ulf Hermann --- src/corelib/kernel/qmetaobject.cpp | 14 ++++++++++++++ src/corelib/kernel/qmetaobject.h | 1 + src/corelib/kernel/qmetaobject_p.h | 2 ++ src/corelib/kernel/qmetaobjectbuilder.cpp | 23 +++++++++++++++++++++++ src/corelib/kernel/qmetaobjectbuilder_p.h | 2 ++ 5 files changed, 42 insertions(+) (limited to 'src') diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index add1f3b86e..a94c0c7d5f 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -3031,6 +3031,20 @@ bool QMetaProperty::hasStdCppSet() const return (data.flags() & StdCppSet); } +/*! + \internal + + Returns \c true if the property is an alias. + This is for instance true for a property declared in QML + as 'property alias'. +*/ +bool QMetaProperty::isAlias() const +{ + if (!mobj) + return false; + return (data.flags() & Alias); +} + /*! \internal Executes metacall with QMetaObject::RegisterPropertyMetaType flag. diff --git a/src/corelib/kernel/qmetaobject.h b/src/corelib/kernel/qmetaobject.h index e9290e0844..474e4da0f1 100644 --- a/src/corelib/kernel/qmetaobject.h +++ b/src/corelib/kernel/qmetaobject.h @@ -314,6 +314,7 @@ public: bool resetOnGadget(void *gadget) const; bool hasStdCppSet() const; + bool isAlias() const; inline bool isValid() const { return isReadable(); } inline const QMetaObject *enclosingMetaObject() const { return mobj; } diff --git a/src/corelib/kernel/qmetaobject_p.h b/src/corelib/kernel/qmetaobject_p.h index 79d090cc4b..02ede4d376 100644 --- a/src/corelib/kernel/qmetaobject_p.h +++ b/src/corelib/kernel/qmetaobject_p.h @@ -71,6 +71,8 @@ enum PropertyFlags { Writable = 0x00000002, Resettable = 0x00000004, EnumOrFlag = 0x00000008, + Alias = 0x00000010, + //Reserved for future usage = 0x00000020, StdCppSet = 0x00000100, Constant = 0x00000400, Final = 0x00000800, diff --git a/src/corelib/kernel/qmetaobjectbuilder.cpp b/src/corelib/kernel/qmetaobjectbuilder.cpp index 0f778af644..204ba8f51b 100644 --- a/src/corelib/kernel/qmetaobjectbuilder.cpp +++ b/src/corelib/kernel/qmetaobjectbuilder.cpp @@ -2367,6 +2367,19 @@ bool QMetaPropertyBuilder::isFinal() const return false; } +/*! + * Returns \c true if the property is an alias. + * The default value is false + */ +bool QMetaPropertyBuilder::isAlias() const +{ + QMetaPropertyBuilderPrivate *d = d_func(); + if (d) + return d->flag(Alias); + else + return false; +} + /*! Sets this property to readable if \a value is true. @@ -2502,6 +2515,16 @@ void QMetaPropertyBuilder::setFinal(bool value) d->setFlag(Final, value); } +/*! + Sets the \c ALIAS flag on this property to \a value + */ +void QMetaPropertyBuilder::setAlias(bool value) +{ + QMetaPropertyBuilderPrivate *d = d_func(); + if (d) + d->setFlag(Alias, value); +} + /*! Returns the revision of this property. diff --git a/src/corelib/kernel/qmetaobjectbuilder_p.h b/src/corelib/kernel/qmetaobjectbuilder_p.h index 974fbd4a64..a473e68cec 100644 --- a/src/corelib/kernel/qmetaobjectbuilder_p.h +++ b/src/corelib/kernel/qmetaobjectbuilder_p.h @@ -262,6 +262,7 @@ public: bool isEnumOrFlag() const; bool isConstant() const; bool isFinal() const; + bool isAlias() const; void setReadable(bool value); void setWritable(bool value); @@ -274,6 +275,7 @@ public: void setEnumOrFlag(bool value); void setConstant(bool value); void setFinal(bool value); + void setAlias(bool value); int revision() const; void setRevision(int revision); -- cgit v1.2.3