mirror of https://github.com/buggins/dlangui.git
code cleanup - menus
This commit is contained in:
parent
c11a305037
commit
8d5833640f
|
@ -184,8 +184,9 @@ class ListWidget : WidgetGroup, OnScrollHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// override to handle change of selection
|
/// override to handle change of selection
|
||||||
protected void selectionChanged(int index, int previouslySelectedItem = -1, MouseEvent event = null) {
|
protected void selectionChanged(int index, int previouslySelectedItem = -1) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// override to handle mouse up on item
|
/// override to handle mouse up on item
|
||||||
protected void itemClicked(int index) {
|
protected void itemClicked(int index) {
|
||||||
}
|
}
|
||||||
|
@ -470,7 +471,7 @@ class ListWidget : WidgetGroup, OnScrollHandler {
|
||||||
|
|
||||||
/// process mouse event; return true if event is processed by widget.
|
/// process mouse event; return true if event is processed by widget.
|
||||||
override bool onMouseEvent(MouseEvent event) {
|
override bool onMouseEvent(MouseEvent event) {
|
||||||
Log.d("onMouseEvent ", id, " ", event.action, " (", event.x, ",", event.y, ")");
|
//Log.d("onMouseEvent ", id, " ", event.action, " (", event.x, ",", event.y, ")");
|
||||||
if (event.action == MouseAction.Leave || event.action == MouseAction.Cancel) {
|
if (event.action == MouseAction.Leave || event.action == MouseAction.Cancel) {
|
||||||
setHoverItem(-1);
|
setHoverItem(-1);
|
||||||
return true;
|
return true;
|
||||||
|
@ -497,7 +498,7 @@ class ListWidget : WidgetGroup, OnScrollHandler {
|
||||||
int prevSelection = _selectedItemIndex;
|
int prevSelection = _selectedItemIndex;
|
||||||
selectItem(i);
|
selectItem(i);
|
||||||
setHoverItem(-1);
|
setHoverItem(-1);
|
||||||
selectionChanged(_selectedItemIndex, prevSelection, event);
|
selectionChanged(_selectedItemIndex, prevSelection);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
setHoverItem(i);
|
setHoverItem(i);
|
||||||
|
|
|
@ -6,6 +6,7 @@ import dlangui.widgets.layouts;
|
||||||
import dlangui.widgets.lists;
|
import dlangui.widgets.lists;
|
||||||
import dlangui.widgets.popup;
|
import dlangui.widgets.popup;
|
||||||
|
|
||||||
|
/// menu item properties
|
||||||
class MenuItem {
|
class MenuItem {
|
||||||
protected bool _checkable;
|
protected bool _checkable;
|
||||||
protected bool _checked;
|
protected bool _checked;
|
||||||
|
@ -56,17 +57,10 @@ class MenuItem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MenuItemWidgetHandler {
|
/// widget to draw menu item
|
||||||
bool onItemMouseDown(MenuItemWidget itemWidget, MouseEvent ev);
|
|
||||||
bool onItemMouseUp(MenuItemWidget itemWidget, MouseEvent ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
class MenuItemWidget : HorizontalLayout {
|
class MenuItemWidget : HorizontalLayout {
|
||||||
protected MenuItem _item;
|
protected MenuItem _item;
|
||||||
protected TextWidget _label;
|
protected TextWidget _label;
|
||||||
protected MenuItemWidgetHandler _handler;
|
|
||||||
@property MenuItemWidgetHandler handler() { return _handler; }
|
|
||||||
@property MenuItemWidget handler(MenuItemWidgetHandler h) { _handler = h; return this; }
|
|
||||||
@property MenuItem item() { return _item; }
|
@property MenuItem item() { return _item; }
|
||||||
this(MenuItem item) {
|
this(MenuItem item) {
|
||||||
id="menuitem";
|
id="menuitem";
|
||||||
|
@ -79,11 +73,17 @@ class MenuItemWidget : HorizontalLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// base class for menus
|
||||||
class MenuWidgetBase : ListWidget {
|
class MenuWidgetBase : ListWidget {
|
||||||
protected MenuWidgetBase _parentMenu;
|
protected MenuWidgetBase _parentMenu;
|
||||||
protected MenuItem _item;
|
protected MenuItem _item;
|
||||||
protected PopupMenu _openedMenu;
|
protected PopupMenu _openedMenu;
|
||||||
protected PopupWidget _openedPopup;
|
protected PopupWidget _openedPopup;
|
||||||
|
protected bool delegate(MenuItem item) _onMenuItemClickListener;
|
||||||
|
/// menu item click listener
|
||||||
|
@property bool delegate(MenuItem item) onMenuItemListener() { return _onMenuItemClickListener; }
|
||||||
|
/// menu item click listener
|
||||||
|
@property MenuWidgetBase onMenuItemListener(bool delegate(MenuItem item) listener) { _onMenuItemClickListener = listener; return this; }
|
||||||
|
|
||||||
this(MenuWidgetBase parentMenu, MenuItem item, Orientation orientation) {
|
this(MenuWidgetBase parentMenu, MenuItem item, Orientation orientation) {
|
||||||
_parentMenu = parentMenu;
|
_parentMenu = parentMenu;
|
||||||
|
@ -97,7 +97,6 @@ class MenuWidgetBase : ListWidget {
|
||||||
MenuItemWidget widget = new MenuItemWidget(subitem);
|
MenuItemWidget widget = new MenuItemWidget(subitem);
|
||||||
if (orientation == Orientation.Horizontal)
|
if (orientation == Orientation.Horizontal)
|
||||||
widget.styleId = "MAIN_MENU_ITEM";
|
widget.styleId = "MAIN_MENU_ITEM";
|
||||||
//widget.handler = this;
|
|
||||||
adapter.widgets.add(widget);
|
adapter.widgets.add(widget);
|
||||||
}
|
}
|
||||||
ownAdapter = adapter;
|
ownAdapter = adapter;
|
||||||
|
@ -108,32 +107,24 @@ class MenuWidgetBase : ListWidget {
|
||||||
_openedPopup.close();
|
_openedPopup.close();
|
||||||
PopupMenu popupMenu = new PopupMenu(itemWidget.item, this);
|
PopupMenu popupMenu = new PopupMenu(itemWidget.item, this);
|
||||||
PopupWidget popup = window.showPopup(popupMenu, itemWidget, PopupAlign.Below);
|
PopupWidget popup = window.showPopup(popupMenu, itemWidget, PopupAlign.Below);
|
||||||
//if (event !is null && (event.flags & (MouseFlag.LButton || MouseFlag.RButton)))
|
|
||||||
// event.track(popupMenu);
|
|
||||||
_openedPopup = popup;
|
_openedPopup = popup;
|
||||||
_openedMenu = popupMenu;
|
_openedMenu = popupMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// override to handle change of selection
|
/// override to handle change of selection
|
||||||
override protected void selectionChanged(int index, int previouslySelectedItem = -1, MouseEvent event = null) {
|
override protected void selectionChanged(int index, int previouslySelectedItem = -1) {
|
||||||
MenuItemWidget itemWidget = index >= 0 ? cast(MenuItemWidget)_adapter.itemWidget(index) : null;
|
MenuItemWidget itemWidget = index >= 0 ? cast(MenuItemWidget)_adapter.itemWidget(index) : null;
|
||||||
if (itemWidget !is null) {
|
if (itemWidget !is null) {
|
||||||
if (itemWidget.item.isSubmenu()) {
|
if (itemWidget.item.isSubmenu()) {
|
||||||
if (_selectOnHover) {
|
if (_selectOnHover) {
|
||||||
openSubmenu(itemWidget);
|
openSubmenu(itemWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// normal item
|
// normal item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected bool delegate(MenuItem item) _onMenuItemClickListener;
|
|
||||||
@property bool delegate(MenuItem item) onMenuItemListener() { return _onMenuItemClickListener; }
|
|
||||||
@property MenuWidgetBase onMenuItemListener(bool delegate(MenuItem item) listener) { _onMenuItemClickListener = listener; return this; }
|
|
||||||
|
|
||||||
protected void onMenuItem(MenuItem item) {
|
protected void onMenuItem(MenuItem item) {
|
||||||
if (_openedPopup !is null) {
|
if (_openedPopup !is null) {
|
||||||
_openedPopup.close();
|
_openedPopup.close();
|
||||||
|
@ -181,6 +172,7 @@ class MenuWidgetBase : ListWidget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// main menu (horizontal)
|
||||||
class MainMenu : MenuWidgetBase {
|
class MainMenu : MenuWidgetBase {
|
||||||
|
|
||||||
this(MenuItem item) {
|
this(MenuItem item) {
|
||||||
|
@ -191,6 +183,7 @@ class MainMenu : MenuWidgetBase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// popup menu widget (vertical layout of items)
|
||||||
class PopupMenu : MenuWidgetBase {
|
class PopupMenu : MenuWidgetBase {
|
||||||
|
|
||||||
this(MenuItem item, MenuWidgetBase parentMenu = null) {
|
this(MenuItem item, MenuWidgetBase parentMenu = null) {
|
||||||
|
@ -200,4 +193,3 @@ class PopupMenu : MenuWidgetBase {
|
||||||
selectOnHover = true;
|
selectOnHover = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue