30 friend class QQmlAnyBinding;
32 QQmlAbstractBinding();
37 PropertyToPropertyBinding,
40 virtual ~QQmlAbstractBinding();
42 typedef QExplicitlySharedDataPointer<QQmlAbstractBinding> Ptr;
44 virtual QString expression()
const;
46 virtual Kind kind()
const = 0;
51 QQmlPropertyIndex targetPropertyIndex()
const {
return m_targetIndex; }
55 QObject *targetObject()
const {
return m_target.data(); }
57 void setTarget(
const QQmlProperty &);
58 bool setTarget(QObject *,
const QQmlPropertyData &,
const QQmlPropertyData *valueType);
59 bool setTarget(QObject *,
int coreIndex,
bool coreIsAlias,
int valueTypeIndex);
61 virtual void setEnabled(
bool e, QQmlPropertyData::WriteFlags f = QQmlPropertyData::DontRemoveBinding) = 0;
64 void removeFromObject();
66 virtual void printBindingLoopError(
const QQmlProperty &prop);
68 inline QQmlAbstractBinding *nextBinding()
const;
70 inline bool canUseAccessor()
const
71 {
return m_target.tag().testFlag(CanUseAccessor); }
72 void setCanUseAccessor(
bool canUseAccessor)
73 { m_target.setTag(m_target.tag().setFlag(CanUseAccessor, canUseAccessor)); }
75 bool isSticky()
const {
return m_target.tag().testFlag(IsSticky); }
76 void setSticky(
bool isSticky) { m_target.setTag(m_target.tag().setFlag(IsSticky, isSticky)); }
81 void ref() { ++refCount; }
82 int deref() {
return --refCount; }
83 operator
int()
const {
return refCount; }
101 Q_DECLARE_FLAGS(TargetTags, TargetTag)
104 friend class QQmlData;
105 friend class QQmlValueTypeProxyBinding;
106 friend class QQmlObjectCreator;
108 inline void setAddedToObject(
bool v);
109 inline bool isAddedToObject()
const;
111 inline void setNextBinding(QQmlAbstractBinding *);
113 void getPropertyData(
114 const QQmlPropertyData **propertyData, QQmlPropertyData *valueTypeData)
const;
116 inline bool updatingFlag()
const;
117 inline void setUpdatingFlag(
bool);
118 inline bool enabledFlag()
const;
119 inline void setEnabledFlag(
bool);
120 void updateCanUseAccessor();
122 QQmlPropertyIndex m_targetIndex;
125 QTaggedPointer<QObject, TargetTags> m_target;
128 QTaggedPointer<QQmlAbstractBinding, State> m_nextBinding;
131 void setState(State state,
bool enabled)
134 m_nextBinding.setTag(std::max(m_nextBinding.tag(), state));
139 m_nextBinding.setTag(std::min(m_nextBinding.tag(), State(state - 1)));
142 bool hasState(State state)
const
144 return m_nextBinding.tag() >= state;