aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickvisualdatamodel_p_p.h
diff options
context:
space:
mode:
authorAndrew den Exter <[email protected]>2012-03-16 15:37:14 +1000
committerQt by Nokia <[email protected]>2012-05-21 07:51:57 +0200
commitf242e50a9f60ec09b415c8ae922c4b26f4d22009 (patch)
tree0ac991d68b182a8c9575a1f05d001b90a981a8ae /src/quick/items/qquickvisualdatamodel_p_p.h
parenta96705e349c51215b6e451147b4c2de49ba5a107 (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.h35
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;