@@ -1711,9 +1711,54 @@ private Q_SLOTS:
17111711 QVERIFY(QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
17121712 }
17131713
1714+ void testSectionItemCullOnFirstSectionItemTopEdge()
1715+ {
1716+ changeContentY(50);
1717+
1718+ verifyItem(0, 0., 190., false, "Agressive", false);
1719+ verifyItem(1, 190., 240., false, "Regular", false);
1720+ verifyItem(2, 430., 390., false, "Mild", false);
1721+ QCOMPARE(lvwph->m_minYExtent, 0.);
1722+ QCOMPARE(lvwph->m_clipItem->y(), 50.);
1723+ QCOMPARE(lvwph->m_clipItem->clip(), false);
1724+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
1725+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
1726+ QCOMPARE(lvwph->contentY(), 50.);
1727+ QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1728+ QVERIFY(QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
1729+ }
1730+
1731+ void testSectionItemCullOnSecondSectionItemTopEdge()
1732+ {
1733+ QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 50), Q_ARG(QVariant, "Agressive"));
1734+ QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 50), Q_ARG(QVariant, "Agressive"));
1735+
1736+ changeContentY(140);
1737+
1738+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
1739+ QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1740+ verifyItem(0, -90., 90., true, "Agressive", true);
1741+ verifyItem(1, 0., 50., false, QString(), false);
1742+ verifyItem(2, 50., 150., false, QString(), false);
1743+ verifyItem(3, 200., 240., false, "Regular", false);
1744+ verifyItem(4, 440., 390., false, "Mild", false);
1745+ QCOMPARE(lvwph->m_minYExtent, 0.);
1746+ QCOMPARE(lvwph->m_clipItem->y(), 140.);
1747+ QCOMPARE(lvwph->m_clipItem->clip(), false);
1748+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
1749+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
1750+ QCOMPARE(lvwph->contentY(), 140.);
1751+ QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1752+ QVERIFY(!QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
1753+ QCOMPARE(section(lvwph->m_topSectionItem), QString("Agressive"));
1754+ QCOMPARE(sectionDelegateIndex(lvwph->m_topSectionItem), 0);
1755+ QCOMPARE(lvwph->m_topSectionItem->y(), 0.);
1756+ }
1757+
17141758 void testMaximizeVisibleArea()
17151759 {
1716− lvwph->maximizeVisibleArea(2);
1760+ bool res = lvwph->maximizeVisibleArea(2);
1761+ QVERIFY(res);
17171762 QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
17181763
17191764 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
@@ -1737,12 +1782,14 @@ private Q_SLOTS:
17371782
17381783 void testMaximizeVisibleAreaVisibleItems()
17391784 {
1740− lvwph->maximizeVisibleArea(0);
1785+ bool res = lvwph->maximizeVisibleArea(0);
1786+ QVERIFY(res);
17411787 QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
17421788
17431789 verifyInitialTopPosition();
17441790
1745− lvwph->maximizeVisibleArea(1);
1791+ res = lvwph->maximizeVisibleArea(1);
1792+ QVERIFY(res);
17461793 QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
17471794
17481795 verifyInitialTopPosition();
@@ -1750,17 +1797,20 @@ private Q_SLOTS:
17501797
17511798 void testMaximizeVisibleAreaInvalidIndexes()
17521799 {
1753− lvwph->maximizeVisibleArea(-1);
1800+ bool res = lvwph->maximizeVisibleArea(-1);
1801+ QVERIFY(!res);
17541802 QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
17551803
17561804 verifyInitialTopPosition();
17571805
1758− lvwph->maximizeVisibleArea(1000);
1806+ res = lvwph->maximizeVisibleArea(1000);
1807+ QVERIFY(!res);
17591808 QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
17601809
17611810 verifyInitialTopPosition();
17621811
1763− lvwph->maximizeVisibleArea(3);
1812+ res = lvwph->maximizeVisibleArea(3);
1813+ QVERIFY(!res);
17641814 QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
17651815
17661816 verifyInitialTopPosition();
@@ -1771,7 +1821,8 @@ private Q_SLOTS:
17711821 model->setProperty(2, "size", 4000);
17721822 verifyItem(2, 480, 4040., false, "Mild", false);
17731823
1774− lvwph->maximizeVisibleArea(2);
1824+ bool res = lvwph->maximizeVisibleArea(2);
1825+ QVERIFY(res);
17751826 QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
17761827
17771828 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
@@ -1792,7 +1843,8 @@ private Q_SLOTS:
17921843 void testMaximizeVisibleAreaScrollDown()
17931844 {
17941845 changeContentY(350);
1795− lvwph->maximizeVisibleArea(1);
1846+ bool res = lvwph->maximizeVisibleArea(1);
1847+ QVERIFY(res);
17961848 QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
17971849
17981850 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
@@ -1815,7 +1867,8 @@ private Q_SLOTS:
18151867 {
18161868 model->setProperty(1, "size", 1000);
18171869 changeContentY(1150);
1818− lvwph->maximizeVisibleArea(1);
1870+ bool res = lvwph->maximizeVisibleArea(1);
1871+ QVERIFY(res);
18191872 QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
18201873
18211874 QTRY_COMPARE(lvwph->m_visibleItems.count(), 2);
@@ -1856,7 +1909,8 @@ private Q_SLOTS:
18561909 QCOMPARE(sectionDelegateIndex(lvwph->m_topSectionItem), 1);
18571910 QCOMPARE(lvwph->m_topSectionItem->y(), 0.);
18581911
1859− lvwph->maximizeVisibleArea(1);
1912+ bool res = lvwph->maximizeVisibleArea(1);
1913+ QVERIFY(res);
18601914 QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
18611915
18621916 QTRY_COMPARE(lvwph->m_visibleItems.count(), 2);
@@ -1876,6 +1930,109 @@ private Q_SLOTS:
18761930 QCOMPARE(lvwph->m_topSectionItem->y(), 0.);
18771931 }
18781932
1933+ void testMaximizeVisibleAreaTopWithHalfPageHeader()
1934+ {
1935+ changeContentY(430);
1936+ changeContentY(-30);
1937+
1938+ bool res = lvwph->maximizeVisibleArea(1);
1939+ QVERIFY(res);
1940+ QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
1941+
1942+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1943+ QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1944+ verifyItem(0, -190., 190., true, "Agressive", true);
1945+ verifyItem(1, 0., 240., false, "Regular", false);
1946+ verifyItem(2, 240, 390., false, "Mild", false);
1947+ verifyItem(3, 630, 390., true, "Bold", true);
1948+ QCOMPARE(lvwph->m_minYExtent, 0.);
1949+ QCOMPARE(lvwph->m_clipItem->y(), 240.);
1950+ QCOMPARE(lvwph->m_clipItem->clip(), false);
1951+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
1952+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
1953+ QCOMPARE(lvwph->contentY(), 240.);
1954+ QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1955+ QVERIFY(QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
1956+ }
1957+
1958+ void testMaximizeVisibleAreaBottomWithHalfPageHeader()
1959+ {
1960+ changeContentY(430);
1961+ changeContentY(-30);
1962+
1963+ bool res = lvwph->maximizeVisibleArea(3);
1964+ QVERIFY(res);
1965+ QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
1966+
1967+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1968+ QCOMPARE(lvwph->m_firstVisibleIndex, 1);
1969+ verifyItem(0, -478., 240., true, "Regular", true);
1970+ verifyItem(1, -238., 390., false, "Mild", true);
1971+ verifyItem(2, 152, 390., false, "Bold", false);
1972+ verifyItem(3, 542, 350., true, QString(), true);
1973+ QCOMPARE(lvwph->m_minYExtent, 152.5);
1974+ QCOMPARE(lvwph->m_clipItem->y(), 718.);
1975+ QCOMPARE(lvwph->m_clipItem->clip(), false);
1976+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
1977+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
1978+ QCOMPARE(lvwph->contentY(), 718.);
1979+ QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1980+ QVERIFY(!QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
1981+ QCOMPARE(section(lvwph->m_topSectionItem), QString("Mild"));
1982+ QCOMPARE(sectionDelegateIndex(lvwph->m_topSectionItem), 2);
1983+ QCOMPARE(lvwph->m_topSectionItem->y(), 0.);
1984+ }
1985+
1986+ void testMaximizeVisibleAreaTopSecondSectionItemStickySection()
1987+ {
1988+ QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 100), Q_ARG(QVariant, "Agressive"));
1989+ changeContentY(250);
1990+ bool res = lvwph->maximizeVisibleArea(1);
1991+ QVERIFY(res);
1992+ QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
1993+
1994+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1995+ QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1996+ verifyItem(0, -100., 140., false, "Agressive", true);
1997+ verifyItem(1, 40., 150., false, QString(), true);
1998+ verifyItem(2, 190, 240., false, "Regular", false);
1999+ verifyItem(3, 430, 390., false, "Mild", false);
2000+ QCOMPARE(lvwph->m_minYExtent, 0.);
2001+ QCOMPARE(lvwph->m_clipItem->y(), 150.);
2002+ QCOMPARE(lvwph->m_clipItem->clip(), false);
2003+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
2004+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
2005+ QCOMPARE(lvwph->contentY(), 150.);
2006+ QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
2007+ QVERIFY(!QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
2008+ QCOMPARE(section(lvwph->m_topSectionItem), QString("Agressive"));
2009+ QCOMPARE(sectionDelegateIndex(lvwph->m_topSectionItem), 0);
2010+ QCOMPARE(lvwph->m_topSectionItem->y(), 0.);
2011+
2012+ changeContentY(20);
2013+ res = lvwph->maximizeVisibleArea(1);
2014+ QVERIFY(res);
2015+ QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
2016+
2017+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
2018+ QCOMPARE(lvwph->m_firstVisibleIndex, 0);
2019+ verifyItem(0, -100., 140., false, "Agressive", true);
2020+ verifyItem(1, 40., 150., false, QString(), true);
2021+ verifyItem(2, 190, 240., false, "Regular", false);
2022+ verifyItem(3, 430, 390., false, "Mild", false);
2023+ QCOMPARE(lvwph->m_minYExtent, 0.);
2024+ QCOMPARE(lvwph->m_clipItem->y(), 150.);
2025+ QCOMPARE(lvwph->m_clipItem->clip(), false);
2026+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
2027+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
2028+ QCOMPARE(lvwph->contentY(), 150.);
2029+ QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
2030+ QVERIFY(!QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
2031+ QCOMPARE(section(lvwph->m_topSectionItem), QString("Agressive"));
2032+ QCOMPARE(sectionDelegateIndex(lvwph->m_topSectionItem), 0);
2033+ QCOMPARE(lvwph->m_topSectionItem->y(), 0.);
2034+ }
2035+
18792036private:
18802037 QQuickView *view;
18812038 ListViewWithPageHeader *lvwph;