diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-12-30 13:20:24 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-01-16 15:46:28 +0000 |
commit | 8eada7ae7d41a2d93142ea1a6454ab2bbb0998ed (patch) | |
tree | 7cb0ecfa2f7036b4a25a0e147d07313d7fa64a40 /tests/auto/quick/qquicklistview/tst_qquicklistview.cpp | |
parent | 09dc5a0c4c08e8f13ddc81d82a9fc2d2af047165 (diff) |
ListView: allow flicking to both directions
Previously flicking was restricted to the orientation of the ListView.
[ChangeLog][QtQuick][ListView] Made it possible to enable horizontal
flicking in a vertical ListView, and vice versa. The only thing apps
must do is to specify the desired flick direction and the content
width (vertical ListView) or content height (horizontal ListView),
which is not calculated by ListView.
Change-Id: Ic370e57f5d18679940d48e7a2c20c200b2ef36d1
Task-number: QTBUG-52553
Task-number: QTBUG-56501
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'tests/auto/quick/qquicklistview/tst_qquicklistview.cpp')
-rw-r--r-- | tests/auto/quick/qquicklistview/tst_qquicklistview.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 4816d9c341..ff06c1e1a4 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -53,6 +53,7 @@ Q_DECLARE_METATYPE(Qt::LayoutDirection) Q_DECLARE_METATYPE(QQuickItemView::VerticalLayoutDirection) Q_DECLARE_METATYPE(QQuickItemView::PositionMode) Q_DECLARE_METATYPE(QQuickListView::Orientation) +Q_DECLARE_METATYPE(QQuickFlickable::FlickableDirection) Q_DECLARE_METATYPE(Qt::Key) using namespace QQuickViewTestUtil; @@ -205,6 +206,8 @@ private slots: void multipleDisplaced(); void flickBeyondBounds(); + void flickBothDirections(); + void flickBothDirections_data(); void destroyItemOnCreation(); void parentBinding(); @@ -7123,6 +7126,82 @@ void tst_QQuickListView::flickBeyondBounds() } } +void tst_QQuickListView::flickBothDirections() +{ + QFETCH(bool, initValues); + QFETCH(QQuickListView::Orientation, orientation); + QFETCH(QQuickFlickable::FlickableDirection, flickableDirection); + QFETCH(qreal, contentWidth); + QFETCH(qreal, contentHeight); + QFETCH(QPointF, targetPos); + + QQuickView *window = getView(); + QQuickViewTestUtil::moveMouseAway(window); + + QQmlContext *ctxt = window->rootContext(); + ctxt->setContextProperty("initialOrientation", initValues ? orientation : QQuickListView::Vertical); + ctxt->setContextProperty("initialFlickableDirection", initValues ? flickableDirection : QQuickFlickable::VerticalFlick); + ctxt->setContextProperty("initialContentWidth", initValues ? contentWidth : -1); + ctxt->setContextProperty("initialContentHeight", initValues ? contentHeight : -1); + + window->setSource(testFileUrl("flickBothDirections.qml")); + window->show(); + QVERIFY(QTest::qWaitForWindowActive(window)); + + QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); + QVERIFY(listview); + + if (!initValues) { + listview->setOrientation(orientation); + listview->setFlickableDirection(flickableDirection); + if (contentWidth > 0) + listview->setContentWidth(contentWidth); + if (contentHeight > 0) + listview->setContentHeight(contentHeight); + } + + flick(window, QPoint(100, 100), QPoint(25, 25), 50); + QVERIFY(listview->isMoving()); + QTRY_VERIFY(!listview->isMoving()); + QCOMPARE(listview->contentX(), targetPos.x()); + QCOMPARE(listview->contentY(), targetPos.y()); +} + +void tst_QQuickListView::flickBothDirections_data() +{ + QTest::addColumn<bool>("initValues"); + QTest::addColumn<QQuickListView::Orientation>("orientation"); + QTest::addColumn<QQuickFlickable::FlickableDirection>("flickableDirection"); + QTest::addColumn<qreal>("contentWidth"); + QTest::addColumn<qreal>("contentHeight"); + QTest::addColumn<QPointF>("targetPos"); + + // model: 20 + // listview: 100x100 + // vertical delegate: 120x20 -> contentHeight: 20x20=400 + // horizontal delegate: 10x110 -> contentWidth: 20x10=200 + + QTest::newRow("init:vertical,-1") << true << QQuickListView::Vertical << QQuickFlickable::VerticalFlick << -1. << -1. << QPointF(0, 300); + QTest::newRow("init:vertical,120") << true << QQuickListView::Vertical << QQuickFlickable::VerticalFlick<< 120. << -1. << QPointF(0, 300); + QTest::newRow("init:vertical,auto,-1") << true << QQuickListView::Vertical << QQuickFlickable::AutoFlickDirection << -1. << -1. << QPointF(0, 300); + QTest::newRow("init:vertical,auto,120") << true << QQuickListView::Vertical << QQuickFlickable::AutoFlickDirection << 120. << -1. << QPointF(20, 300); + + QTest::newRow("completed:vertical,-1") << false << QQuickListView::Vertical << QQuickFlickable::VerticalFlick << -1. << -1. << QPointF(0, 300); + QTest::newRow("completed:vertical,120") << false << QQuickListView::Vertical << QQuickFlickable::VerticalFlick << 120. << -1. << QPointF(0, 300); + QTest::newRow("completed:vertical,auto,-1") << false << QQuickListView::Vertical << QQuickListView::AutoFlickDirection << -1. << -1. << QPointF(0, 300); + QTest::newRow("completed:vertical,auto,120") << false << QQuickListView::Vertical << QQuickListView::AutoFlickDirection << 120. << -1. << QPointF(20, 300); + + QTest::newRow("init:horizontal,-1") << true << QQuickListView::Horizontal << QQuickFlickable::HorizontalFlick << -1. << -1. << QPointF(100, 0); + QTest::newRow("init:horizontal,110") << true << QQuickListView::Horizontal << QQuickFlickable::HorizontalFlick <<-1. << 110. << QPointF(100, 0); + QTest::newRow("init:horizontal,auto,-1") << true << QQuickListView::Horizontal << QQuickListView::AutoFlickDirection << -1. << -1. << QPointF(100, 0); + QTest::newRow("init:horizontal,auto,110") << true << QQuickListView::Horizontal << QQuickListView::AutoFlickDirection << -1. << 110. << QPointF(100, 10); + + QTest::newRow("completed:horizontal,-1") << false << QQuickListView::Horizontal << QQuickFlickable::HorizontalFlick << -1. << -1. << QPointF(100, 0); + QTest::newRow("completed:horizontal,110") << false << QQuickListView::Horizontal << QQuickFlickable::HorizontalFlick << -1. << 110. << QPointF(100, 0); + QTest::newRow("completed:horizontal,auto,-1") << false << QQuickListView::Horizontal << QQuickListView::AutoFlickDirection << -1. << -1. << QPointF(100, 0); + QTest::newRow("completed:horizontal,auto,110") << false << QQuickListView::Horizontal << QQuickListView::AutoFlickDirection << -1. << 110. << QPointF(100, 10); +} + void tst_QQuickListView::destroyItemOnCreation() { QaimModel model; |