diff options
author | Martin Jones <martin.jones@nokia.com> | 2009-11-27 01:49:37 (GMT) |
---|---|---|
committer | Martin Jones <martin.jones@nokia.com> | 2009-11-27 01:49:37 (GMT) |
commit | 97a5db1cd10a230198cb61a0a52e79c4cdbb6fac (patch) | |
tree | 371953c6646b4d2511e514bf3e63e13932887c02 /src/declarative/graphicsitems | |
parent | 8689f95793486d9c19f5b310d87f68e6fd8ace12 (diff) | |
download | Qt-97a5db1cd10a230198cb61a0a52e79c4cdbb6fac.zip Qt-97a5db1cd10a230198cb61a0a52e79c4cdbb6fac.tar.gz Qt-97a5db1cd10a230198cb61a0a52e79c4cdbb6fac.tar.bz2 |
Add Listview.positionViewAtIndex(int) method.
Diffstat (limited to 'src/declarative/graphicsitems')
-rw-r--r-- | src/declarative/graphicsitems/qmlgraphicslistview.cpp | 41 | ||||
-rw-r--r-- | src/declarative/graphicsitems/qmlgraphicslistview_p.h | 1 |
2 files changed, 40 insertions, 2 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicslistview.cpp b/src/declarative/graphicsitems/qmlgraphicslistview.cpp index e05ae66..0224465 100644 --- a/src/declarative/graphicsitems/qmlgraphicslistview.cpp +++ b/src/declarative/graphicsitems/qmlgraphicslistview.cpp @@ -1603,7 +1603,7 @@ qreal QmlGraphicsListView::maxYExtent() const if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) extent = -(d->positionAt(count()-1) - d->highlightRangeEnd); else - extent = -(d->endPosition() - height()); + extent = -(d->endPosition() - height() + 1); qreal minY = minYExtent(); if (extent > minY) extent = minY; @@ -1631,7 +1631,7 @@ qreal QmlGraphicsListView::maxXExtent() const if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) extent = -(d->positionAt(count()-1) - d->highlightRangeEnd); else - extent = -(d->endPosition() - width()); + extent = -(d->endPosition() - width() + 1); qreal minX = minXExtent(); if (extent > minX) extent = minX; @@ -1706,6 +1706,43 @@ void QmlGraphicsListView::decrementCurrentIndex() } } +/*! + \qmlmethod ListView::positionViewAtIndex(int index) + + Positions the view such that the \a index is at the top (or left for horizontal orientation) of the view. + If positioning the view at the index would cause empty space to be displayed at + the end of the view, the view will be positioned at the end. +*/ +void QmlGraphicsListView::positionViewAtIndex(int index) +{ + Q_D(QmlGraphicsListView); + if (index < 0 || index >= d->model->count()) + return; + + FxListItem *item = d->visibleItem(index); + if (item) { + // Already created - just move to top of view + int pos = item->position(); + if (item->position() > -maxYExtent()) + pos = -maxYExtent(); + d->setPosition(pos); + } else { + int pos = d->positionAt(index); + // save the currently visible items in case any of them end up visible again + QList<FxListItem*> oldVisible = d->visibleItems; + d->visibleItems.clear(); + d->visiblePos = pos; + d->visibleIndex = index; + d->setPosition(pos); + if (d->position() > -maxYExtent()) + d->setPosition(-maxYExtent()); + // now release the reference to all the old visible items. + for (int i = 0; i < oldVisible.count(); ++i) + d->releaseItem(oldVisible.at(i)); + } +} + + void QmlGraphicsListView::componentComplete() { Q_D(QmlGraphicsListView); diff --git a/src/declarative/graphicsitems/qmlgraphicslistview_p.h b/src/declarative/graphicsitems/qmlgraphicslistview_p.h index b8a6e1f..795c766 100644 --- a/src/declarative/graphicsitems/qmlgraphicslistview_p.h +++ b/src/declarative/graphicsitems/qmlgraphicslistview_p.h @@ -147,6 +147,7 @@ public: public Q_SLOTS: void incrementCurrentIndex(); void decrementCurrentIndex(); + void positionViewAtIndex(int index); Q_SIGNALS: void countChanged(); |