diff options
author | Charles Yin <charles.yin@nokia.com> | 2011-11-14 10:35:51 +1000 |
---|---|---|
committer | Charles Yin <charles.yin@nokia.com> | 2011-11-14 10:35:51 +1000 |
commit | fc54db69809a16f613f65a2761fab55d5911b02c (patch) | |
tree | a00d9284eb13f81f5b195f8a4c6cfee03edb4f17 /src/declarative/items/qquickpathview.cpp | |
parent | 35275892ca8a7046451b8e943985dd779fee4794 (diff) | |
parent | 2557ff5a940242b398dee65c3c79cec088164e32 (diff) | |
download | qtdeclarative-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.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); |