From f509171b04d1ec28a1cb0431648c92a40c755361 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Mon, 26 Jan 2015 16:28:42 +0300 Subject: [PATCH] AppFrame: main menu accelerators --- src/dlangui/widgets/appframe.d | 10 ++++++++++ src/dlangui/widgets/menu.d | 21 +++++++++++++++++++++ src/dlangui/widgets/widget.d | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/dlangui/widgets/appframe.d b/src/dlangui/widgets/appframe.d index bd763600..8eacd8d8 100644 --- a/src/dlangui/widgets/appframe.d +++ b/src/dlangui/widgets/appframe.d @@ -45,6 +45,16 @@ class AppFrame : VerticalLayout, MenuItemClickHandler, MenuItemActionHandler { init(); } + /// map key to action + override Action findKeyAction(uint keyCode, uint flags) { + if (_mainMenu) { + Action action = _mainMenu.findKeyAction(keyCode, flags); + if (action) + return action; + } + return super.findKeyAction(keyCode, flags); + } + protected void init() { _mainMenu = createMainMenu(); _toolbarHost = createToolbars(); diff --git a/src/dlangui/widgets/menu.d b/src/dlangui/widgets/menu.d index 474d32ff..6298949f 100644 --- a/src/dlangui/widgets/menu.d +++ b/src/dlangui/widgets/menu.d @@ -84,6 +84,20 @@ class MenuItem { return _subitems[index]; } + /// map key to action + Action findKeyAction(uint keyCode, uint flags) { + if (_action) { + if (_action.checkAccelerator(keyCode, flags)) + return _action; + } + for (int i = 0; i < subitemCount; i++) { + Action a = subitem(i).findKeyAction(keyCode, flags); + if (a) + return a; + } + return null; + } + @property MenuItemType type() const { if (id == SEPARATOR_ACTION_ID) return MenuItemType.Separator; @@ -676,6 +690,13 @@ class MenuWidgetBase : ListWidget { if (thisPopup !is null) thisPopup.close(); } + + /// map key to action + override Action findKeyAction(uint keyCode, uint flags) { + Action action = _item.findKeyAction(keyCode, flags); + return action; + } + } /// main menu (horizontal) diff --git a/src/dlangui/widgets/widget.d b/src/dlangui/widgets/widget.d index 2e444988..7e1a0487 100644 --- a/src/dlangui/widgets/widget.d +++ b/src/dlangui/widgets/widget.d @@ -924,7 +924,7 @@ class Widget { } /// map key to action - protected Action findKeyAction(uint keyCode, uint flags) { + Action findKeyAction(uint keyCode, uint flags) { Action action = _acceleratorMap.findByKey(keyCode, flags); return action; }