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;
60void VDMListDelegateDataType::emitAllSignals(QQmlDMListAccessorData *accessor)
const
62 for (
int i = propertyOffset, end = propertyCount(); i != end; ++i)
63 QMetaObject::activate(accessor,
this, i - propertyOffset,
nullptr);
64 emit accessor->modelDataChanged();
67int VDMListDelegateDataType::metaCall(
68 QObject *object, QMetaObject::Call call,
int id,
void **arguments)
70 Q_ASSERT(qobject_cast<QQmlDMListAccessorData *>(object));
71 QQmlDMListAccessorData *accessor =
static_cast<QQmlDMListAccessorData *>(object);
74 case QMetaObject::ReadProperty: {
75 if (id < propertyOffset)
78 QVariant *result =
static_cast<QVariant *>(arguments[0]);
79 const QByteArray name = property(id).name();
80 const QVariant data = accessor->index == -1
81 ? accessor->modelData()
82 : model->list.at(accessor->index);
83 *result = value(&data, name);
86 case QMetaObject::WriteProperty: {
87 if (id < propertyOffset)
90 const QVariant &argument = *
static_cast<QVariant *>(arguments[0]);
91 const QByteArray name = property(id).name();
92 QVariant data = accessor->index == -1
93 ? accessor->modelData()
94 : model->list.at(accessor->index);
95 if (argument == value(&data, name))
97 setValue(&data, name, argument);
98 if (accessor->index == -1) {
99 accessor->cachedData = data;
100 accessor->cachedDataClean =
false;
102 model->list.set(accessor->index, data);
103 accessor->metaType->emitModelChanged();
105 QMetaObject::activate(accessor,
this, id - propertyOffset,
nullptr);
106 emit accessor->modelDataChanged();
113 return accessor->qt_metacall(call, id, arguments);
116int VDMListDelegateDataType::createProperty(
const char *name,
const char *)
118 const int propertyIndex = propertyCount() - propertyOffset;
121 QQmlAdaptorModelEngineData::addProperty(
122 &builder, propertyIndex, name, QByteArrayLiteral(
"QVariant"),
123 model->delegateModelAccess != QQmlDelegateModel::ReadOnly);
125 metaObject.reset(builder.toMetaObject());
126 *
static_cast<QMetaObject *>(
this) = *metaObject;
127 return propertyIndex + propertyOffset;
131const QMetaObject *VDMListDelegateDataType::toDynamicMetaObject(QObject *object)
const
133QMetaObject *VDMListDelegateDataType::toDynamicMetaObject(QObject *object)
136 QQmlDMListAccessorData *data =
static_cast<QQmlDMListAccessorData *>(object);
137 if (!data->useStructuredModelData) {
141 if (!propertyCache) {
142 propertyCache = QQmlPropertyCache::createStandalone(
143 &QQmlDMListAccessorData::staticMetaObject, model->modelItemRevision);
144 if (QQmlData *ddata = QQmlData::get(object,
true))
145 ddata->propertyCache = propertyCache;
148#if QT_VERSION >= QT_VERSION_CHECK(7
, 0
, 0
)
149 return &QQmlDMListAccessorData::staticMetaObject;
151 return const_cast<QMetaObject *>(&QQmlDMListAccessorData::staticMetaObject);
157 if (!data->cachedDataClean) {
158 createMissingProperties(&data->cachedData);
159 data->cachedDataClean =
true;