aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickvisualadaptormodel.cpp
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2012-05-21 13:04:06 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-30 06:01:46 +0200
commit486ec88d2b88378768487a12dcbf6493c33d5699 (patch)
treecdbe03a466cf9cd64233582c830e597b984e390d /src/quick/items/qquickvisualadaptormodel.cpp
parent47eb68ab0b8d9ffd357cbad2f74b63ee2cf00dad (diff)
Use a shared meta-object for VisualDataModel list context objects.
The objectDestroyed() function on QAbstractDynamicMetaObject makes it possible to reference count dynamic meta objects so there is no longer a need to construct an instance per item. Change-Id: I6f32b803b97db015212284718239dc3062dcefe7 Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick/items/qquickvisualadaptormodel.cpp')
-rw-r--r--src/quick/items/qquickvisualadaptormodel.cpp48
1 files changed, 19 insertions, 29 deletions
diff --git a/src/quick/items/qquickvisualadaptormodel.cpp b/src/quick/items/qquickvisualadaptormodel.cpp
index 99c44e329c..fa88932faa 100644
--- a/src/quick/items/qquickvisualadaptormodel.cpp
+++ b/src/quick/items/qquickvisualadaptormodel.cpp
@@ -90,7 +90,6 @@ public:
QQuickVisualDataModelItemMetaType *metaType,
VDMModelDelegateDataType *dataType,
int index);
- ~QQuickVDMCachedModelData();
int metaCall(QMetaObject::Call call, int id, void **arguments);
@@ -108,7 +107,10 @@ public:
QVector<QVariant> cachedData;
};
-class VDMModelDelegateDataType : public QQmlRefCount, public QQuickVisualAdaptorModel::Accessors
+class VDMModelDelegateDataType
+ : public QQmlRefCount
+ , public QQuickVisualAdaptorModel::Accessors
+ , public QAbstractDynamicMetaObject
{
public:
VDMModelDelegateDataType(QQuickVisualAdaptorModel *model)
@@ -204,6 +206,18 @@ public:
}
}
+ // QAbstractDynamicMetaObject
+
+ void objectDestroyed(QObject *)
+ {
+ release();
+ }
+
+ int metaCall(QObject *object, QMetaObject::Call call, int id, void **arguments)
+ {
+ return static_cast<QQuickVDMCachedModelData *>(object)->metaCall(call, id, arguments);
+ }
+
v8::Persistent<v8::ObjectTemplate> constructor;
QList<int> propertyRoles;
QList<int> watchedRoleIds;
@@ -217,23 +231,6 @@ public:
bool hasModelData;
};
-
-class QQuickVDMCachedModelDataMetaObject : public QAbstractDynamicMetaObject
-{
-public:
- QQuickVDMCachedModelDataMetaObject(QQuickVDMCachedModelData *data)
- : m_data(data)
- {
- }
-
- int metaCall(QMetaObject::Call call, int id, void **arguments)
- {
- return m_data->metaCall(call, id, arguments);
- }
-
- QQuickVDMCachedModelData *m_data;
-};
-
QQuickVDMCachedModelData::QQuickVDMCachedModelData(
QQuickVisualDataModelItemMetaType *metaType, VDMModelDelegateDataType *dataType, int index)
: QQuickVisualDataModelItem(metaType, index)
@@ -242,11 +239,7 @@ QQuickVDMCachedModelData::QQuickVDMCachedModelData(
if (index == -1)
cachedData.resize(type->hasModelData ? 1 : type->propertyRoles.count());
- QQuickVDMCachedModelDataMetaObject *metaObject = new QQuickVDMCachedModelDataMetaObject(this);
-
- QObjectPrivate *op = QObjectPrivate::get(this);
- *static_cast<QMetaObject *>(metaObject) = *type->metaObject;
- op->metaObject = metaObject;
+ QObjectPrivate::get(this)->metaObject = type;
type->addref();
@@ -255,11 +248,6 @@ QQuickVDMCachedModelData::QQuickVDMCachedModelData(
qmldata->propertyCache->addref();
}
-QQuickVDMCachedModelData::~QQuickVDMCachedModelData()
-{
- type->release();
-}
-
int QQuickVDMCachedModelData::metaCall(QMetaObject::Call call, int id, void **arguments)
{
if (call == QMetaObject::ReadProperty && id >= type->propertyOffset) {
@@ -542,6 +530,7 @@ public:
}
metaObject = builder.toMetaObject();
+ *static_cast<QMetaObject *>(this) = *metaObject;
propertyCache = new QQmlPropertyCache(engine, metaObject);
}
};
@@ -657,6 +646,7 @@ public:
}
metaObject = builder.toMetaObject();
+ *static_cast<QMetaObject *>(this) = *metaObject;
propertyCache = new QQmlPropertyCache(engine, metaObject);
}
};