Only run populate for items in model at creation
authorBea Lam <bea.lam@nokia.com>
Fri, 20 Apr 2012 07:02:38 +0000 (17:02 +1000)
committerQt by Nokia <qt-info@nokia.com>
Mon, 23 Apr 2012 06:31:47 +0000 (08:31 +0200)
Don't run for items added in Component.onCompleted.

Change-Id: I58745ab989efae168d036875cb2fb88e3e2db0c3
Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com>
src/quick/items/qquickitemview.cpp
src/quick/items/qquickitemviewtransition.cpp
src/quick/items/qquickitemviewtransition_p.h
tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
tests/auto/quick/qquicklistview/tst_qquicklistview.cpp

index 95c7ed5..2a26e85 100644 (file)
@@ -1752,8 +1752,10 @@ void QQuickItemViewPrivate::layout()
     forceLayout = false;
 
     if (transitioner && transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) {
-        for (int i=0; i<visibleItems.count(); i++)
-            visibleItems.at(i)->transitionNextReposition(transitioner, QQuickItemViewTransitioner::PopulateTransition, true);
+        for (int i=0; i<visibleItems.count(); i++) {
+            if (!visibleItems.at(i)->transitionScheduledOrRunning())
+                visibleItems.at(i)->transitionNextReposition(transitioner, QQuickItemViewTransitioner::PopulateTransition, true);
+        }
     }
     layoutVisibleItems();
 
index cdc1c19..c680945 100644 (file)
@@ -189,8 +189,6 @@ bool QQuickItemViewTransitioner::canTransition(QQuickItemViewTransitioner::Trans
         return usePopulateTransition
                 && populateTransition && populateTransition->enabled();
     case AddTransition:
-        if (usePopulateTransition)
-            return false;
         if (asTarget)
             return addTransition && addTransition->enabled();
         else
@@ -437,7 +435,7 @@ bool QQuickItemViewTransitionableItem::prepareTransition(QQuickItemViewTransitio
     }
     case QQuickItemViewTransitioner::PopulateTransition:
     {
-        doTransition = true;
+        doTransition = viewBounds.intersects(QRectF(nextTransitionTo.x(), nextTransitionTo.y(), item->width(), item->height()));
         break;
     }
     case QQuickItemViewTransitioner::AddTransition:
index 0ec87ba..76f5cc9 100644 (file)
@@ -90,6 +90,8 @@ public:
     const QList<QObject *> &targetItems(QQuickItemViewTransitioner::TransitionType type) const;
 
     inline void setPopulateTransitionEnabled(bool b) { usePopulateTransition = b; }
+    inline bool populateTransitionEnabled() const { return usePopulateTransition; }
+
     inline void setChangeListener(QQuickItemViewTransitionChangeListener *obj) { changeListener = obj; }
 
     QSet<QQuickItemViewTransitionJob *> runningJobs;
index f5019fc..d39fbe5 100644 (file)
@@ -4531,37 +4531,37 @@ void tst_QQuickGridView::populateTransitions()
     QQuickItem *contentItem = gridview->contentItem();
     QVERIFY(contentItem);
 
-    if (staticallyPopulate || dynamicallyPopulate) {
-        // check the populate transition is run
-        if (usePopulateTransition) {
-            QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), 19);
-        } else {
-            QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
-            QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), 0);
-        }
+    // check the populate transition is run
+    if (staticallyPopulate && usePopulateTransition) {
+        QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), 18);
         QTRY_COMPARE(gridview->property("countAddTransitions").toInt(), 0);
+    } else if (dynamicallyPopulate) {
+        QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), 0);
+        QTRY_COMPARE(gridview->property("countAddTransitions").toInt(), 18);
     } else {
         QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
+        QCOMPARE(gridview->property("countPopulateTransitions").toInt(), 0);
+        QCOMPARE(gridview->property("countAddTransitions").toInt(), 0);
     }
 
     int itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
-    if (usePopulateTransition)
-        QCOMPARE(itemCount, gridview->property("countPopulateTransitions").toInt());
     for (int i=0; i < model.count() && i < itemCount; ++i) {
         QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
         QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));
-        QCOMPARE(item->x(), (i%3)*80.0);
-        QCOMPARE(item->y(), (i/3)*60.0);
+        QTRY_COMPARE(item->x(), (i%3)*80.0);
+        QTRY_COMPARE(item->y(), (i/3)*60.0);
         QQuickText *name = findItem<QQuickText>(contentItem, "textName", i);
         QVERIFY(name != 0);
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
+    gridview->setProperty("countPopulateTransitions", 0);
+    gridview->setProperty("countAddTransitions", 0);
+
     // add an item and check this is done with add transition, not populate
     model.insertItem(0, "another item", "");
     QTRY_COMPARE(gridview->property("countAddTransitions").toInt(), 1);
-    QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(),
-                 (usePopulateTransition && (staticallyPopulate || dynamicallyPopulate)) ? 19 : 0);
+    QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), 0);
 
     // clear the model
     canvas->rootContext()->setContextProperty("testModel", QVariant());
@@ -4577,17 +4577,15 @@ void tst_QQuickGridView::populateTransitions()
     canvas->rootContext()->setContextProperty("testModel", &model);
     QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
 
