diff options
-rw-r--r-- | src/imports/controls/SwipeView.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/material/SwipeView.qml | 2 | ||||
-rw-r--r-- | src/imports/templates/qtquicktemplates2plugin.cpp | 1 | ||||
-rw-r--r-- | src/quicktemplates2/qquickswipeview.cpp | 34 | ||||
-rw-r--r-- | src/quicktemplates2/qquickswipeview_p.h | 5 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_swipeview.qml | 25 |
6 files changed, 65 insertions, 4 deletions
diff --git a/src/imports/controls/SwipeView.qml b/src/imports/controls/SwipeView.qml index df569721..4ccef22b 100644 --- a/src/imports/controls/SwipeView.qml +++ b/src/imports/controls/SwipeView.qml @@ -52,7 +52,7 @@ T.SwipeView { currentIndex: control.currentIndex spacing: control.spacing - orientation: Qt.Horizontal + orientation: control.orientation snapMode: ListView.SnapOneItem boundsBehavior: Flickable.StopAtBounds diff --git a/src/imports/controls/material/SwipeView.qml b/src/imports/controls/material/SwipeView.qml index 77a7b9f6..293cce46 100644 --- a/src/imports/controls/material/SwipeView.qml +++ b/src/imports/controls/material/SwipeView.qml @@ -51,7 +51,7 @@ T.SwipeView { currentIndex: control.currentIndex spacing: control.spacing - orientation: Qt.Horizontal + orientation: control.orientation snapMode: ListView.SnapOneItem boundsBehavior: Flickable.StopAtBounds diff --git a/src/imports/templates/qtquicktemplates2plugin.cpp b/src/imports/templates/qtquicktemplates2plugin.cpp index 3166afd9..c50ca2f6 100644 --- a/src/imports/templates/qtquicktemplates2plugin.cpp +++ b/src/imports/templates/qtquicktemplates2plugin.cpp @@ -234,6 +234,7 @@ void QtQuickTemplates2Plugin::registerTypes(const char *uri) qmlRegisterType<QQuickSlider, 2>(uri, 2, 2, "Slider"); qmlRegisterType<QQuickSpinBox, 2>(uri, 2, 2, "SpinBox"); qmlRegisterType<QQuickSwipeDelegate, 2>(uri, 2, 2, "SwipeDelegate"); + qmlRegisterType<QQuickSwipeView, 2>(uri, 2, 2, "SwipeView"); qmlRegisterType<QQuickTabBar, 2>(uri, 2, 2, "TabBar"); qmlRegisterType<QQuickTumbler, 2>(uri, 2, 2, "Tumbler"); } diff --git a/src/quicktemplates2/qquickswipeview.cpp b/src/quicktemplates2/qquickswipeview.cpp index 79fc221a..b2075e80 100644 --- a/src/quicktemplates2/qquickswipeview.cpp +++ b/src/quicktemplates2/qquickswipeview.cpp @@ -106,7 +106,7 @@ class QQuickSwipeViewPrivate : public QQuickContainerPrivate Q_DECLARE_PUBLIC(QQuickSwipeView) public: - QQuickSwipeViewPrivate() : interactive(true) { } + QQuickSwipeViewPrivate() : interactive(true), orientation(Qt::Horizontal) { } void resizeItem(QQuickItem *item); void resizeItems(); @@ -114,6 +114,7 @@ public: static QQuickSwipeViewPrivate *get(QQuickSwipeView *view); bool interactive; + Qt::Orientation orientation; }; void QQuickSwipeViewPrivate::resizeItems() @@ -130,6 +131,10 @@ void QQuickSwipeViewPrivate::resizeItems() item->setProperty("_q_QQuickSwipeView_warned", true); } + if (orientation == Qt::Horizontal) + item->setY(0); + else + item->setX(0); item->setSize(QSizeF(contentItem->width(), contentItem->height())); } } @@ -172,6 +177,33 @@ void QQuickSwipeView::setInteractive(bool interactive) emit interactiveChanged(); } +/*! + \qmlproperty enumeration QtQuick.Controls::SwipeView::orientation + + This property holds the orientation. + + Possible values: + \value Qt.Horizontal Horizontal (default) + \value Qt.Vertical Vertical +*/ +Qt::Orientation QQuickSwipeView::orientation() const +{ + Q_D(const QQuickSwipeView); + return d->orientation; +} + +void QQuickSwipeView::setOrientation(Qt::Orientation orientation) +{ + Q_D(QQuickSwipeView); + if (d->orientation == orientation) + return; + + d->orientation = orientation; + if (isComponentComplete()) + d->resizeItems(); + emit orientationChanged(); +} + QQuickSwipeViewAttached *QQuickSwipeView::qmlAttachedProperties(QObject *object) { return new QQuickSwipeViewAttached(object); diff --git a/src/quicktemplates2/qquickswipeview_p.h b/src/quicktemplates2/qquickswipeview_p.h index 832cde37..8a46f0d2 100644 --- a/src/quicktemplates2/qquickswipeview_p.h +++ b/src/quicktemplates2/qquickswipeview_p.h @@ -59,6 +59,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickSwipeView : public QQuickContainer { Q_OBJECT Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive NOTIFY interactiveChanged FINAL REVISION 1) + Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged FINAL REVISION 2) public: explicit QQuickSwipeView(QQuickItem *parent = nullptr); @@ -66,10 +67,14 @@ public: bool isInteractive() const; void setInteractive(bool interactive); + Qt::Orientation orientation() const; + void setOrientation(Qt::Orientation orientation); + static QQuickSwipeViewAttached *qmlAttachedProperties(QObject *object); Q_SIGNALS: Q_REVISION(1) void interactiveChanged(); + Q_REVISION(2) void orientationChanged(); protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; diff --git a/tests/auto/controls/data/tst_swipeview.qml b/tests/auto/controls/data/tst_swipeview.qml index d330b73c..ca4ccc86 100644 --- a/tests/auto/controls/data/tst_swipeview.qml +++ b/tests/auto/controls/data/tst_swipeview.qml @@ -40,7 +40,7 @@ import QtQuick 2.2 import QtTest 1.0 -import QtQuick.Controls 2.1 +import QtQuick.Controls 2.2 TestCase { id: testCase @@ -520,4 +520,27 @@ TestCase { compare(page.isNextItem, false); compare(page.isPreviousItem, false); } + + function test_orientation() { + var control = createTemporaryObject(swipeView, testCase, {width: 200, height: 200}) + verify(control) + + for (var i = 0; i < 3; ++i) + control.addItem(page.createObject(control, {text: i})) + + compare(control.orientation, Qt.Horizontal) + + for (i = 0; i < control.count; ++i) { + control.currentIndex = i + compare(control.itemAt(i).y, 0) + } + + control.orientation = Qt.Vertical + compare(control.orientation, Qt.Vertical) + + for (i = 0; i < control.count; ++i) { + control.currentIndex = i + compare(control.itemAt(i).x, 0) + } + } } |