diff options
author | Martin Jones <martin.jones@nokia.com> | 2011-11-09 15:34:01 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-10 04:30:30 +0100 |
commit | c2c19f2b8f1feb2d6785800c69f9f351bc317a05 (patch) | |
tree | 55de7adf2449e158fd3c0eaaf5dc4bf70a7c8e72 /src/declarative/items | |
parent | cc6e177d86751e44694e092a15de3260f67def45 (diff) |
PathView element's current item changes on insertion.
When inserting an item before the current item update the offset
to ensure the current item doesn't change.
Task-number: QTBUG-21320
Change-Id: I2375bc5098e7f83c33e7a0b123ed1b82f607055f
Reviewed-by: Bea Lam <bea.lam@nokia.com>
Diffstat (limited to 'src/declarative/items')
-rw-r--r-- | src/declarative/items/qquickpathview.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/declarative/items/qquickpathview.cpp b/src/declarative/items/qquickpathview.cpp index dc73bf2dd3..c4da6f5a4c 100644 --- a/src/declarative/items/qquickpathview.cpp +++ b/src/declarative/items/qquickpathview.cpp @@ -494,7 +494,7 @@ void QQuickPathView::setModel(const QVariant &model) disconnect(d->model, SIGNAL(createdItem(int,QQuickItem*)), this, SLOT(createdItem(int,QQuickItem*))); for (int i=0; i<d->items.count(); i++){ QQuickItem *p = d->items[i]; - d->model->release(p); + d->releaseItem(p); } d->items.clear(); } @@ -1537,9 +1537,12 @@ void QQuickPathView::modelUpdated(const QDeclarativeChangeSet &changeSet, bool r if (d->modelCount) { if (moveId == -1 && i.index <= d->currentIndex) { d->currentIndex += i.count; + currentChanged = true; } else if (d->offset != 0) { - if (moveId != -1 && moveId == i.moveId) + if (moveId != -1 && moveId == i.moveId) { d->currentIndex = i.index + moveOffset; + currentChanged = true; + } d->offset += i.count; d->offsetAdj += i.count; } @@ -1558,13 +1561,20 @@ void QQuickPathView::modelUpdated(const QDeclarativeChangeSet &changeSet, bool r d->tl.reset(d->moveOffset); } else if (removed) { d->regenerate(); - d->updateCurrent(); - if (!d->flicking && !d->moving && d->haveHighlightRange && d->highlightRangeMode == QQuickPathView::StrictlyEnforceRange) - d->snapToCurrent(); + if (!d->flicking && !d->moving && d->haveHighlightRange && d->highlightRangeMode == QQuickPathView::StrictlyEnforceRange) { + qreal targetOffset = qmlMod(d->modelCount - d->currentIndex, d->modelCount); + if (targetOffset != d->offset) + d->tl.set(d->moveOffset, targetOffset); + } } else if (inserted) { d->firstIndex = -1; d->updateMappedRange(); d->scheduleLayout(); + if (!d->flicking && !d->moving && d->haveHighlightRange && d->highlightRangeMode == QQuickPathView::StrictlyEnforceRange) { + qreal targetOffset = qmlMod(d->modelCount - d->currentIndex, d->modelCount); + if (targetOffset != d->offset) + d->tl.set(d->moveOffset, targetOffset); + } } if (changedOffset) emit offsetChanged(); @@ -1698,6 +1708,9 @@ void QQuickPathViewPrivate::snapToCurrent() qreal targetOffset = qmlMod(modelCount - currentIndex, modelCount); + if (offset == targetOffset) + return; + moveReason = Other; offsetAdj = 0.0; tl.reset(moveOffset); |