aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-05-04 00:17:21 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-07-09 10:37:34 +0000
commit09706e8f9fc481d848a3616cace58baf5bc8b67c (patch)
tree53addd2a72e4c08302774929dd54bf246344814c
parentb4cc1fc862df43d9fed90b25ee2a9ef6692d2a5a (diff)
Popup: expose flip API
[ChangeLog][Popup] Added allowVerticalFlip and allowHorizontalFlip properties to control whether flipping is allowed to fit a popup inside the window. Change-Id: Id14a8846a1e2d07e98207da7c2b2765c202dbaf9 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r--src/imports/templates/qtquicktemplates2plugin.cpp1
-rw-r--r--src/quicktemplates2/qquickcombobox.cpp2
-rw-r--r--src/quicktemplates2/qquickpopup.cpp58
-rw-r--r--src/quicktemplates2/qquickpopup_p.h10
-rw-r--r--src/quicktemplates2/qquicktooltip.cpp5
-rw-r--r--tests/auto/controls/data/tst_popup.qml39
6 files changed, 109 insertions, 6 deletions
diff --git a/src/imports/templates/qtquicktemplates2plugin.cpp b/src/imports/templates/qtquicktemplates2plugin.cpp
index 300cc2fa..1e5c3aad 100644
--- a/src/imports/templates/qtquicktemplates2plugin.cpp
+++ b/src/imports/templates/qtquicktemplates2plugin.cpp
@@ -178,6 +178,7 @@ void QtQuickTemplates2Plugin::registerTypes(const char *uri)
qmlRegisterType<QQuickContainer, 1>(uri, 2, 1, "Container");
qmlRegisterType<QQuickDialogButtonBox>(uri, 2, 1, "DialogButtonBox");
qmlRegisterType<QQuickDialogButtonBoxAttached>();
+ qmlRegisterType<QQuickPopup, 1>(uri, 2, 1, "Popup");
qmlRegisterType<QQuickRangeSlider, 1>(uri, 2, 1, "RangeSlider");
qmlRegisterType<QQuickSlider, 1>(uri, 2, 1, "Slider");
qmlRegisterType<QQuickSpinBox, 1>(uri, 2, 1, "SpinBox");
diff --git a/src/quicktemplates2/qquickcombobox.cpp b/src/quicktemplates2/qquickcombobox.cpp
index cce61509..c70f8839 100644
--- a/src/quicktemplates2/qquickcombobox.cpp
+++ b/src/quicktemplates2/qquickcombobox.cpp
@@ -651,7 +651,7 @@ void QQuickComboBox::setPopup(QQuickPopup *popup)
delete d->popup;
if (popup) {
- QQuickPopupPrivate::get(popup)->allowVerticalFlip = true;
+ popup->setAllowVerticalFlip(true);
popup->setClosePolicy(QQuickPopup::CloseOnEscape | QQuickPopup::CloseOnPressOutsideParent);
}
d->popup = popup;
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp
index 2c661a1b..d1b7f85c 100644
--- a/src/quicktemplates2/qquickpopup.cpp
+++ b/src/quicktemplates2/qquickpopup.cpp
@@ -1324,6 +1324,64 @@ void QQuickPopup::resetBottomPadding()
}
/*!
+ \since QtQuick.Controls 2.1
+ \qmlproperty bool QtQuick.Controls::Popup::allowVerticalFlip
+
+ This property holds whether the popup is allowed to flip vertically.
+
+ A popup can be flipped from above its parent item to below it, or vice
+ versa, in order to make the popup fit inside the window.
+
+ The default value is \c false.
+
+ \sa allowHorizontalFlip
+*/
+bool QQuickPopup::allowVerticalFlip() const
+{
+ Q_D(const QQuickPopup);
+ return d->allowVerticalFlip;
+}
+
+void QQuickPopup::setAllowVerticalFlip(bool allow)
+{
+ Q_D(QQuickPopup);
+ if (d->allowVerticalFlip == allow)
+ return;
+
+ d->allowVerticalFlip = allow;
+ emit allowVerticalFlipChanged();
+}
+
+/*!
+ \since QtQuick.Controls 2.1
+ \qmlproperty bool QtQuick.Controls::Popup::allowHorizontalFlip
+
+ This property holds whether the popup is allowed to flip horizontally.
+
+ A popup can be flipped from the left side of its parent item to the right
+ side, or vice versa, in order to make the popup fit inside the window.
+
+ The default value is \c false.
+
+ \sa allowVerticalFlip
+*/
+bool QQuickPopup::allowHorizontalFlip() const
+{
+ Q_D(const QQuickPopup);
+ return d->allowHorizontalFlip;
+}
+
+void QQuickPopup::setAllowHorizontalFlip(bool allow)
+{
+ Q_D(QQuickPopup);
+ if (d->allowHorizontalFlip == allow)
+ return;
+
+ d->allowHorizontalFlip = allow;
+ emit allowHorizontalFlipChanged();
+}
+
+/*!
\qmlproperty Locale QtQuick.Controls::Popup::locale
This property holds the locale of the popup.
diff --git a/src/quicktemplates2/qquickpopup_p.h b/src/quicktemplates2/qquickpopup_p.h
index be6a8e22..1f2cabcf 100644
--- a/src/quicktemplates2/qquickpopup_p.h
+++ b/src/quicktemplates2/qquickpopup_p.h
@@ -94,6 +94,8 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickPopup : public QObject, public QQml
Q_PROPERTY(qreal leftPadding READ leftPadding WRITE setLeftPadding RESET resetLeftPadding NOTIFY leftPaddingChanged FINAL)
Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding RESET resetRightPadding NOTIFY rightPaddingChanged FINAL)
Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET resetBottomPadding NOTIFY bottomPaddingChanged FINAL)
+ Q_PROPERTY(bool allowVerticalFlip READ allowVerticalFlip WRITE setAllowVerticalFlip NOTIFY allowVerticalFlipChanged FINAL REVISION 1)
+ Q_PROPERTY(bool allowHorizontalFlip READ allowHorizontalFlip WRITE setAllowHorizontalFlip NOTIFY allowHorizontalFlipChanged FINAL REVISION 1)
Q_PROPERTY(QLocale locale READ locale WRITE setLocale RESET resetLocale NOTIFY localeChanged FINAL)
Q_PROPERTY(QFont font READ font WRITE setFont RESET resetFont NOTIFY fontChanged FINAL)
Q_PROPERTY(QQuickItem *parent READ parentItem WRITE setParentItem NOTIFY parentChanged FINAL)
@@ -194,6 +196,12 @@ public:
void setBottomPadding(qreal padding);
void resetBottomPadding();
+ bool allowVerticalFlip() const;
+ void setAllowVerticalFlip(bool allow);
+
+ bool allowHorizontalFlip() const;
+ void setAllowHorizontalFlip(bool allow);
+
QLocale locale() const;
void setLocale(const QLocale &locale);
void resetLocale();
@@ -303,6 +311,8 @@ Q_SIGNALS:
void leftPaddingChanged();
void rightPaddingChanged();
void bottomPaddingChanged();
+ Q_REVISION(1) void allowVerticalFlipChanged();
+ Q_REVISION(1) void allowHorizontalFlipChanged();
void fontChanged();
void localeChanged();
void parentChanged();
diff --git a/src/quicktemplates2/qquicktooltip.cpp b/src/quicktemplates2/qquicktooltip.cpp
index 9cc9a0d9..42ae8edd 100644
--- a/src/quicktemplates2/qquicktooltip.cpp
+++ b/src/quicktemplates2/qquicktooltip.cpp
@@ -163,9 +163,8 @@ void QQuickToolTipPrivate::stopTimeout()
QQuickToolTip::QQuickToolTip(QQuickItem *parent) :
QQuickPopup(*(new QQuickToolTipPrivate), parent)
{
- Q_D(QQuickToolTip);
- d->allowVerticalFlip = true;
- d->allowHorizontalFlip = true;
+ setAllowVerticalFlip(true);
+ setAllowHorizontalFlip(true);
}
/*!
diff --git a/tests/auto/controls/data/tst_popup.qml b/tests/auto/controls/data/tst_popup.qml
index 9e5dc2bd..6217bb1d 100644
--- a/tests/auto/controls/data/tst_popup.qml
+++ b/tests/auto/controls/data/tst_popup.qml
@@ -45,8 +45,8 @@ import QtQuick.Templates 2.1 as T
TestCase {
id: testCase
- width: 480
- height: 360
+ width: 400
+ height: 400
visible: true
when: windowShown
name: "Popup"
@@ -443,6 +443,41 @@ TestCase {
control.destroy()
}
+ function test_flip_data() {
+ return [
+ {tag: "flip top-bottom", parentX: 0, parentY: 0, popupX: 0, popupY: -50, popupItemX: 0, popupItemY: 50, allowVerticalFlip: true, allowHorizontalFlip: true },
+ {tag: "flip bottom-top", parentX: 0, parentY: 300, popupX: 0, popupY: 50, popupItemX: 0, popupItemY: 250, allowVerticalFlip: true, allowHorizontalFlip: true },
+ {tag: "flip left-right", parentX: 0, parentY: 0, popupX: -50, popupY: 0, popupItemX: 50, popupItemY: 0, allowVerticalFlip: true, allowHorizontalFlip: true },
+ {tag: "flip right-left", parentX: 300, parentY: 0, popupX: 50, popupY: 0, popupItemX: 250, popupItemY: 0, allowVerticalFlip: true, allowHorizontalFlip: true },
+
+ {tag: "no flip top-bottom", parentX: 0, parentY: 50, popupX: 0, popupY: -50, popupItemX: 0, popupItemY: 0, allowVerticalFlip: true, allowHorizontalFlip: true },
+ {tag: "no flip bottom-top", parentX: 0, parentY: 250, popupX: 0, popupY: 50, popupItemX: 0, popupItemY: 300, allowVerticalFlip: true, allowHorizontalFlip: true },
+ {tag: "no flip left-right", parentX: 50, parentY: 0, popupX: -50, popupY: 0, popupItemX: 0, popupItemY: 0, allowVerticalFlip: true, allowHorizontalFlip: true },
+ {tag: "no flip right-left", parentX: 250, parentY: 0, popupX: 50, popupY: 0, popupItemX: 300, popupItemY: 0, allowVerticalFlip: true, allowHorizontalFlip: true },
+
+ {tag: "disallow flip top-bottom", parentX: 0, parentY: 0, popupX: 0, popupY: -50, popupItemX: 0, popupItemY: -50, allowVerticalFlip: false, allowHorizontalFlip: false },
+ {tag: "disallow flip bottom-top", parentX: 0, parentY: 300, popupX: 0, popupY: 50, popupItemX: 0, popupItemY: 350, allowVerticalFlip: false, allowHorizontalFlip: false },
+ {tag: "disallow flip left-right", parentX: 0, parentY: 0, popupX: -50, popupY: 0, popupItemX: -50, popupItemY: 0, allowVerticalFlip: false, allowHorizontalFlip: false },
+ {tag: "disallow flip right-left", parentX: 300, parentY: 0, popupX: 50, popupY: 0, popupItemX: 350, popupItemY: 0, allowVerticalFlip: false, allowHorizontalFlip: false }
+ ]
+ }
+
+ function test_flip(data) {
+ var parentItem = rect.createObject(testCase, {color: "red", x: data.parentX, y: data.parentY, width: 100, height: 100})
+ verify(parentItem)
+
+ var control = popupControl.createObject(parentItem, {x: data.popupX, y: data.popupY, width: 100, height: 100, allowVerticalFlip: data.allowVerticalFlip, allowHorizontalFlip: data.allowHorizontalFlip})
+ verify(control)
+
+ control.open()
+ verify(control.visible)
+
+ compare(control.contentItem.parent.y, data.popupItemY)
+ compare(control.contentItem.parent.x, data.popupItemX)
+
+ parentItem.destroy()
+ }
+
function test_background() {
var control = popupTemplate.createObject(testCase)
verify(control)