diff options
author | Erik Verbruggen <erik.verbruggen@qt.io> | 2016-07-22 10:08:17 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2016-08-04 12:11:05 +0000 |
commit | 1534dd6d97c49f5c7e0392df9c95198311b5b817 (patch) | |
tree | dad42c0c12c0ef3005b26645df6cc21832f54315 /src/qml/qml/qqmlabstractbinding.cpp | |
parent | fdc3dcd43f8944eb33e778627c43ab9487a26960 (diff) |
QML: Introduce QQmlPropertyIndex
This helps in making it clear when an index is a plain old number and
when it consists of an encoded value type index.
Change-Id: Ic50d95caf244ed0ee2d62bdba53910a371cfee04
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlabstractbinding.cpp')
-rw-r--r-- | src/qml/qml/qqmlabstractbinding.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/qml/qml/qqmlabstractbinding.cpp b/src/qml/qml/qqmlabstractbinding.cpp index abaf95fa11..39d609454f 100644 --- a/src/qml/qml/qqmlabstractbinding.cpp +++ b/src/qml/qml/qqmlabstractbinding.cpp @@ -78,24 +78,26 @@ void QQmlAbstractBinding::addToObject() QQmlData *data = QQmlData::get(obj, true); - int coreIndex; - if (QQmlPropertyData::decodeValueTypePropertyIndex(targetPropertyIndex(), &coreIndex) != -1) { + int coreIndex = targetPropertyIndex().coreIndex(); + if (targetPropertyIndex().hasValueTypeIndex()) { // Value type // Find the value type proxy (if there is one) QQmlValueTypeProxyBinding *proxy = 0; if (data->hasBindingBit(coreIndex)) { QQmlAbstractBinding *b = data->bindings; - while (b && b->targetPropertyIndex() != coreIndex) + while (b && (b->targetPropertyIndex().coreIndex() != coreIndex || + b->targetPropertyIndex().hasValueTypeIndex())) b = b->nextBinding(); Q_ASSERT(b && b->isValueTypeProxy()); proxy = static_cast<QQmlValueTypeProxyBinding *>(b); } if (!proxy) { - proxy = new QQmlValueTypeProxyBinding(obj, coreIndex); + proxy = new QQmlValueTypeProxyBinding(obj, QQmlPropertyIndex(coreIndex)); - Q_ASSERT(proxy->targetPropertyIndex() == coreIndex); + Q_ASSERT(proxy->targetPropertyIndex().coreIndex() == coreIndex); + Q_ASSERT(!proxy->targetPropertyIndex().hasValueTypeIndex()); Q_ASSERT(proxy->targetObject() == obj); proxy->addToObject(); @@ -137,12 +139,13 @@ void QQmlAbstractBinding::removeFromObject() next = nextBinding(); setNextBinding(0); - int coreIndex; - if (QQmlPropertyData::decodeValueTypePropertyIndex(targetPropertyIndex(), &coreIndex) != -1) { + int coreIndex = targetPropertyIndex().coreIndex(); + if (targetPropertyIndex().hasValueTypeIndex()) { // Find the value type binding QQmlAbstractBinding *vtbinding = data->bindings; - while (vtbinding->targetPropertyIndex() != coreIndex) { + while (vtbinding && (vtbinding->targetPropertyIndex().coreIndex() != coreIndex || + vtbinding->targetPropertyIndex().hasValueTypeIndex())) { vtbinding = vtbinding->nextBinding(); Q_ASSERT(vtbinding); } |