From c78aa5857197e8ded675a35165b59d406a379e24 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Fri, 22 Jun 2018 21:17:07 +0200 Subject: QQmlDelegateModelItem: set row and column explicit Whenever we set a model index on a model item, set row and column explicit as well. We used to calculate row and column by calling out to QQmlDelegateModel from within QQmlDelegateModelItem. But we want to remove the dependency to QQmlDelegateModel as much as possible, to be able to reuse QQmlDelegateModelItem also from other model classes (first and foremost the upcoming QQmlTableInstanceModel). Change-Id: Ib80b31250010b2611ba1715d3324145117add865 Reviewed-by: Mitch Curtis --- src/qml/util/qqmladaptormodel.cpp | 40 +++++++++++++++++++-------------------- src/qml/util/qqmladaptormodel_p.h | 4 ++-- 2 files changed, 21 insertions(+), 23 deletions(-) (limited to 'src/qml/util') diff --git a/src/qml/util/qqmladaptormodel.cpp b/src/qml/util/qqmladaptormodel.cpp index 4130eff33a..faae38abec 100644 --- a/src/qml/util/qqmladaptormodel.cpp +++ b/src/qml/util/qqmladaptormodel.cpp @@ -96,7 +96,7 @@ public: QQmlDMCachedModelData( QQmlDelegateModelItemMetaType *metaType, VDMModelDelegateDataType *dataType, - int index); + int index, int row, int column); int metaCall(QMetaObject::Call call, int id, void **arguments); @@ -262,9 +262,8 @@ public: bool hasModelData; }; -QQmlDMCachedModelData::QQmlDMCachedModelData( - QQmlDelegateModelItemMetaType *metaType, VDMModelDelegateDataType *dataType, int index) - : QQmlDelegateModelItem(metaType, index) +QQmlDMCachedModelData::QQmlDMCachedModelData(QQmlDelegateModelItemMetaType *metaType, VDMModelDelegateDataType *dataType, int index, int row, int column) + : QQmlDelegateModelItem(metaType, index, row, column) , type(dataType) { if (index == -1) @@ -326,12 +325,12 @@ void QQmlDMCachedModelData::setValue(const QString &role, const QVariant &value) } } -bool QQmlDMCachedModelData::resolveIndex(const QQmlAdaptorModel &, int idx) +bool QQmlDMCachedModelData::resolveIndex(const QQmlAdaptorModel &adaptorModel, int idx) { if (index == -1) { Q_ASSERT(idx >= 0); cachedData.clear(); - setModelIndex(idx); + setModelIndex(idx, adaptorModel.rowAt(idx), adaptorModel.columnAt(idx)); const QMetaObject *meta = metaObject(); const int propertyCount = type->propertyRoles.count(); for (int i = 0; i < propertyCount; ++i) @@ -404,8 +403,8 @@ public: QQmlDMAbstractItemModelData( QQmlDelegateModelItemMetaType *metaType, VDMModelDelegateDataType *dataType, - int index) - : QQmlDMCachedModelData(metaType, dataType, index) + int index, int row, int column) + : QQmlDMCachedModelData(metaType, dataType, index, row, column) { } @@ -526,12 +525,12 @@ public: QQmlDelegateModelItem *createItem( QQmlAdaptorModel &model, QQmlDelegateModelItemMetaType *metaType, - int index) const override + int index, int row, int column) const override { VDMAbstractItemModelDataType *dataType = const_cast(this); if (!metaObject) dataType->initializeMetaType(model); - return new QQmlDMAbstractItemModelData(metaType, dataType, index); + return new QQmlDMAbstractItemModelData(metaType, dataType, index, row, column); } void initializeMetaType(QQmlAdaptorModel &model) @@ -572,8 +571,8 @@ class QQmlDMListAccessorData : public QQmlDelegateModelItem Q_OBJECT Q_PROPERTY(QVariant modelData READ modelData WRITE setModelData NOTIFY modelDataChanged) public: - QQmlDMListAccessorData(QQmlDelegateModelItemMetaType *metaType, int index, const QVariant &value) - : QQmlDelegateModelItem(metaType, index) + QQmlDMListAccessorData(QQmlDelegateModelItemMetaType *metaType, int index, int row, int column, const QVariant &value) + : QQmlDelegateModelItem(metaType, index, row, column) , cachedData(value) { } @@ -678,11 +677,11 @@ public: QQmlDelegateModelItem *createItem( QQmlAdaptorModel &model, QQmlDelegateModelItemMetaType *metaType, - int index) const override + int index, int row, int column) const override { return new QQmlDMListAccessorData( metaType, - index, + index, row, column, index >= 0 && index < model.list.count() ? model.list.at(index) : QVariant()); } }; @@ -701,7 +700,7 @@ public: QQmlDMObjectData( QQmlDelegateModelItemMetaType *metaType, VDMObjectDelegateDataType *dataType, - int index, + int index, int row, int column, QObject *object); QObject *modelData() const { return object; } @@ -767,13 +766,13 @@ public: QQmlDelegateModelItem *createItem( QQmlAdaptorModel &model, QQmlDelegateModelItemMetaType *metaType, - int index) const override + int index, int row, int column) const override { VDMObjectDelegateDataType *dataType = const_cast(this); if (!metaObject) dataType->initializeMetaType(model); return index >= 0 && index < model.list.count() - ? new QQmlDMObjectData(metaType, dataType, index, qvariant_cast(model.list.at(index))) + ? new QQmlDMObjectData(metaType, dataType, index, row, column, qvariant_cast(model.list.at(index))) : nullptr; } @@ -887,12 +886,11 @@ public: VDMObjectDelegateDataType *m_type; }; -QQmlDMObjectData::QQmlDMObjectData( - QQmlDelegateModelItemMetaType *metaType, +QQmlDMObjectData::QQmlDMObjectData(QQmlDelegateModelItemMetaType *metaType, VDMObjectDelegateDataType *dataType, - int index, + int index, int row, int column, QObject *object) - : QQmlDelegateModelItem(metaType, index) + : QQmlDelegateModelItem(metaType, index, row, column) , object(object) { new QQmlDMObjectDataMetaObject(this, dataType); diff --git a/src/qml/util/qqmladaptormodel_p.h b/src/qml/util/qqmladaptormodel_p.h index 3b2d180ca7..af0917cf3b 100644 --- a/src/qml/util/qqmladaptormodel_p.h +++ b/src/qml/util/qqmladaptormodel_p.h @@ -86,7 +86,7 @@ public: virtual QQmlDelegateModelItem *createItem( QQmlAdaptorModel &, QQmlDelegateModelItemMetaType *, - int) const { return nullptr; } + int, int, int) const { return nullptr; } virtual bool notify( const QQmlAdaptorModel &, @@ -131,7 +131,7 @@ public: inline QVariant value(int index, const QString &role) const { return accessors->value(*this, index, role); } inline QQmlDelegateModelItem *createItem(QQmlDelegateModelItemMetaType *metaType, int index) { - return accessors->createItem(*this, metaType, index); } + return accessors->createItem(*this, metaType, index, rowAt(index), columnAt(index)); } inline bool hasProxyObject() const { return list.type() == QQmlListAccessor::Instance || list.type() == QQmlListAccessor::ListProperty; } -- cgit v1.2.3