32class Q_QML_EXPORT
QQmlBinding :
public QQmlJavaScriptExpression,
33 public QQmlAbstractBinding
35 friend class QQmlAbstractBinding;
37 typedef QExplicitlySharedDataPointer<QQmlBinding> Ptr;
39 static QQmlBinding *create(
const QQmlPropertyData *,
const QQmlScriptString &, QObject *, QQmlContext *);
41 static QQmlBinding *create(
42 const QQmlPropertyData *,
const QString &, QObject *,
43 const QQmlRefPointer<QQmlContextData> &,
const QString &url = QString(),
44 quint16 lineNumber = 0);
46 static QQmlBinding *create(
47 const QQmlPropertyData *property, QV4::Function *function, QObject *obj,
48 const QQmlRefPointer<QQmlContextData> &ctxt, QV4::ExecutionContext *scope);
50 static QQmlBinding *create(QMetaType propertyType, QV4::Function *function, QObject *obj,
51 const QQmlRefPointer<QQmlContextData> &ctxt,
52 QV4::ExecutionContext *scope);
54 static QQmlBinding *createTranslationBinding(
55 const QQmlRefPointer<QV4::ExecutableCompilationUnit> &unit,
56 const QV4::CompiledData::Binding *binding, QObject *obj,
57 const QQmlRefPointer<QQmlContextData> &ctxt);
60 createTranslationBinding(
const QQmlRefPointer<QV4::ExecutableCompilationUnit> &unit,
61 const QQmlRefPointer<QQmlContextData> &ctxt,
62 const QString &propertyName,
const QQmlTranslation &translationData,
63 const QQmlSourceLocation &location, QObject *obj);
65 Kind kind()
const final {
return QQmlAbstractBinding::QmlBinding; }
67 ~QQmlBinding() override;
69 bool mustCaptureBindableProperty()
const final {
return true;}
70 void refresh() override;
72 void setEnabled(
bool, QQmlPropertyData::WriteFlags flags = QQmlPropertyData::DontRemoveBinding) override;
73 QString expression()
const override;
74 void update(QQmlPropertyData::WriteFlags flags = QQmlPropertyData::DontRemoveBinding);
76 void printBindingLoopError(
const QQmlProperty &prop) override;
78 typedef int Identifier;
84 bool evaluate(
void *result, QMetaType type)
86 return QQmlJavaScriptExpression::evaluate(&result, &type, 0);
89 void expressionChanged() override;
91 QQmlSourceLocation sourceLocation()
const override;
92 void setSourceLocation(
const QQmlSourceLocation &location);
93 void setBoundFunction(QV4::BoundFunction *boundFunction) {
94 m_boundFunction.set(boundFunction->engine(), *boundFunction);
96 bool hasBoundFunction()
const {
return m_boundFunction.valueRef(); }
99
100
101
102
103
104
105 QVector<QQmlProperty> dependencies()
const;
107 virtual bool hasDependencies()
const;
110 virtual void doUpdate(
const DeleteWatcher &watcher,
111 QQmlPropertyData::WriteFlags flags, QV4::Scope &scope);
113 virtual bool write(
const QV4::Value &result,
bool isUndefined, QQmlPropertyData::WriteFlags flags) = 0;
114 virtual bool write(
void *result, QMetaType type,
bool isUndefined, QQmlPropertyData::WriteFlags flags) = 0;
116 int getPropertyType()
const;
118 bool slowWrite(
const QQmlPropertyData &core,
const QQmlPropertyData &valueTypeData,
119 const QV4::Value &result,
bool isUndefined, QQmlPropertyData::WriteFlags flags);
120 bool slowWrite(
const QQmlPropertyData &core,
const QQmlPropertyData &valueTypeData,
121 const void *result, QMetaType resultType,
bool isUndefined,
122 QQmlPropertyData::WriteFlags flags);
124 QV4::ReturnedValue evaluate(
bool *isUndefined);
127 static QQmlBinding *newBinding(
const QQmlPropertyData *property);
128 static QQmlBinding *newBinding(QMetaType propertyType);
130 QQmlSourceLocation *m_sourceLocation =
nullptr;
131 QV4::PersistentValue m_boundFunction;
132 void handleWriteError(
const void *result, QMetaType resultType, QMetaType metaType);