aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/controls/SwipeView.qml2
-rw-r--r--src/imports/controls/material/SwipeView.qml2
-rw-r--r--src/imports/templates/qtquicktemplates2plugin.cpp1
-rw-r--r--src/quicktemplates2/qquickswipeview.cpp34
-rw-r--r--src/quicktemplates2/qquickswipeview_p.h5
-rw-r--r--tests/auto/controls/data/tst_swipeview.qml25
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)
+ }
+ }
}