diff options
author | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2018-06-22 21:17:07 +0200 |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2018-07-09 10:49:00 +0000 |
commit | c78aa5857197e8ded675a35165b59d406a379e24 (patch) | |
tree | 46b7673ef563f110c9e8420d5bb00d07022348d7 /src/qml/util | |
parent | a7f17c437e1c5b33ee6ac39e05f33ab3648a2fdc (diff) |
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 <mitch.curtis@qt.io>
Diffstat (limited to 'src/qml/util')
-rw-r--r-- | src/qml/util/qqmladaptormodel.cpp | 40 | ||||
-rw-r--r-- | src/qml/util/qqmladaptormodel_p.h | 4 |
2 files changed, 21 insertions, 23 deletions
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<VDMAbstractItemModelDataType *>(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<VDMObjectDelegateDataType *>(this); if (!metaObject) dataType->initializeMetaType(model); return index >= 0 && index < model.list.count() - ? new QQmlDMObjectData(metaType, dataType, index, qvariant_cast<QObject *>(model.list.at(index))) + ? new QQmlDMObjectData(metaType, dataType, index, row, column, qvariant_cast<QObject *>(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; } |