diff options
author | Marco Bubke <marco.bubke@nokia.com> | 2010-06-09 07:39:47 (GMT) |
---|---|---|
committer | Marco Bubke <marco.bubke@nokia.com> | 2010-06-09 07:43:00 (GMT) |
commit | 8c08c737837389f5ff2641219eb901ad217d3f24 (patch) | |
tree | 1ac71fe1f382d0dade05d97c3793dc373565c315 /src | |
parent | c5de4176dac960d8f7c6d2d77b0d8bf3c7311da9 (diff) | |
download | Qt-8c08c737837389f5ff2641219eb901ad217d3f24.zip Qt-8c08c737837389f5ff2641219eb901ad217d3f24.tar.gz Qt-8c08c737837389f5ff2641219eb901ad217d3f24.tar.bz2 |
Add count, at and clear to flickableData
Reviewed-by: Aaron Kennedy
Diffstat (limited to 'src')
-rw-r--r-- | src/declarative/graphicsitems/qdeclarativeflickable.cpp | 42 | ||||
-rw-r--r-- | src/declarative/graphicsitems/qdeclarativeflickable_p_p.h | 3 |
2 files changed, 44 insertions, 1 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 10dc0f8..c487715 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -1015,10 +1015,50 @@ void QDeclarativeFlickablePrivate::data_append(QDeclarativeListProperty<QObject> o->setParent(prop->object); } +int QDeclarativeFlickablePrivate::data_count(QDeclarativeListProperty<QObject> *property) +{ + QDeclarativeItem *viewport = static_cast<QDeclarativeFlickablePrivate*>(property->data)->viewport; + return viewport->childItems().count() + viewport->children().count(); +} + +QObject *QDeclarativeFlickablePrivate::data_at(QDeclarativeListProperty<QObject> *property, int index) +{ + QDeclarativeItem *viewport = static_cast<QDeclarativeFlickablePrivate*>(property->data)->viewport; + + int childItemCount = viewport->childItems().count(); + + if (index < 0) + return 0; + + if (index < childItemCount) { + return viewport->childItems().at(index)->toGraphicsObject(); + } else { + return viewport->children().at(index - childItemCount); + } + + return 0; +} + +void QDeclarativeFlickablePrivate::data_clear(QDeclarativeListProperty<QObject> *property) +{ + QDeclarativeItem *viewport = static_cast<QDeclarativeFlickablePrivate*>(property->data)->viewport; + + const QList<QGraphicsItem*> graphicsItems = viewport->childItems(); + for (int i = 0; i < graphicsItems.count(); i++) + viewport->scene()->removeItem(graphicsItems[i]); + + const QList<QObject*> objects = viewport->children(); + for (int i = 0; i < objects.count(); i++) + objects[i]->setParent(0); +} + QDeclarativeListProperty<QObject> QDeclarativeFlickable::flickableData() { Q_D(QDeclarativeFlickable); - return QDeclarativeListProperty<QObject>(this, (void *)d, QDeclarativeFlickablePrivate::data_append); + return QDeclarativeListProperty<QObject>(this, (void *)d, QDeclarativeFlickablePrivate::data_append, + QDeclarativeFlickablePrivate::data_count, + QDeclarativeFlickablePrivate::data_at, + QDeclarativeFlickablePrivate::data_clear); } QDeclarativeListProperty<QGraphicsObject> QDeclarativeFlickable::flickableChildren() diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h index 66d2678..0b80b1f 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h @@ -171,6 +171,9 @@ public: // flickableData property static void data_append(QDeclarativeListProperty<QObject> *, QObject *); + static int data_count(QDeclarativeListProperty<QObject> *); + static QObject * data_at(QDeclarativeListProperty<QObject> *, int); + static void data_clear(QDeclarativeListProperty<QObject> *); }; class QDeclarativeFlickableVisibleArea : public QObject |