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/qqmlbinding.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/qqmlbinding.cpp')
-rw-r--r-- | src/qml/qml/qqmlbinding.cpp | 31 |
1 files changed, 8 insertions, 23 deletions
diff --git a/src/qml/qml/qqmlbinding.cpp b/src/qml/qml/qqmlbinding.cpp index ffe1b4287d..c96e5b661d 100644 --- a/src/qml/qml/qqmlbinding.cpp +++ b/src/qml/qml/qqmlbinding.cpp @@ -465,8 +465,7 @@ void QQmlBinding::setEnabled(bool e, QQmlPropertyData::WriteFlags flags) m_nextBinding.setFlag2(); // Always use accessors, only not when: if (auto interceptorMetaObject = QQmlInterceptorMetaObject::get(targetObject())) { - int coreIndex = getPropertyCoreIndex(); - if (coreIndex == -1 || interceptorMetaObject->intercepts(coreIndex)) + if (!m_targetIndex.isValid() || interceptorMetaObject->intercepts(m_targetIndex)) m_nextBinding.clearFlag2(); } @@ -491,7 +490,7 @@ void QQmlBinding::setTarget(QObject *object, const QQmlPropertyData &core) m_target = object; if (!object) { - m_targetIndex = -1; + m_targetIndex = QQmlPropertyIndex(); return; } @@ -505,7 +504,7 @@ void QQmlBinding::setTarget(QObject *object, const QQmlPropertyData &core) int aValueTypeIndex; if (!vme->aliasTarget(coreIndex, &object, &coreIndex, &aValueTypeIndex)) { m_target = 0; - m_targetIndex = -1; + m_targetIndex = QQmlPropertyIndex(); return; } if (valueTypeIndex == -1) @@ -514,7 +513,7 @@ void QQmlBinding::setTarget(QObject *object, const QQmlPropertyData &core) QQmlData *data = QQmlData::get(object, false); if (!data || !data->propertyCache) { m_target = 0; - m_targetIndex = -1; + m_targetIndex = QQmlPropertyIndex(); return; } QQmlPropertyData *propertyData = data->propertyCache->property(coreIndex); @@ -543,39 +542,25 @@ void QQmlBinding::setTarget(QObject *object, const QQmlPropertyData &core) QQmlPropertyData QQmlBinding::getPropertyData() const { - int coreIndex; - int valueTypeIndex = QQmlPropertyData::decodeValueTypePropertyIndex(m_targetIndex, &coreIndex); - QQmlData *data = QQmlData::get(*m_target, false); Q_ASSERT(data && data->propertyCache); - QQmlPropertyData *propertyData = data->propertyCache->property(coreIndex); + QQmlPropertyData *propertyData = data->propertyCache->property(m_targetIndex.coreIndex()); Q_ASSERT(propertyData); QQmlPropertyData d = *propertyData; - if (Q_UNLIKELY(valueTypeIndex != -1)) { + if (Q_UNLIKELY(m_targetIndex.hasValueTypeIndex())) { const QMetaObject *valueTypeMetaObject = QQmlValueTypeFactory::metaObjectForMetaType(d.propType); Q_ASSERT(valueTypeMetaObject); - QMetaProperty vtProp = valueTypeMetaObject->property(valueTypeIndex); + QMetaProperty vtProp = valueTypeMetaObject->property(m_targetIndex.valueTypeIndex()); d.setFlags(d.getFlags() | QQmlPropertyData::IsValueTypeVirtual); d.valueTypeFlags = QQmlPropertyData::flagsForProperty(vtProp); d.valueTypePropType = vtProp.userType(); - d.valueTypeCoreIndex = valueTypeIndex; + d.valueTypeCoreIndex = m_targetIndex.valueTypeIndex(); } return d; } -Q_ALWAYS_INLINE int QQmlBinding::getPropertyCoreIndex() const -{ - int coreIndex; - int valueTypeIndex = QQmlPropertyData::decodeValueTypePropertyIndex(m_targetIndex, &coreIndex); - if (valueTypeIndex != -1) { - return -1; - } else { - return coreIndex; - } -} - class QObjectPointerBinding: public QQmlNonbindingBinding { QQmlMetaObject targetMetaObject; |