aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquickitemview.cpp7
-rw-r--r--src/quick/items/qquickitemview_p_p.h1
-rw-r--r--src/quick/items/qquicklistview.cpp7
-rw-r--r--tests/auto/quick/qquicklistview/data/addTransitions.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/displacedTransitions.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/header.qml1
-rw-r--r--tests/auto/quick/qquicklistview/data/listview-enforcerange.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/listview-noCurrent.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/listview-sections-package.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/listview-sections_delegate.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/margins.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/moveTransitions.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/multipleDisplaced.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/multipleTransitions.qml1
-rw-r--r--tests/auto/quick/qquicklistview/data/populateTransitions.qml2
-rw-r--r--tests/auto/quick/qquicklistview/data/removeTransitions.qml2
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp61
17 files changed, 68 insertions, 32 deletions
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
index d9ff024d9f..d7b984788e 100644
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -2065,7 +2065,7 @@ void QQuickItemViewPrivate::removeItem(FxViewItem *item, const QQmlChangeSet::Re
{
if (removeResult->visiblePos.isValid()) {
if (item->position() < removeResult->visiblePos)
- removeResult->sizeChangesBeforeVisiblePos += item->size();
+ updateSizeChangesBeforeVisiblePos(item, removeResult);
else
removeResult->sizeChangesAfterVisiblePos += item->size();
}
@@ -2080,6 +2080,11 @@ void QQuickItemViewPrivate::removeItem(FxViewItem *item, const QQmlChangeSet::Re
removeResult->changedFirstItem = true;
}
+void QQuickItemViewPrivate::updateSizeChangesBeforeVisiblePos(FxViewItem *item, ChangeResult *removeResult)
+{
+ removeResult->sizeChangesBeforeVisiblePos += item->size();
+}
+
void QQuickItemViewPrivate::repositionFirstItem(FxViewItem *prevVisibleItemsFirst,
qreal prevVisibleItemsFirstPos,
FxViewItem *prevFirstVisible,
diff --git a/src/quick/items/qquickitemview_p_p.h b/src/quick/items/qquickitemview_p_p.h
index c528fa3b2c..e0f08fd50f 100644
--- a/src/quick/items/qquickitemview_p_p.h
+++ b/src/quick/items/qquickitemview_p_p.h
@@ -211,6 +211,7 @@ public:
bool applyModelChanges(ChangeResult *insertionResult, ChangeResult *removalResult);
bool applyRemovalChange(const QQmlChangeSet::Remove &removal, ChangeResult *changeResult, int *removedCount);
void removeItem(FxViewItem *item, const QQmlChangeSet::Remove &removal, ChangeResult *removeResult);
+ virtual void updateSizeChangesBeforeVisiblePos(FxViewItem *item, ChangeResult *removeResult);
void repositionFirstItem(FxViewItem *prevVisibleItemsFirst, qreal prevVisibleItemsFirstPos,
FxViewItem *prevFirstVisible, ChangeResult *insertionResult, ChangeResult *removalResult);
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp
index 424b5ac385..1b46d79326 100644
--- a/src/quick/items/qquicklistview.cpp
+++ b/src/quick/items/qquicklistview.cpp
@@ -98,6 +98,7 @@ public:
virtual void repositionPackageItemAt(QQuickItem *item, int index);
virtual void resetFirstItemPosition(qreal pos = 0.0);
virtual void adjustFirstItem(qreal forwards, qreal backwards, int);
+ virtual void updateSizeChangesBeforeVisiblePos(FxViewItem *item, ChangeResult *removeResult);
virtual void createHighlight();
virtual void updateHighlight();
@@ -846,6 +847,12 @@ void QQuickListViewPrivate::adjustFirstItem(qreal forwards, qreal backwards, int
static_cast<FxListItemSG*>(visibleItems.first())->setPosition(visibleItems.first()->position() + diff);
}
+void QQuickListViewPrivate::updateSizeChangesBeforeVisiblePos(FxViewItem *item, ChangeResult *removeResult)
+{
+ if (item != visibleItems.first())
+ QQuickItemViewPrivate::updateSizeChangesBeforeVisiblePos(item, removeResult);
+}
+
void QQuickListViewPrivate::createHighlight()
{
Q_Q(QQuickListView);
diff --git a/tests/auto/quick/qquicklistview/data/addTransitions.qml b/tests/auto/quick/qquicklistview/data/addTransitions.qml
index 69e6ba1eea..88db36760f 100644
--- a/tests/auto/quick/qquicklistview/data/addTransitions.qml
+++ b/tests/auto/quick/qquicklistview/data/addTransitions.qml
@@ -62,7 +62,7 @@ Rectangle {
anchors.centerIn: parent
width: 240
height: 320
- cacheBuffer: 0
+ cacheBuffer: 60
model: testModel
delegate: myDelegate
diff --git a/tests/auto/quick/qquicklistview/data/displacedTransitions.qml b/tests/auto/quick/qquicklistview/data/displacedTransitions.qml
index d83ccfedf4..37c9e1e588 100644
--- a/tests/auto/quick/qquicklistview/data/displacedTransitions.qml
+++ b/tests/auto/quick/qquicklistview/data/displacedTransitions.qml
@@ -69,7 +69,7 @@ Rectangle {
anchors.centerIn: parent
width: 240
height: 320
- cacheBuffer: 0
+ cacheBuffer: 60
model: testModel
delegate: myDelegate
diff --git a/tests/auto/quick/qquicklistview/data/header.qml b/tests/auto/quick/qquicklistview/data/header.qml
index 076bf9cb97..1cc4ae09ee 100644
--- a/tests/auto/quick/qquicklistview/data/header.qml
+++ b/tests/auto/quick/qquicklistview/data/header.qml
@@ -26,7 +26,6 @@ Rectangle {
focus: true
width: initialViewWidth
height: initialViewHeight
- cacheBuffer: 0
snapMode: ListView.SnapToItem
model: testModel
delegate: myDelegate
diff --git a/tests/auto/quick/qquicklistview/data/listview-enforcerange.qml b/tests/auto/quick/qquicklistview/data/listview-enforcerange.qml
index f1052b1482..4ccf3088b0 100644
--- a/tests/auto/quick/qquicklistview/data/listview-enforcerange.qml
+++ b/tests/auto/quick/qquicklistview/data/listview-enforcerange.qml
@@ -45,7 +45,7 @@ Rectangle {
objectName: "list"
width: 240
height: 320
- cacheBuffer: 0
+ cacheBuffer: 60
model: testModel
delegate: myDelegate
highlight: myHighlight
diff --git a/tests/auto/quick/qquicklistview/data/listview-noCurrent.qml b/tests/auto/quick/qquicklistview/data/listview-noCurrent.qml
index fa7430c4cb..e094b888ab 100644
--- a/tests/auto/quick/qquicklistview/data/listview-noCurrent.qml
+++ b/tests/auto/quick/qquicklistview/data/listview-noCurrent.qml
@@ -43,7 +43,7 @@ Rectangle {
currentIndex: -1
width: 240
height: 320
- cacheBuffer: 0
+ cacheBuffer: 60
delegate: myDelegate
highlightMoveVelocity: 1000
model: testModel
diff --git a/tests/auto/quick/qquicklistview/data/listview-sections-package.qml b/tests/auto/quick/qquicklistview/data/listview-sections-package.qml
index e0daf50b32..8bad73b5f6 100644
--- a/tests/auto/quick/qquicklistview/data/listview-sections-package.qml
+++ b/tests/auto/quick/qquicklistview/data/listview-sections-package.qml
@@ -68,6 +68,6 @@ Rectangle {
height: 320
model: visualModel.parts.package
section.property: "number"
- cacheBuffer: 0
+ cacheBuffer: 60
}
}
diff --git a/tests/auto/quick/qquicklistview/data/listview-sections_delegate.qml b/tests/auto/quick/qquicklistview/data/listview-sections_delegate.qml
index d82ff4c63a..7245025bac 100644
--- a/tests/auto/quick/qquicklistview/data/listview-sections_delegate.qml
+++ b/tests/auto/quick/qquicklistview/data/listview-sections_delegate.qml
@@ -56,7 +56,7 @@ Rectangle {
objectName: "list"
width: 240
height: 320
- cacheBuffer: 0
+ cacheBuffer: 60
model: testModel
delegate: myDelegate
section.property: sectionProperty
diff --git a/tests/auto/quick/qquicklistview/data/margins.qml b/tests/auto/quick/qquicklistview/data/margins.qml
index cf6a56c720..3e4defaffb 100644
--- a/tests/auto/quick/qquicklistview/data/margins.qml
+++ b/tests/auto/quick/qquicklistview/data/margins.qml
@@ -42,7 +42,7 @@ Rectangle {
topMargin: 30
bottomMargin: 50
highlightMoveVelocity: 100000
- cacheBuffer: 0
+ cacheBuffer: 60
model: testModel
delegate: myDelegate
}
diff --git a/tests/auto/quick/qquicklistview/data/moveTransitions.qml b/tests/auto/quick/qquicklistview/data/moveTransitions.qml
index c4dce99208..dbbb4ebe75 100644
--- a/tests/auto/quick/qquicklistview/data/moveTransitions.qml
+++ b/tests/auto/quick/qquicklistview/data/moveTransitions.qml
@@ -62,7 +62,7 @@ Rectangle {
anchors.centerIn: parent
width: 240
height: 320
- cacheBuffer: 0
+ cacheBuffer: 60
model: testModel
delegate: myDelegate
diff --git a/tests/auto/quick/qquicklistview/data/multipleDisplaced.qml b/tests/auto/quick/qquicklistview/data/multipleDisplaced.qml
index 5893c30447..e036822980 100644
--- a/tests/auto/quick/qquicklistview/data/multipleDisplaced.qml
+++ b/tests/auto/quick/qquicklistview/data/multipleDisplaced.qml
@@ -44,7 +44,7 @@ Rectangle {
anchors.centerIn: parent
width: 240
height: 320
- cacheBuffer: 0
+ cacheBuffer: 60
model: testModel
delegate: myDelegate
diff --git a/tests/auto/quick/qquicklistview/data/multipleTransitions.qml b/tests/auto/quick/qquicklistview/data/multipleTransitions.qml
index 4fcc80be2d..c0e888c6c6 100644
--- a/tests/auto/quick/qquicklistview/data/multipleTransitions.qml
+++ b/tests/auto/quick/qquicklistview/data/multipleTransitions.qml
@@ -53,7 +53,6 @@ Rectangle {
anchors.centerIn: parent
width: 240
height: 320
- cacheBuffer: 0
model: testModel
delegate: myDelegate
diff --git a/tests/auto/quick/qquicklistview/data/populateTransitions.qml b/tests/auto/quick/qquicklistview/data/populateTransitions.qml
index 84b5b6bc1f..735314524f 100644
--- a/tests/auto/quick/qquicklistview/data/populateTransitions.qml
+++ b/tests/auto/quick/qquicklistview/data/populateTransitions.qml
@@ -52,7 +52,7 @@ Rectangle {
anchors.centerIn: parent
width: 240
height: 320
- cacheBuffer: 0
+ cacheBuffer: 60
model: testModel
delegate: myDelegate
diff --git a/tests/auto/quick/qquicklistview/data/removeTransitions.qml b/tests/auto/quick/qquicklistview/data/removeTransitions.qml
index 861cf42d94..4a34d4b585 100644
--- a/tests/auto/quick/qquicklistview/data/removeTransitions.qml
+++ b/tests/auto/quick/qquicklistview/data/removeTransitions.qml
@@ -64,7 +64,7 @@ Rectangle {
anchors.centerIn: parent
width: 240
height: 320
- cacheBuffer: 0
+ cacheBuffer: 60
model: testModel
delegate: myDelegate
diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
index d207a7eadc..a0045a244f 100644
--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
+++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
@@ -736,6 +736,8 @@ void tst_QQuickListView::insertBeforeVisible()
{
QFETCH(int, insertIndex);
QFETCH(int, insertCount);
+ QFETCH(int, removeIndex);
+ QFETCH(int, removeCount);
QFETCH(int, cacheBuffer);
QQuickText *name;
@@ -775,14 +777,19 @@ void tst_QQuickListView::insertBeforeVisible()
QVERIFY(item);
QCOMPARE(item->y(), listview->contentY());
- QList<QPair<QString, QString> > newData;
- for (int i=0; i<insertCount; i++)
- newData << qMakePair(QString("value %1").arg(i), QString::number(i));
- model.insertItems(insertIndex, newData);
- QTRY_COMPARE(listview->property("count").toInt(), model.count());
+ if (removeCount > 0)
+ model.removeItems(removeIndex, removeCount);
+
+ if (insertCount > 0) {
+ QList<QPair<QString, QString> > newData;
+ for (int i=0; i<insertCount; i++)
+ newData << qMakePair(QString("value %1").arg(i), QString::number(i));
+ model.insertItems(insertIndex, newData);
+ QTRY_COMPARE(listview->property("count").toInt(), model.count());
+ }
// now, moving to the top of the view should position the inserted items correctly
- int itemsOffsetAfterMove = -(insertCount * 20);
+ int itemsOffsetAfterMove = (removeCount - insertCount) * 20;
listview->setCurrentIndex(0);
QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false);
QTRY_COMPARE(listview->currentIndex(), 0);
@@ -807,23 +814,41 @@ void tst_QQuickListView::insertBeforeVisible_data()
{
QTest::addColumn<int>("insertIndex");
QTest::addColumn<int>("insertCount");
+ QTest::addColumn<int>("removeIndex");
+ QTest::addColumn<int>("removeCount");
QTest::addColumn<int>("cacheBuffer");
- QTest::newRow("insert 1 at 0, 0 buffer") << 0 << 1 << 0;
- QTest::newRow("insert 1 at 0, 100 buffer") << 0 << 1 << 100;
- QTest::newRow("insert 1 at 0, 500 buffer") << 0 << 1 << 500;
+ QTest::newRow("insert 1 at 0, 0 buffer") << 0 << 1 << 0 << 0 << 0;
+ QTest::newRow("insert 1 at 0, 100 buffer") << 0 << 1 << 0 << 0 << 100;
+ QTest::newRow("insert 1 at 0, 500 buffer") << 0 << 1 << 0 << 0 << 500;
+
+ QTest::newRow("insert 1 at 1, 0 buffer") << 1 << 1 << 0 << 0 << 0;
+ QTest::newRow("insert 1 at 1, 100 buffer") << 1 << 1 << 0 << 0 << 100;
+ QTest::newRow("insert 1 at 1, 500 buffer") << 1 << 1 << 0 << 0 << 500;
+
+ QTest::newRow("insert multiple at 0, 0 buffer") << 0 << 3 << 0 << 0 << 0;
+ QTest::newRow("insert multiple at 0, 100 buffer") << 0 << 3 << 0 << 0 << 100;
+ QTest::newRow("insert multiple at 0, 500 buffer") << 0 << 3 << 0 << 0 << 500;
+
+ QTest::newRow("insert multiple at 1, 0 buffer") << 1 << 3 << 0 << 0 << 0;
+ QTest::newRow("insert multiple at 1, 100 buffer") << 1 << 3 << 0 << 0 << 100;
+ QTest::newRow("insert multiple at 1, 500 buffer") << 1 << 3 << 0 << 0 << 500;
+
+ QTest::newRow("remove 1 at 0, 0 buffer") << 0 << 0 << 0 << 1 << 0;
+ QTest::newRow("remove 1 at 0, 100 buffer") << 0 << 0 << 0 << 1 << 100;
+ QTest::newRow("remove 1 at 0, 500 buffer") << 0 << 0 << 0 << 1 << 500;
- QTest::newRow("insert 1 at 1, 0 buffer") << 1 << 1 << 0;
- QTest::newRow("insert 1 at 1, 100 buffer") << 1 << 1 << 100;
- QTest::newRow("insert 1 at 1, 500 buffer") << 1 << 1 << 500;
+ QTest::newRow("remove 1 at 1, 0 buffer") << 0 << 0 << 1 << 1 << 0;
+ QTest::newRow("remove 1 at 1, 100 buffer") << 0 << 0 << 1 << 1 << 100;
+ QTest::newRow("remove 1 at 1, 500 buffer") << 0 << 0 << 1 << 1 << 500;
- QTest::newRow("insert multiple at 0, 0 buffer") << 0 << 3 << 0;
- QTest::newRow("insert multiple at 0, 100 buffer") << 0 << 3 << 100;
- QTest::newRow("insert multiple at 0, 500 buffer") << 0 << 3 << 500;
+ QTest::newRow("remove multiple at 0, 0 buffer") << 0 << 0 << 0 << 3 << 0;
+ QTest::newRow("remove multiple at 0, 100 buffer") << 0 << 0 << 0 << 3 << 100;
+ QTest::newRow("remove multiple at 0, 500 buffer") << 0 << 0 << 0 << 3 << 500;
- QTest::newRow("insert multiple at 1, 0 buffer") << 1 << 3 << 0;
- QTest::newRow("insert multiple at 1, 100 buffer") << 1 << 3 << 100;
- QTest::newRow("insert multiple at 1, 500 buffer") << 1 << 3 << 500;
+ QTest::newRow("remove multiple at 1, 0 buffer") << 0 << 0 << 1 << 3 << 0;
+ QTest::newRow("remove multiple at 1, 100 buffer") << 0 << 0 << 1 << 3 << 100;
+ QTest::newRow("remove multiple at 1, 500 buffer") << 0 << 0 << 1 << 3 << 500;
}
template <class T>