diff options
Diffstat (limited to 'src/declarative/qml/qmllist.h')
-rw-r--r-- | src/declarative/qml/qmllist.h | 66 |
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 |