diff options
author | Andrew den Exter <[email protected]> | 2012-03-16 15:37:14 +1000 |
---|---|---|
committer | Qt by Nokia <[email protected]> | 2012-05-21 07:51:57 +0200 |
commit | f242e50a9f60ec09b415c8ae922c4b26f4d22009 (patch) | |
tree | 0ac991d68b182a8c9575a1f05d001b90a981a8ae /src/quick/items/qquickvisualdatamodel_p_p.h | |
parent | a96705e349c51215b6e451147b4c2de49ba5a107 (diff) |
Refactor QQuickVisualAdaptorModel to reduce memory consumption.
Don't inherit from QObject.
Use a single QQmlGuard for all model types, and reset the model
property if the model is deleted.
Construct v8 object template on demand.
Store model type specific data in a separate class that is allocated
on demand.
Change-Id: Id4f7b235741555b6ffba3fcf11727d85d6920e9e
Reviewed-by: Martin Jones <[email protected]>
Diffstat (limited to 'src/quick/items/qquickvisualdatamodel_p_p.h')
-rw-r--r-- | src/quick/items/qquickvisualdatamodel_p_p.h | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/quick/items/qquickvisualdatamodel_p_p.h b/src/quick/items/qquickvisualdatamodel_p_p.h index 22d65af141..ecfe1da9d0 100644 --- a/src/quick/items/qquickvisualdatamodel_p_p.h +++ b/src/quick/items/qquickvisualdatamodel_p_p.h @@ -44,6 +44,8 @@ #include "qquickvisualdatamodel_p.h" +#include "qquickvisualadaptormodel_p.h" + #include <QtQml/qqmlcontext.h> #include <QtQml/qqmlincubator.h> @@ -105,8 +107,7 @@ class QQuickVisualDataModelItem : public QObject, public QV8ObjectResource Q_PROPERTY(QObject *model READ modelObject CONSTANT) V8_RESOURCE_TYPE(VisualDataItemType) public: - QQuickVisualDataModelItem( - QQuickVisualDataModelItemMetaType *metaType, QQuickVisualAdaptorModel *model, int modelIndex); + QQuickVisualDataModelItem(QQuickVisualDataModelItemMetaType *metaType, int modelIndex); ~QQuickVisualDataModelItem(); void referenceObject() { ++objectRef; } @@ -129,15 +130,14 @@ public: virtual v8::Handle<v8::Value> get() { return engine->newQObject(this); } virtual void setValue(const QString &role, const QVariant &value) { Q_UNUSED(role); Q_UNUSED(value); } - virtual bool resolveIndex(int) { return false; } + virtual bool resolveIndex(const QQuickVisualAdaptorModel &, int) { return false; } Q_SIGNALS: void modelIndexChanged(); public: - QQuickVisualDataModelItemMetaType * const metaType; - QQmlGuard<QQuickVisualAdaptorModel> model; QQmlGuard<QObject> object; + QQuickVisualDataModelItemMetaType * const metaType; QQuickVisualDataModelAttached *attached; v8::Persistent<v8::Object> indexHandle; v8::Persistent<v8::Value> modelHandle; @@ -277,16 +277,24 @@ public: void incubatorStatusChanged(QVDMIncubationTask *incubationTask, QQmlIncubator::Status status); void setInitialState(QVDMIncubationTask *incubationTask, QObject *o); - QQuickVisualAdaptorModel *m_adaptorModel; + QQuickVisualAdaptorModel m_adaptorModel; + QQuickListCompositor m_compositor; QQmlComponent *m_delegate; QQuickVisualDataModelItemMetaType *m_cacheMetaType; - QQmlGuard<QQmlContext> m_context; - - QList<QQuickVisualDataModelItem *> m_cache; + QQmlContext *m_context; QQuickVisualDataModelParts *m_parts; QQuickVisualDataGroupEmitterList m_pendingParts; - QQuickListCompositor m_compositor; + QList<QQuickVisualDataModelItem *> m_cache; + QList<QVDMIncubationTask *> m_finishedIncubating; + QList<QByteArray> m_watchedRoles; + + QString m_filterGroup; + + + int m_count; + int m_groupCount; + QQuickListCompositor::Group m_compositorGroup; bool m_complete : 1; bool m_delegateValidated : 1; @@ -294,9 +302,6 @@ public: bool m_transaction : 1; bool m_incubatorCleanupScheduled : 1; - QString m_filterGroup; - QList<QByteArray> watchedRoles; - union { struct { QQuickVisualDataGroup *m_cacheItems; @@ -305,9 +310,6 @@ public: }; QQuickVisualDataGroup *m_groups[Compositor::MaximumGroupCount]; }; - int m_groupCount; - - QList<QVDMIncubationTask *> m_finishedIncubating; }; class QQuickVisualPartsModel : public QQuickVisualModel, public QQuickVisualDataGroupEmitter @@ -329,6 +331,7 @@ public: QQuickItem *item(int index, bool asynchronous=false); ReleaseFlags release(QQuickItem *item); QString stringValue(int index, const QString &role); + QList<QByteArray> watchedRoles() const { return m_watchedRoles; } void setWatchedRoles(QList<QByteArray> roles); int indexOf(QQuickItem *item, QObject *objectContext) const; |