aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/util
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2011-03-11 15:28:52 +1000
committerMichael Brasser <michael.brasser@nokia.com>2011-06-02 11:59:34 +1000
commit41a76b8b00b9832bdcd94b948f3208d42df73c53 (patch)
tree2ac1cee4ddfdf4e2c5474b518878ad9d138769e5 /src/declarative/util
parent295bd42181e72403648929cd3092487614a131f5 (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.cpp24
-rw-r--r--src/declarative/util/qdeclarativebind_p.h4
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();