diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-06-16 05:28:59 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-06-21 12:14:26 +0000 |
commit | 39b4ac1e79415e8da2545a9a9002a9d674da77a1 (patch) | |
tree | 471320d784c08cb6547141c1e2af5e9eea5a3c6d /tests/auto | |
parent | 8034df8c1ebc4a73e629f6c6014078b162bdaadf (diff) |
Menu: allow horizontal flip for cascading sub-menus
Allow sub-menus to open on the left side if there's more space than on
the right side. This is the expected behavior on desktop.
Change-Id: I915cb93e98a42bf50758d9e98fd98632e55c2cfa
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/menu/data/subMenus.qml | 6 | ||||
-rw-r--r-- | tests/auto/menu/tst_menu.cpp | 35 |
2 files changed, 25 insertions, 16 deletions
diff --git a/tests/auto/menu/data/subMenus.qml b/tests/auto/menu/data/subMenus.qml index 314e7fed..f44d211f 100644 --- a/tests/auto/menu/data/subMenus.qml +++ b/tests/auto/menu/data/subMenus.qml @@ -52,7 +52,7 @@ import QtQuick 2.9 import QtQuick.Controls 2.3 ApplicationWindow { - width: 400 + width: 600 height: 400 property alias mainMenu: mainMenu @@ -62,19 +62,16 @@ ApplicationWindow { Menu { id: mainMenu - width: 100 MenuItem { id: mainMenuItem1; text: "Main 1" } Menu { id: subMenu1 - width: 100 title: "Sub Menu 1" MenuItem { id: subMenuItem1; text: "Sub 1" } MenuItem { id: subMenuItem2; text: "Sub 2" } Menu { id: subSubMenu1 - width: 100 title: "Sub Sub Menu 1" MenuItem { id: subSubMenuItem1; text: "Sub Sub 1" } MenuItem { id: subSubMenuItem2; text: "Sub Sub 2" } @@ -85,7 +82,6 @@ ApplicationWindow { Menu { id: subMenu2 - width: 100 title: "Sub Menu 2" MenuItem { id: subMenuItem3; text: "Sub 3" } MenuItem { id: subMenuItem4; text: "Sub 4" } diff --git a/tests/auto/menu/tst_menu.cpp b/tests/auto/menu/tst_menu.cpp index 79a459b8..a2975c84 100644 --- a/tests/auto/menu/tst_menu.cpp +++ b/tests/auto/menu/tst_menu.cpp @@ -913,24 +913,37 @@ void tst_menu::subMenuKeyboard() void tst_menu::subMenuPosition_data() { QTest::addColumn<bool>("cascade"); + QTest::addColumn<bool>("flip"); QTest::addColumn<bool>("mirrored"); QTest::addColumn<qreal>("overlap"); - QTest::newRow("cascading") << true << false << 0.0; - QTest::newRow("cascading,overlap") << true << false << 10.0; - QTest::newRow("cascading,mirrored") << true << true << 0.0; - QTest::newRow("cascading,mirrored,overlap") << true << true << 10.0; - QTest::newRow("non-cascading") << false << false << 0.0; + QTest::newRow("cascading") << true << false << false << 0.0; + QTest::newRow("cascading,flip") << true << true << false << 0.0; + QTest::newRow("cascading,overlap") << true << false << false << 10.0; + QTest::newRow("cascading,flip,overlap") << true << true << false << 10.0; + QTest::newRow("cascading,mirrored") << true << false << true << 0.0; + QTest::newRow("cascading,mirrored,flip") << true << true << true << 0.0; + QTest::newRow("cascading,mirrored,overlap") << true << false << true << 10.0; + QTest::newRow("cascading,mirrored,flip,overlap") << true << true << true << 10.0; + QTest::newRow("non-cascading") << false << false << false << 0.0; } void tst_menu::subMenuPosition() { QFETCH(bool, cascade); + QFETCH(bool, flip); QFETCH(bool, mirrored); QFETCH(qreal, overlap); QQuickApplicationHelper helper(this, QLatin1String("subMenus.qml")); QQuickApplicationWindow *window = helper.appWindow; + + // the default size of the window fits three menus side by side. + // when testing flipping, we resize the window so that the first + // sub-menu fits, but the second doesn't + if (flip) + window->setWidth(window->width() - 200); + window->show(); QVERIFY(QTest::qWaitForWindowActive(window)); moveMouseAway(window); @@ -966,10 +979,10 @@ void tst_menu::subMenuPosition() subSubMenu1->setOverlap(overlap); QCOMPARE(subSubMenu1->overlap(), overlap); + // choose the main menu position so that there's room for the + // sub-menus to cascade to the left when mirrored if (mirrored) - mainMenu->setPosition(QPointF(290, 10)); - else - mainMenu->setPosition(QPointF(10, 10)); + mainMenu->setX(window->width() - 200); mainMenu->open(); QVERIFY(mainMenu->isVisible()); @@ -977,7 +990,7 @@ void tst_menu::subMenuPosition() QVERIFY(!subMenu2->isVisible()); QVERIFY(!subSubMenu1->isVisible()); - // open the sub-menu + // open the sub-menu (never flips) QQuickMenuItem *subMenu1Item = qobject_cast<QQuickMenuItem *>(mainMenu->itemAt(1)); QVERIFY(subMenu1Item); QCOMPARE(subMenu1Item->subMenu(), subMenu1); @@ -1002,7 +1015,7 @@ void tst_menu::subMenuPosition() QCOMPARE(subMenu1->popupItem()->y(), mainMenu->popupItem()->y() + (mainMenu->height() - subMenu1->height()) / 2); } - // open the sub-sub-menu + // open the sub-sub-menu (can flip) QQuickMenuItem *subSubMenu1Item = qobject_cast<QQuickMenuItem *>(subMenu1->itemAt(2)); QVERIFY(subSubMenu1Item); QCOMPARE(subSubMenu1Item->subMenu(), subSubMenu1); @@ -1016,7 +1029,7 @@ void tst_menu::subMenuPosition() QCOMPARE(subSubMenu1->parentItem(), subSubMenu1Item); // vertically aligned to the parent menu item QCOMPARE(subSubMenu1->popupItem()->y(), subMenu1->popupItem()->y() + subSubMenu1Item->y() - subSubMenu1->topPadding()); - if (mirrored) + if (mirrored != flip) QCOMPARE(subSubMenu1->popupItem()->x(), subMenu1->popupItem()->x() - subSubMenu1->width() + overlap); // on the left of the parent menu else QCOMPARE(subSubMenu1->popupItem()->x(), subMenu1->popupItem()->x() + subMenu1->width() - overlap); // on the right of the parent menu |