-    QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 19 : 0);
+    QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 18 : 0);
     QTRY_COMPARE(gridview->property("countAddTransitions").toInt(), 0);
 
     itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
-    if (usePopulateTransition)
-        QCOMPARE(itemCount, gridview->property("countPopulateTransitions").toInt());
     for (int i=0; i < model.count() && i < itemCount; ++i) {
         QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
         QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));
-        QCOMPARE(item->x(), (i%3)*80.0);
-        QCOMPARE(item->y(), (i/3)*60.0);
+        QTRY_COMPARE(item->x(), (i%3)*80.0);
+        QTRY_COMPARE(item->y(), (i/3)*60.0);
         QQuickText *name = findItem<QQuickText>(contentItem, "textName", i);
         QVERIFY(name != 0);
         QTRY_COMPARE(name->text(), model.name(i));
@@ -4597,17 +4595,15 @@ void tst_QQuickGridView::populateTransitions()
     gridview->setProperty("countPopulateTransitions", 0);
     gridview->setProperty("countAddTransitions", 0);
     model.reset();
-    QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 19 : 0);
+    QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 18 : 0);
     QTRY_COMPARE(gridview->property("countAddTransitions").toInt(), 0);
 
     itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
-    if (usePopulateTransition)
-        QCOMPARE(itemCount, gridview->property("countPopulateTransitions").toInt());
     for (int i=0; i < model.count() && i < itemCount; ++i) {
         QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
         QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));
-        QCOMPARE(item->x(), (i%3)*80.0);
-        QCOMPARE(item->y(), (i/3)*60.0);
+        QTRY_COMPARE(item->x(), (i%3)*80.0);
+        QTRY_COMPARE(item->y(), (i/3)*60.0);
         QQuickText *name = findItem<QQuickText>(contentItem, "textName", i);
         QVERIFY(name != 0);
         QTRY_COMPARE(name->text(), model.name(i));
index 3369cf7..e4d81d9 100644 (file)
@@ -5260,22 +5260,19 @@ void tst_QQuickListView::populateTransitions()
     QQuickItem *contentItem = listview->contentItem();
     QVERIFY(contentItem);
 
-    if (staticallyPopulate || dynamicallyPopulate) {
-        // check the populate transition is run
-        if (usePopulateTransition) {
-            QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), 17);
-        } else {
-            QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false);
-            QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), 0);
-        }
+    if (staticallyPopulate && usePopulateTransition) {
+        QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), 16);
         QTRY_COMPARE(listview->property("countAddTransitions").toInt(), 0);
+    } else if (dynamicallyPopulate) {
+        QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), 0);
+        QTRY_COMPARE(listview->property("countAddTransitions").toInt(), 16);
     } else {
         QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false);
+        QCOMPARE(listview->property("countPopulateTransitions").toInt(), 0);
+        QCOMPARE(listview->property("countAddTransitions").toInt(), 0);
     }
 
     int itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
-    if (usePopulateTransition)
-        QCOMPARE(itemCount, listview->property("countPopulateTransitions").toInt());
     for (int i=0; i < model.count() && i < itemCount; ++i) {
         QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
         QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));
@@ -5286,11 +5283,13 @@ void tst_QQuickListView::populateTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    // add an item and check this is done with add trantion, not populate
+    listview->setProperty("countPopulateTransitions", 0);
+    listview->setProperty("countAddTransitions", 0);
+
+    // add an item and check this is done with add transition, not populate
     model.insertItem(0, "another item", "");
     QTRY_COMPARE(listview->property("countAddTransitions").toInt(), 1);
-    QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(),
-                 (usePopulateTransition && (staticallyPopulate || dynamicallyPopulate)) ? 17 : 0);
+    QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), 0);
 
     // clear the model
     canvas->rootContext()->setContextProperty("testModel", QVariant());
@@ -5304,12 +5303,10 @@ void tst_QQuickListView::populateTransitions()
     for (int i = 0; i < 30; i++)
         model.addItem("item" + QString::number(i), "");
     canvas->rootContext()->setContextProperty("testModel", &model);
-    QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 17 : 0);
+    QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 16 : 0);
     QTRY_COMPARE(listview->property("countAddTransitions").toInt(), 0);
 
     itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
-    if (usePopulateTransition)
-        QCOMPARE(itemCount, listview->property("countPopulateTransitions").toInt());
     for (int i=0; i < model.count() && i < itemCount; ++i) {
         QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
         QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));
@@ -5324,12 +5321,10 @@ void tst_QQuickListView::populateTransitions()
     listview->setProperty("countPopulateTransitions", 0);
     listview->setProperty("countAddTransitions", 0);
     model.reset();
-    QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 17 : 0);
+    QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 16 : 0);
     QTRY_COMPARE(listview->property("countAddTransitions").toInt(), 0);
 
     itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
-    if (usePopulateTransition)
-        QCOMPARE(itemCount, listview->property("countPopulateTransitions").toInt());
     for (int i=0; i < model.count() && i < itemCount; ++i) {
         QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
         QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));