31 friend class QQmlAnyBinding;
33 QQmlAbstractBinding();
38 PropertyToPropertyBinding,
41 virtual ~QQmlAbstractBinding();
43 typedef QExplicitlySharedDataPointer<QQmlAbstractBinding> Ptr;
45 virtual QString expression()
const;
47 virtual Kind kind()
const = 0;
52 QQmlPropertyIndex targetPropertyIndex()
const {
return m_targetIndex; }
56 QObject *targetObject()
const {
return m_target.data(); }
58 void setTarget(
const QQmlProperty &);
59 bool setTarget(QObject *,
const QQmlPropertyData &,
const QQmlPropertyData *valueType);
60 bool setTarget(QObject *,
int coreIndex,
bool coreIsAlias,
int valueTypeIndex);
62 virtual void setEnabled(
bool e, QQmlPropertyData::WriteFlags f = QQmlPropertyData::DontRemoveBinding) = 0;
65 void removeFromObject();
67 virtual void printBindingLoopError(
const QQmlProperty &prop);
69 inline QQmlAbstractBinding *nextBinding()
const;
71 inline bool canUseAccessor()
const
72 {
return m_target.tag().testFlag(CanUseAccessor); }
73 void setCanUseAccessor(
bool canUseAccessor)
74 { m_target.setTag(m_target.tag().setFlag(CanUseAccessor, canUseAccessor)); }
76 bool isSticky()
const {
return m_target.tag().testFlag(IsSticky); }
77 void setSticky(
bool isSticky) { m_target.setTag(m_target.tag().setFlag(IsSticky, isSticky)); }
82 void ref() { ++refCount; }
83 int deref() {
return --refCount; }
84 operator
int()
const {
return refCount; }
102 Q_DECLARE_FLAGS(TargetTags, TargetTag)
105 friend class QQmlData;
106 friend class QQmlValueTypeProxyBinding;
107 friend class QQmlObjectCreator;
109 inline void setAddedToObject(
bool v);
110 inline bool isAddedToObject()
const;
112 inline void setNextBinding(QQmlAbstractBinding *);
114 void getPropertyData(
115 const QQmlPropertyData **propertyData, QQmlPropertyData *valueTypeData)
const;
117 inline bool updatingFlag()
const;
118 inline void setUpdatingFlag(
bool);
119 inline bool enabledFlag()
const;
120 inline void setEnabledFlag(
bool);
121 void updateCanUseAccessor();
123 QQmlPropertyIndex m_targetIndex;
126 QTaggedPointer<QObject, TargetTags> m_target;
129 QTaggedPointer<QQmlAbstractBinding, State> m_nextBinding;
132 void setState(State state,
bool enabled)
135 m_nextBinding.setTag(std::max(m_nextBinding.tag(), state));
140 m_nextBinding.setTag(std::min(m_nextBinding.tag(), State(state - 1)));
143 bool hasState(State state)
const
145 return m_nextBinding.tag() >= state;