Clearing a view didn't reset content size.
authorMartin Jones <martin.jones@nokia.com>
Wed, 30 May 2012 02:58:04 +0000 (12:58 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 31 May 2012 00:23:04 +0000 (02:23 +0200)
Ensure that a valid contentHeight/contentWidth is set regardless
of whether there is a valid model.

Change-Id: I546683c7571a1379e3ca2ef285435ad48319e8e4
Reviewed-by: Bea Lam <bea.lam@nokia.com>
src/quick/items/qquickitemview.cpp
tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
tests/auto/quick/qquicklistview/tst_qquicklistview.cpp

index f7b28e1..1774931 100644 (file)
@@ -1714,13 +1714,12 @@ void QQuickItemViewPrivate::regenerate()
 void QQuickItemViewPrivate::updateViewport()
 {
     Q_Q(QQuickItemView);
-    if (isValid()) {
-        qreal extra = headerSize() + footerSize();
-        if (layoutOrientation() == Qt::Vertical)
-            q->setContentHeight(endPosition() - startPosition() + extra);
-        else
-            q->setContentWidth(endPosition() - startPosition() + extra);
-    }
+    qreal extra = headerSize() + footerSize();
+    qreal contentSize = isValid() ? (endPosition() - startPosition()) : 0.0;
+    if (layoutOrientation() == Qt::Vertical)
+        q->setContentHeight(contentSize + extra);
+    else
+        q->setContentWidth(contentSize + extra);
 }
 
 void QQuickItemViewPrivate::layout()
index 235c29f..9a84200 100644 (file)
@@ -1238,6 +1238,7 @@ void tst_QQuickGridView::clear()
     QVERIFY(gridview->currentItem() == 0);
     QVERIFY(gridview->contentY() == 0);
     QVERIFY(gridview->currentIndex() == -1);
+    QCOMPARE(gridview->contentHeight(), 0.0);
 
     // confirm sanity when adding an item to cleared list
     model.addItem("New", "1");
@@ -3146,6 +3147,10 @@ void tst_QQuickGridView::footer()
 
     // remove all items
     model.clear();
+    if (flow == QQuickGridView::FlowLeftToRight)
+        QTRY_COMPARE(gridview->contentHeight(), footer->height());
+    else
+        QTRY_COMPARE(gridview->contentWidth(), footer->width());
 
     QPointF posWhenNoItems(0, 0);
     if (layoutDirection == Qt::RightToLeft)
@@ -3360,6 +3365,10 @@ void tst_QQuickGridView::header()
     model.clear();
     QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
     QCOMPARE(header->pos(), initialHeaderPos); // header should stay where it is
+    if (flow == QQuickGridView::FlowLeftToRight)
+        QCOMPARE(gridview->contentHeight(), header->height());
+    else
+        QCOMPARE(gridview->contentWidth(), header->width());
 
     for (int i = 0; i < 30; i++)
         model.addItem("Item" + QString::number(i), "");
index 45337e2..4696e44 100644 (file)
@@ -1210,6 +1210,8 @@ void tst_QQuickListView::clear(const QUrl &source, QQuickItemView::VerticalLayou
         QTRY_COMPARE(listview->contentY(), -listview->height());
     QVERIFY(listview->currentIndex() == -1);
 
+    QCOMPARE(listview->contentHeight(), 0.0);
+
     // confirm sanity when adding an item to cleared list
     model.addItem("New", "1");
     QTRY_VERIFY(listview->count() == 1);
@@ -3343,6 +3345,10 @@ void tst_QQuickListView::header()
     model.clear();
     QTRY_COMPARE(listview->count(), model.count());
     QCOMPARE(header->pos(), initialHeaderPos); // header should stay where it is
+    if (orientation == QQuickListView::Vertical)
+        QCOMPARE(listview->contentHeight(), header->height());
+    else
+        QCOMPARE(listview->contentWidth(), header->width());
 
     for (int i = 0; i < 30; i++)
         model.addItem("Item" + QString::number(i), "");
@@ -3559,6 +3565,10 @@ void tst_QQuickListView::footer()
 
     // remove all items
     model.clear();
+    if (orientation == QQuickListView::Vertical)
+        QTRY_COMPARE(listview->contentHeight(), footer->height());
+    else
+        QTRY_COMPARE(listview->contentWidth(), footer->width());
 
     QPointF posWhenNoItems(0, 0);
     if (orientation == QQuickListView::Horizontal && layoutDirection == Qt::RightToLeft)