summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qmllist.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/qml/qmllist.h')
-rw-r--r--src/declarative/qml/qmllist.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/declarative/qml/qmllist.h b/src/declarative/qml/qmllist.h
index ad2d874..b1a81c4 100644
--- a/src/declarative/qml/qmllist.h
+++ b/src/declarative/qml/qmllist.h
@@ -119,6 +119,72 @@ class Qml_ProxyList_ ##ListName : public QmlList<ListType> \
friend class Qml_ProxyList_ ##ListName ; \
Qml_ProxyList_##ListName ListName;
+template<typename T>
+struct QmlListProperty {
+ typedef void (*AppendFunction)(QmlListProperty<T> *, T*);
+ typedef int (*CountFunction)(QmlListProperty<T> *);
+ typedef T *(*AtFunction)(QmlListProperty<T> *, int);
+ typedef void (*ClearFunction)(QmlListProperty<T> *);
+ typedef void (*InsertFunction)(QmlListProperty<T> *, int, T *);
+ typedef void (*RemoveAtFunction)(QmlListProperty<T> *, int);
+
+ QmlListProperty()
+ : version(1), object(0), data(0), append(0), count(0), at(0), clear(0), insert(0), removeAt(0) {}
+ QmlListProperty(QObject *o, QList<T *> &list)
+ : version(1), object(o), data(&list), append(qlist_append), count(qlist_count), at(qlist_at),
+ clear(qlist_clear), insert(qlist_insert), removeAt(qlist_removeAt) {}
+ QmlListProperty(QObject *o, void *d, AppendFunction a, CountFunction c = 0, AtFunction t = 0,
+ ClearFunction l = 0, InsertFunction i = 0, RemoveAtFunction r = 0)
+ : version(1), object(o), data(d), append(a), count(c), at(t), clear(l), insert(i), removeAt(r) {}
+
+ bool operator==(const QmlListProperty &o) const {
+ return version == o.version &&
+ object == o.object &&
+ data == o.data &&
+ append == o.append &&
+ count == o.count &&
+ at == o.at &&
+ clear == o.clear &&
+ insert == o.insert &&
+ removeAt == o.removeAt;
+ }
+
+ int version;
+
+ QObject *object;
+ void *data;
+
+ AppendFunction append;
+
+ CountFunction count;
+ AtFunction at;
+
+ ClearFunction clear;
+
+ InsertFunction insert;
+ RemoveAtFunction removeAt;
+
+private:
+ static void qlist_append(QmlListProperty *p, T *v) {
+ ((QList<T *> *)p->data)->append(v);
+ }
+ static int qlist_count(QmlListProperty *p) {
+ return ((QList<T *> *)p->data)->count();
+ }
+ static T *qlist_at(QmlListProperty *p, int idx) {
+ return ((QList<T *> *)p->data)->at(idx);
+ }
+ static void qlist_clear(QmlListProperty *p) {
+ return ((QList<T *> *)p->data)->clear();
+ }
+ static void qlist_insert(QmlListProperty *p, int idx, T *v) {
+ return ((QList<T *> *)p->data)->insert(idx, v);
+ }
+ static void qlist_removeAt(QmlListProperty *p, int idx) {
+ return ((QList<T *> *)p->data)->removeAt(idx);
+ }
+};
+
QT_END_NAMESPACE
QT_END_HEADER