FxViewItem *snapItemAt(qreal pos) const;
int snapIndex() const;
+ void resetColumns();
+
virtual bool addVisibleItems(qreal fillFrom, qreal fillTo, bool doBuffer);
virtual bool removeNonVisibleItems(qreal bufferFrom, qreal bufferTo);
- virtual void visibleItemsChanged();
virtual FxViewItem *newViewItem(int index, QQuickItem *item);
virtual void repositionPackageItemAt(QQuickItem *item, int index);
return index;
}
+void QQuickGridViewPrivate::resetColumns()
+{
+ Q_Q(QQuickGridView);
+ qreal length = flow == QQuickGridView::LeftToRight ? q->width() : q->height();
+ columns = (int)qMax((length + colSize()/2) / colSize(), qreal(1.));
+}
+
FxViewItem *QQuickGridViewPrivate::newViewItem(int modelIndex, QQuickItem *item)
{
Q_Q(QQuickGridView);
return changed;
}
-void QQuickGridViewPrivate::visibleItemsChanged()
-{
- updateHeader();
- updateFooter();
- updateViewport();
-}
-
void QQuickGridViewPrivate::updateViewport()
{
- Q_Q(QQuickGridView);
- qreal length = flow == QQuickGridView::LeftToRight ? q->width() : q->height();
- columns = (int)qMax((length + colSize()/2) / colSize(), qreal(1.));
+ resetColumns();
QQuickItemViewPrivate::updateViewport();
}
event->ignore();
QQuickItemView::keyPressEvent(event);
}
+
+void QQuickGridView::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+{
+ Q_D(QQuickGridView);
+ d->resetColumns();
+ QQuickItemView::geometryChanged(newGeometry, oldGeometry);
+}
+
/*!
\qmlmethod QtQuick2::GridView::moveCurrentIndexUp()
void header();
void header_data();
void resizeViewAndRepaint();
+ void changeColumnCount();
void indexAt_itemAt_data();
void indexAt_itemAt();
void onAdd();
QDeclarativeContext *ctxt = canvas->rootContext();
ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("initialWidth", 240);
ctxt->setContextProperty("initialHeight", 100);
canvas->setSource(testFileUrl("resizeview.qml"));
delete canvas;
}
+void tst_QQuickGridView::changeColumnCount()
+{
+ TestModel model;
+ for (int i = 0; i < 40; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QQuickView *canvas = createView();
+ QDeclarativeContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("initialWidth", 100);
+ ctxt->setContextProperty("initialHeight", 320);
+ canvas->setSource(testFileUrl("resizeview.qml"));
+ canvas->show();
+ qApp->processEvents();
+
+ QQuickGridView *gridview = findItem<QQuickGridView>(canvas->rootObject(), "grid");
+ QTRY_VERIFY(gridview != 0);
+ QQuickItem *contentItem = gridview->contentItem();
+ QTRY_VERIFY(contentItem != 0);
+ QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
+
+ // a single column of 6 items are visible
+ int itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
+ QCOMPARE(itemCount, 6);
+ 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(), 0.0);
+ QCOMPARE(item->y(), qreal(i*60));
+ }
+
+ // now 6x3 grid is visible, plus 1 extra below for refill
+ gridview->setWidth(240);
+ QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
+ itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
+ QCOMPARE(itemCount, 6*3 + 1);
+ 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(), qreal((i%3)*80));
+ QCOMPARE(item->y(), qreal((i/3)*60));
+ }
+
+ // back to single column
+ gridview->setWidth(100);
+ QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
+ itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
+ QCOMPARE(itemCount, 6);
+ 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(), 0.0);
+ QCOMPARE(item->y(), qreal(i*60));
+ }
+
+ delete canvas;
+}
+
void tst_QQuickGridView::indexAt_itemAt_data()
{
QTest::addColumn<qreal>("x");