9QQmlDMListAccessorData::QQmlDMListAccessorData(
10 const QQmlRefPointer<QQmlDelegateModelItemMetaType> &metaType,
11 VDMListDelegateDataType *dataType,
12 int index,
int row,
int column,
const QVariant &value)
13 : QQmlDelegateModelItem(metaType, dataType, index, row, column)
16 QObjectPrivate::get(
this)->metaObject = dataType;
48bool QQmlDMListAccessorData::resolveIndex(
const QQmlAdaptorModel &model,
int idx)
50 if (hasValidModelIndex())
53 setModelIndex(idx, modelRow(), modelColumn());
54 setModelData(model.list.at(idx));
55 emit modelIndexChanged();
59void VDMListDelegateDataType::emitAllSignals(QQmlDMListAccessorData *accessor)
const
61 for (
int i = propertyOffset, end = propertyCount(); i != end; ++i)
62 QMetaObject::activate(accessor,
this, i - propertyOffset,
nullptr);
63 emit accessor->modelDataChanged();
66int VDMListDelegateDataType::metaCall(
67 QObject *object, QMetaObject::Call call,
int id,
void **arguments)
69 Q_ASSERT(qobject_cast<QQmlDMListAccessorData *>(object));
70 QQmlDMListAccessorData *accessor =
static_cast<QQmlDMListAccessorData *>(object);
73 case QMetaObject::ReadProperty: {
74 if (id < propertyOffset)
77 QVariant *result =
static_cast<QVariant *>(arguments[0]);
78 const QByteArray name = property(id).name();
79 const QVariant data = accessor->hasValidModelIndex()
80 ? model->list.at(accessor->modelIndex())
81 : accessor->modelData();
82 *result = value(&data, name);
85 case QMetaObject::WriteProperty: {
86 if (id < propertyOffset)
89 const QVariant &argument = *
static_cast<QVariant *>(arguments[0]);
90 const QByteArray name = property(id).name();
91 QVariant data = accessor->hasValidModelIndex()
92 ? model->list.at(accessor->modelIndex())
93 : accessor->modelData();
94 if (argument == value(&data, name))
96 setValue(&data, name, argument);
97 if (accessor->hasValidModelIndex()) {
98 model->list.set(accessor->modelIndex(), data);
99 accessor->metaType()->emitModelChanged();
101 accessor->cachedData = data;
102 accessor->cachedDataClean =
false;
104 QMetaObject::activate(accessor,
this, id - propertyOffset,
nullptr);
105 emit accessor->modelDataChanged();
112 return accessor->qt_metacall(call, id, arguments);
115int VDMListDelegateDataType::createProperty(
const char *name,
const char *)
117 const int propertyIndex = propertyCount() - propertyOffset;
120 QQmlAdaptorModelEngineData::addProperty(
121 &builder, propertyIndex, name, QByteArrayLiteral(
"QVariant"),
122 model->delegateModelAccess != QQmlDelegateModel::ReadOnly);
124 metaObject.reset(builder.toMetaObject());
125 *
static_cast<QMetaObject *>(
this) = *metaObject;
126 return propertyIndex + propertyOffset;
130const QMetaObject *VDMListDelegateDataType::toDynamicMetaObject(QObject *object)
const
132QMetaObject *VDMListDelegateDataType::toDynamicMetaObject(QObject *object)
135 QQmlDMListAccessorData *data =
static_cast<QQmlDMListAccessorData *>(object);
136 if (!data->usesStructuredModelData()) {
140 if (!propertyCache) {
141 propertyCache = QQmlPropertyCache::createStandalone(
142 &QQmlDMListAccessorData::staticMetaObject, model->modelItemRevision);
143 if (QQmlData *ddata = QQmlData::get(object,
true))
144 ddata->propertyCache = propertyCache;
147#if QT_VERSION >= QT_VERSION_CHECK(7
, 0
, 0
)
148 return &QQmlDMListAccessorData::staticMetaObject;
150 return const_cast<QMetaObject *>(&QQmlDMListAccessorData::staticMetaObject);
156 if (!data->cachedDataClean) {
157 createMissingProperties(&data->cachedData);
158 data->cachedDataClean =
true;