diff options
author | Michael Brasser <michael.brasser@nokia.com> | 2011-03-11 15:28:52 +1000 |
---|---|---|
committer | Michael Brasser <michael.brasser@nokia.com> | 2011-06-02 11:59:34 +1000 |
commit | 41a76b8b00b9832bdcd94b948f3208d42df73c53 (patch) | |
tree | 2ac1cee4ddfdf4e2c5474b518878ad9d138769e5 /src/declarative/util | |
parent | 295bd42181e72403648929cd3092487614a131f5 (diff) |
Make Binding a value source.
Change-Id: I1a9003f1e506c53e172bfae418f536ad0da2bf47
Reviewed-by: Martin Jones
Diffstat (limited to 'src/declarative/util')
-rw-r--r-- | src/declarative/util/qdeclarativebind.cpp | 24 | ||||
-rw-r--r-- | src/declarative/util/qdeclarativebind_p.h | 4 |
2 files changed, 21 insertions, 7 deletions
diff --git a/src/declarative/util/qdeclarativebind.cpp b/src/declarative/util/qdeclarativebind.cpp index b7199ac45e..ff30336974 100644 --- a/src/declarative/util/qdeclarativebind.cpp +++ b/src/declarative/util/qdeclarativebind.cpp @@ -65,8 +65,9 @@ public: bool when : 1; bool componentComplete : 1; QObject *obj; - QString prop; + QString propName; QDeclarativeNullableValue<QVariant> value; + QDeclarativeProperty prop; }; @@ -146,6 +147,8 @@ void QDeclarativeBind::setObject(QObject *obj) { Q_D(QDeclarativeBind); d->obj = obj; + if (d->componentComplete) + d->prop = QDeclarativeProperty(d->obj, d->propName); eval(); } @@ -157,13 +160,15 @@ void QDeclarativeBind::setObject(QObject *obj) QString QDeclarativeBind::property() const { Q_D(const QDeclarativeBind); - return d->prop; + return d->propName; } void QDeclarativeBind::setProperty(const QString &p) { Q_D(QDeclarativeBind); - d->prop = p; + d->propName = p; + if (d->componentComplete) + d->prop = QDeclarativeProperty(d->obj, d->propName); eval(); } @@ -187,6 +192,12 @@ void QDeclarativeBind::setValue(const QVariant &v) eval(); } +void QDeclarativeBind::setTarget(const QDeclarativeProperty &p) +{ + Q_D(QDeclarativeBind); + d->prop = p; +} + void QDeclarativeBind::classBegin() { Q_D(QDeclarativeBind); @@ -197,17 +208,18 @@ void QDeclarativeBind::componentComplete() { Q_D(QDeclarativeBind); d->componentComplete = true; + if (!d->prop.isValid()) + d->prop = QDeclarativeProperty(d->obj, d->propName); eval(); } void QDeclarativeBind::eval() { Q_D(QDeclarativeBind); - if (!d->obj || d->value.isNull || !d->when || !d->componentComplete) + if (!d->prop.isValid() || d->value.isNull || !d->when || !d->componentComplete) return; - QDeclarativeProperty prop(d->obj, d->prop); - prop.write(d->value.value); + d->prop.write(d->value.value); } QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativebind_p.h b/src/declarative/util/qdeclarativebind_p.h index b5e14c2ac8..38f15a9328 100644 --- a/src/declarative/util/qdeclarativebind_p.h +++ b/src/declarative/util/qdeclarativebind_p.h @@ -53,11 +53,12 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) class QDeclarativeBindPrivate; -class Q_AUTOTEST_EXPORT QDeclarativeBind : public QObject, public QDeclarativeParserStatus +class Q_AUTOTEST_EXPORT QDeclarativeBind : public QObject, public QDeclarativePropertyValueSource, public QDeclarativeParserStatus { Q_OBJECT Q_DECLARE_PRIVATE(QDeclarativeBind) Q_INTERFACES(QDeclarativeParserStatus) + Q_INTERFACES(QDeclarativePropertyValueSource) Q_PROPERTY(QObject *target READ object WRITE setObject) Q_PROPERTY(QString property READ property WRITE setProperty) Q_PROPERTY(QVariant value READ value WRITE setValue) @@ -80,6 +81,7 @@ public: void setValue(const QVariant &); protected: + virtual void setTarget(const QDeclarativeProperty &); virtual void classBegin(); virtual void componentComplete(); |