summaryrefslogtreecommitdiff
path: root/src/declarative/items/qquickpathview.cpp
diff options
context:
space:
mode:
authorCharles Yin <charles.yin@nokia.com>2011-11-14 10:35:51 +1000
committerCharles Yin <charles.yin@nokia.com>2011-11-14 10:35:51 +1000
commitfc54db69809a16f613f65a2761fab55d5911b02c (patch)
treea00d9284eb13f81f5b195f8a4c6cfee03edb4f17 /src/declarative/items/qquickpathview.cpp
parent35275892ca8a7046451b8e943985dd779fee4794 (diff)
parent2557ff5a940242b398dee65c3c79cec088164e32 (diff)
downloadqtdeclarative-fc54db69809a16f613f65a2761fab55d5911b02c.tar.gz
Merge branch 'master' into animation-refactor
Conflicts: tools/qmlviewer/qdeclarativetester.cpp tools/qmlviewer/qmlruntime.cpp Change-Id: I48f0eb02df27e4b524f45927939b4c257452b0aa
Diffstat (limited to 'src/declarative/items/qquickpathview.cpp')
-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);