aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/items
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2011-11-09 15:34:01 +1000
committerQt by Nokia <qt-info@nokia.com>2011-11-10 04:30:30 +0100
commitc2c19f2b8f1feb2d6785800c69f9f351bc317a05 (patch)
tree55de7adf2449e158fd3c0eaaf5dc4bf70a7c8e72 /src/declarative/items
parentcc6e177d86751e44694e092a15de3260f67def45 (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.cpp23
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);