From 615d0484f3a0f06d6fde4ab28be1a47eab261040 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Wed, 24 Feb 2016 11:07:14 +0300 Subject: [PATCH] register MainMenu to be accessible from DML --- src/dlangui/platforms/common/startup.d | 2 ++ src/dlangui/widgets/menu.d | 36 ++++++++++++++++++++------ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/dlangui/platforms/common/startup.d b/src/dlangui/platforms/common/startup.d index 1c11c8c6..b494b0a6 100644 --- a/src/dlangui/platforms/common/startup.d +++ b/src/dlangui/platforms/common/startup.d @@ -278,6 +278,7 @@ void registerStandardWidgets() { import dlangui.widgets.editors; import dlangui.widgets.grid; import dlangui.dialogs.filedlg; + import dlangui.widgets.menu; mixin(registerWidgets!(FileNameEditLine, DirEditLine, //dlangui.dialogs.filedlg ComboBox, ComboEdit, //dlangui.widgets.combobox Widget, TextWidget, MultilineTextWidget, Button, ImageWidget, ImageButton, ImageCheckButton, ImageTextButton, @@ -286,6 +287,7 @@ void registerStandardWidgets() { StringGridWidget, //dlangui.widgets.grid VerticalLayout, HorizontalLayout, TableLayout, FrameLayout, // dlangui.widgets.layouts ListWidget, StringListWidget,//dlangui.widgets.lists + MainMenu, //dlangui.widgets.menu )("void registerWidgets")); registerWidgets(); } diff --git a/src/dlangui/widgets/menu.d b/src/dlangui/widgets/menu.d index a3f3a3c9..7d07290d 100644 --- a/src/dlangui/widgets/menu.d +++ b/src/dlangui/widgets/menu.d @@ -427,18 +427,28 @@ class MenuWidgetBase : ListWidget { this(MenuWidgetBase parentMenu, MenuItem item, Orientation orientation) { _parentMenu = parentMenu; - _item = item; this.orientation = orientation; id = "popup_menu"; styleId = STYLE_POPUP_MENU; + menuItems = item; + } + + @property void menuItems(MenuItem item) { + if (_item) { + destroy(_item); + _item = null; + } + _item = item; WidgetListAdapter adapter = new WidgetListAdapter(); - for (int i=0; i < _item.subitemCount; i++) { - MenuItem subitem = _item.subitem(i); - MenuItemWidget widget = new MenuItemWidget(subitem, orientation == Orientation.Horizontal); - if (orientation == Orientation.Horizontal) - widget.styleId = STYLE_MAIN_MENU_ITEM; - widget.parent = this; - adapter.add(widget); + if (item) { + for (int i=0; i < _item.subitemCount; i++) { + MenuItem subitem = _item.subitem(i); + MenuItemWidget widget = new MenuItemWidget(subitem, orientation == Orientation.Horizontal); + if (orientation == Orientation.Horizontal) + widget.styleId = STYLE_MAIN_MENU_ITEM; + widget.parent = this; + adapter.add(widget); + } } ownAdapter = adapter; } @@ -761,6 +771,8 @@ class MenuWidgetBase : ListWidget { /// map key to action override Action findKeyAction(uint keyCode, uint flags) { + if (!_item) + return null; Action action = _item.findKeyAction(keyCode, flags); return action; } @@ -770,6 +782,14 @@ class MenuWidgetBase : ListWidget { /// main menu (horizontal) class MainMenu : MenuWidgetBase { + this() { + super(null, null, Orientation.Horizontal); + id = "MAIN_MENU"; + styleId = STYLE_MAIN_MENU; + _clickOnButtonDown = true; + selectOnHover = false; + } + this(MenuItem item) { super(null, item, Orientation.Horizontal); id = "MAIN_MENU";