169 int metaCall(QObject *o, QMetaObject::Call call,
int id,
void **arguments)
override
174 static const int objectPropertyOffset = QObject::staticMetaObject.propertyCount();
175 if (id >= m_type->propertyOffset
176 && (call == QMetaObject::ReadProperty
177 || call == QMetaObject::WriteProperty
178 || call == QMetaObject::ResetProperty)) {
179 if (QObject *modelData = m_data->modelData()) {
180 QMetaObject::metacall(
181 modelData, call, id - m_type->propertyOffset + objectPropertyOffset,
185 }
else if (id >= m_type->signalOffset && call == QMetaObject::InvokeMetaMethod) {
186 QMetaObject::activate(m_data,
this, id - m_type->signalOffset,
nullptr);
189 return m_data->qt_metacall(call, id, arguments);
195 QObject *modelData =
m_data->modelData();
198 const QMetaObject *metaObject = modelData->metaObject();
199 static const int objectPropertyOffset = QObject::staticMetaObject.propertyCount();
201 const int previousPropertyCount = propertyCount() - propertyOffset();
202 int propertyIndex = metaObject->indexOfProperty(name);
203 if (propertyIndex == -1)
205 if (previousPropertyCount + objectPropertyOffset == metaObject->propertyCount())
209 VDMObjectDelegateDataType *type =
m_type;
214 const int previousMethodCount = methodCount();
215 int notifierId = previousMethodCount - methodOffset();
216 for (
int propertyId = previousPropertyCount; propertyId < metaObject->propertyCount() - objectPropertyOffset; ++propertyId) {
217 QMetaProperty property = metaObject->property(propertyId + objectPropertyOffset);
218 QMetaPropertyBuilder propertyBuilder;
219 if (property.hasNotifySignal()) {
220 m_type->builder.addSignal(
"__" + QByteArray::number(propertyId) +
"()");
221 propertyBuilder =
m_type->builder.addProperty(property.name(), property.typeName(), notifierId);
224 propertyBuilder =
m_type->builder.addProperty(property.name(), property.typeName());
226 const bool modelWritable = m_type->model->delegateModelAccess != QQmlDelegateModel::ReadOnly;
227 propertyBuilder.setWritable(modelWritable && property.isWritable());
228 propertyBuilder.setResettable(modelWritable && property.isResettable());
229 propertyBuilder.setConstant(property.isConstant());
232 m_type->metaObject.reset(
m_type->builder.toMetaObject());
233 *
static_cast<QMetaObject *>(
this) = *
m_type->metaObject;
235 notifierId = previousMethodCount;
236 for (
int i = previousPropertyCount; i < metaObject->propertyCount() - objectPropertyOffset; ++i) {
237 QMetaProperty property = metaObject->property(i + objectPropertyOffset);
238 if (property.hasNotifySignal()) {
239 QQmlPropertyPrivate::connect(
240 modelData, property.notifySignalIndex(), m_data, notifierId);