33class Q_QML_EXPORT
QQmlBinding :
public QQmlJavaScriptExpression,
34 public QQmlAbstractBinding
36 friend class QQmlAbstractBinding;
38 typedef QExplicitlySharedDataPointer<QQmlBinding> Ptr;
40 static QQmlBinding *create(
const QQmlPropertyData *,
const QQmlScriptString &, QObject *, QQmlContext *);
42 static QQmlBinding *create(
43 const QQmlPropertyData *,
const QString &, QObject *,
44 const QQmlRefPointer<QQmlContextData> &,
const QString &url = QString(),
45 quint16 lineNumber = 0);
47 static QQmlBinding *create(
48 const QQmlPropertyData *property, QV4::Function *function, QObject *obj,
49 const QQmlRefPointer<QQmlContextData> &ctxt, QV4::ExecutionContext *scope);
51 static QQmlBinding *create(QMetaType propertyType, QV4::Function *function, QObject *obj,
52 const QQmlRefPointer<QQmlContextData> &ctxt,
53 QV4::ExecutionContext *scope);
55 static QQmlBinding *createTranslationBinding(
56 const QQmlRefPointer<QV4::ExecutableCompilationUnit> &unit,
57 const QV4::CompiledData::Binding *binding, QObject *obj,
58 const QQmlRefPointer<QQmlContextData> &ctxt);
61 createTranslationBinding(
const QQmlRefPointer<QV4::ExecutableCompilationUnit> &unit,
62 const QQmlRefPointer<QQmlContextData> &ctxt,
63 const QString &propertyName,
const QQmlTranslation &translationData,
64 const QQmlSourceLocation &location, QObject *obj);
66 Kind kind()
const final {
return QQmlAbstractBinding::QmlBinding; }
68 ~QQmlBinding() override;
70 bool mustCaptureBindableProperty()
const final {
return true;}
71 void refresh() override;
73 void setEnabled(
bool, QQmlPropertyData::WriteFlags flags = QQmlPropertyData::DontRemoveBinding) override;
74 QString expression()
const override;
75 void update(QQmlPropertyData::WriteFlags flags = QQmlPropertyData::DontRemoveBinding);
77 void printBindingLoopError(
const QQmlProperty &prop) override;
79 typedef int Identifier;
85 bool evaluate(
void *result, QMetaType type)
87 return QQmlJavaScriptExpression::evaluate(&result, &type, 0);
90 void expressionChanged() override;
92 QQmlSourceLocation sourceLocation()
const override;
93 void setSourceLocation(
const QQmlSourceLocation &location);
94 void setBoundFunction(QV4::BoundFunction *boundFunction) {
95 m_boundFunction.set(boundFunction->engine(), *boundFunction);
97 bool hasBoundFunction()
const {
return m_boundFunction.valueRef(); }
100
101
102
103
104
105
106 QList<QQmlProperty> dependencies()
const;
108 virtual bool hasDependencies()
const;
111 virtual void doUpdate(
const DeleteWatcher &watcher,
112 QQmlPropertyData::WriteFlags flags, QV4::Scope &scope);
114 virtual bool write(
const QV4::Value &result,
bool isUndefined, QQmlPropertyData::WriteFlags flags) = 0;
115 virtual bool write(
void *result, QMetaType type,
bool isUndefined, QQmlPropertyData::WriteFlags flags) = 0;
117 int getPropertyType()
const;
119 bool slowWrite(
const QQmlPropertyData &core,
const QQmlPropertyData &valueTypeData,
120 const QV4::Value &result,
bool isUndefined, QQmlPropertyData::WriteFlags flags);
121 bool slowWrite(
const QQmlPropertyData &core,
const QQmlPropertyData &valueTypeData,
122 const void *result, QMetaType resultType,
bool isUndefined,
123 QQmlPropertyData::WriteFlags flags);
125 QV4::ReturnedValue evaluate(
bool *isUndefined);
128 static QQmlBinding *newBinding(
const QQmlPropertyData *property);
129 static QQmlBinding *newBinding(QMetaType propertyType);
131 QQmlSourceLocation *m_sourceLocation =
nullptr;
132 QV4::PersistentValue m_boundFunction;
133 void handleWriteError(
const void *result, QMetaType resultType, QMetaType metaType);