summaryrefslogtreecommitdiff
path: root/src/controls/Menu.qml
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@digia.com>2013-09-18 15:19:06 +0200
committerGabriel de Dietrich <gabriel.dedietrich@digia.com>2013-09-18 15:19:06 +0200
commit46f3cc477fc00aae887f085e063d6cb10bfdcd4c (patch)
tree0585601759ccbae2ed2abecedaf16e06b80676d0 /src/controls/Menu.qml
parent4c184095d378622fb0c3bb1692b331b3cc04e010 (diff)
parent04e000d2b1719696581bb4ae6ec21e39236ef38c (diff)
downloadqtquickcontrols-46f3cc477fc00aae887f085e063d6cb10bfdcd4c.tar.gz
Merge branch 'stable' into dev
Conflicts: src/controls/qquickaction.cpp Change-Id: I85255ba5c27c0d8ea023d0867e5963d43f8f1ddb
Diffstat (limited to 'src/controls/Menu.qml')
-rw-r--r--src/controls/Menu.qml59
1 files changed, 47 insertions, 12 deletions
diff --git a/src/controls/Menu.qml b/src/controls/Menu.qml
index 1e230ea8..4c3bc1be 100644
--- a/src/controls/Menu.qml
+++ b/src/controls/Menu.qml
@@ -133,7 +133,7 @@ MenuPrivate {
property Component style: Qt.createComponent(Settings.style + "/MenuStyle.qml", root)
/*! \internal */
- property var __menuBar: null
+ property var __parentContentItem: __parentMenu.__contentItem
/*! \internal */
property int __currentIndex: -1
/*! \internal */
@@ -144,6 +144,8 @@ MenuPrivate {
sourceComponent: __menuComponent
active: !root.__isNative && root.__popupVisible
focus: true
+ Keys.forwardTo: item ? [item, root.__parentContentItem] : []
+ property bool altPressed: root.__parentContentItem ? root.__parentContentItem.altPressed : false
}
/*! \internal */
@@ -174,14 +176,30 @@ MenuPrivate {
}
focus: true
- Keys.forwardTo: __menuBar ? [__menuBar] : []
+ property var mnemonicsMap: ({})
+
+ Keys.onPressed: {
+ var item = null
+ if (!(event.modifiers & Qt.AltModifier)
+ && (item = mnemonicsMap[event.text.toUpperCase()])) {
+ if (item.isSubmenu) {
+ root.__currentIndex = item.menuItemIndex
+ item.showSubMenu(true)
+ item.menuItem.__currentIndex = 0
+ } else {
+ triggerAndDismiss(item)
+ }
+ event.accepted = true
+ } else {
+ event.accepted = false
+ }
+ }
+
Keys.onEscapePressed: root.__dismissMenu()
Keys.onDownPressed: {
- if (root.__currentIndex < 0) {
- root.__currentIndex = 0
- return
- }
+ if (root.__currentIndex < 0)
+ root.__currentIndex = -1
for (var i = root.__currentIndex + 1;
i < root.items.length && !canBeHovered(i); i++)
@@ -204,13 +222,13 @@ MenuPrivate {
}
Keys.onLeftPressed: {
- if (root.__parentMenu)
+ if ((event.accepted = root.__parentMenu.hasOwnProperty("title")))
__closeMenu()
}
Keys.onRightPressed: {
var item = itemsRepeater.itemAt(root.__currentIndex)
- if (item && item.isSubmenu) {
+ if ((event.accepted = (item && item.isSubmenu))) {
item.showSubMenu(true)
item.menuItem.__currentIndex = 0
}
@@ -220,8 +238,9 @@ MenuPrivate {
Keys.onReturnPressed: menuFrameLoader.triggerAndDismiss()
Keys.onEnterPressed: menuFrameLoader.triggerAndDismiss()
- function triggerAndDismiss() {
- var item = itemsRepeater.itemAt(root.__currentIndex)
+ function triggerAndDismiss(item) {
+ if (!item)
+ item = itemsRepeater.itemAt(root.__currentIndex)
if (item && !item.isSeparator) {
root.__dismissMenu()
if (!item.isSubmenu)
@@ -258,7 +277,15 @@ MenuPrivate {
if (!currentItem || !currentItem.contains(Qt.point(pos.x - currentItem.x, pos.y - currentItem.y))) {
if (currentItem && !pressed && currentItem.isSubmenu)
currentItem.closeSubMenu()
- currentItem = column.childAt(pos.x, pos.y)
+ var itemUnderMouse = column.childAt(pos.x, pos.y)
+ if (itemUnderMouse) {
+ currentItem = itemUnderMouse
+ } else if (currentItem) {
+ var itemItem = currentItem.item
+ if (!itemItem.contains(itemItem.mapFromItem(column, pos)))
+ currentItem = null
+ }
+
if (currentItem) {
root.__currentIndex = currentItem.menuItemIndex
if (currentItem.isSubmenu && !currentItem.menuItem.__popupVisible)
@@ -286,6 +313,7 @@ MenuPrivate {
readonly property bool isSubmenu: !!menuItem && menuItem.type === MenuItemType.Menu
property bool selected: !isSeparator && root.__currentIndex === index
property string text: isSubmenu ? menuItem.title : !isSeparator ? menuItem.text : ""
+ property bool showUnderlined: __contentItem.altPressed
property int menuItemIndex: index
@@ -324,7 +352,14 @@ MenuPrivate {
}
}
- Component.onCompleted: menuItem.__visualItem = menuItemLoader
+ Component.onCompleted: {
+ menuItem.__visualItem = menuItemLoader
+
+ var title = text
+ var ampersandPos = title.indexOf("&")
+ if (ampersandPos !== -1)
+ menuFrameLoader.mnemonicsMap[title[ampersandPos + 1].toUpperCase()] = menuItemLoader
+ }
}
}