mirror of https://github.com/buggins/dlangui.git
popup menu, part 1
This commit is contained in:
parent
cb9b46719c
commit
a33cf6dcec
|
@ -157,7 +157,7 @@ class Window {
|
|||
_mouseTrackingWidgets.length--;
|
||||
continue;
|
||||
}
|
||||
if (!w.isPointInside(event.x, event.y)) {
|
||||
if (event.action == MouseAction.Leave || !w.isPointInside(event.x, event.y)) {
|
||||
// send Leave message
|
||||
MouseEvent leaveEvent = new MouseEvent(event);
|
||||
leaveEvent.changeAction(MouseAction.Leave);
|
||||
|
@ -254,7 +254,7 @@ class Window {
|
|||
return res;
|
||||
}
|
||||
bool processed = false;
|
||||
if (event.action == MouseAction.Move) {
|
||||
if (event.action == MouseAction.Move || event.action == MouseAction.Leave) {
|
||||
processed = checkRemoveTracking(event);
|
||||
}
|
||||
if (!res) {
|
||||
|
|
|
@ -98,7 +98,7 @@ class ListWidget : WidgetGroup, OnScrollHandler {
|
|||
onAdapterChanged();
|
||||
return this;
|
||||
}
|
||||
/// set adapter
|
||||
/// set adapter, which will be owned by list (destroy will be called for adapter on widget destroy)
|
||||
@property ListWidget ownAdapter(ListAdapter adapter) {
|
||||
if (_adapter !is null && _ownAdapter)
|
||||
destroy(_adapter);
|
||||
|
|
|
@ -3,34 +3,45 @@ module dlangui.widgets.menu;
|
|||
import dlangui.core.events;
|
||||
import dlangui.widgets.controls;
|
||||
import dlangui.widgets.layouts;
|
||||
import dlangui.widgets.lists;
|
||||
|
||||
class MenuItem {
|
||||
bool _checkable;
|
||||
bool _checked;
|
||||
bool _enabled;
|
||||
protected bool _checkable;
|
||||
protected bool _checked;
|
||||
protected bool _enabled;
|
||||
protected Action _action;
|
||||
MenuItem[] _subitems;
|
||||
protected MenuItem[] _subitems;
|
||||
/// item action id, 0 if no action
|
||||
@property int id() { return _action is null ? 0 : _action.id; }
|
||||
/// returns count of submenu items
|
||||
@property int subitemCount() {
|
||||
return cast(int)_subitems.length;
|
||||
}
|
||||
/// returns submenu item by index
|
||||
MenuItem subitem(int index) {
|
||||
return _subitems[index];
|
||||
}
|
||||
/// adds submenu item
|
||||
MenuItem add(MenuItem subitem) {
|
||||
_subitems ~= subitem;
|
||||
return this;
|
||||
}
|
||||
/// adds submenu item from action
|
||||
MenuItem add(Action subitemAction) {
|
||||
_subitems ~= new MenuItem(subitemAction);
|
||||
return this;
|
||||
}
|
||||
/// returns true if item is submenu (contains subitems)
|
||||
@property bool isSubmenu() {
|
||||
return _subitems.length > 0;
|
||||
}
|
||||
/// returns item label
|
||||
@property UIString label() {
|
||||
return _action.labelValue;
|
||||
}
|
||||
/// returns item action
|
||||
@property const(Action) action() const { return _action; }
|
||||
/// sets item action
|
||||
@property MenuItem action(Action a) { _action = a; return this; }
|
||||
this() {
|
||||
_enabled = true;
|
||||
|
@ -59,16 +70,36 @@ class MenuItemWidget : HorizontalLayout {
|
|||
}
|
||||
|
||||
class MainMenu : HorizontalLayout {
|
||||
MenuItem _item;
|
||||
protected MenuItem _item;
|
||||
protected bool onItemClick(Widget w) {
|
||||
Log.d("onItemClick ", w.id);
|
||||
return true;
|
||||
}
|
||||
this(MenuItem item) {
|
||||
id = "MAIN_MENU";
|
||||
styleId = "MAIN_MENU";
|
||||
_item = item;
|
||||
for (int i = 0; i < item.subitemCount; i++) {
|
||||
MenuItemWidget subitem = new MenuItemWidget(item.subitem(i));
|
||||
subitem.onClickListener = &onItemClick;
|
||||
addChild(subitem);
|
||||
|
||||
}
|
||||
addChild((new Widget()).layoutWidth(FILL_PARENT));
|
||||
}
|
||||
}
|
||||
|
||||
class PopupMenu : ListWidget {
|
||||
protected MenuItem _item;
|
||||
this(MenuItem item) {
|
||||
id = "popup_menu";
|
||||
styleId = "POPUP_MENU";
|
||||
_item = item;
|
||||
WidgetListAdapter adapter = new WidgetListAdapter();
|
||||
for (int i=0; i < _item.subitemCount; i++) {
|
||||
MenuItem subitem = _item.subitem(i);
|
||||
MenuItemWidget widget = new MenuItemWidget(subitem);
|
||||
adapter.widgets.add(widget);
|
||||
}
|
||||
ownAdapter = adapter;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -670,6 +670,8 @@ Theme createDefaultTheme() {
|
|||
menuItem.createState(State.Pressed, State.Pressed).backgroundColor(0x4080C000);
|
||||
menuItem.createState(State.Hovered, State.Hovered).backgroundColor(0x80FFFF00);
|
||||
|
||||
Style poopupMenu = res.createSubstyle("POPUP_MENU").backgroundImageId("btn_default_small");
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue