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--;
|
_mouseTrackingWidgets.length--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!w.isPointInside(event.x, event.y)) {
|
if (event.action == MouseAction.Leave || !w.isPointInside(event.x, event.y)) {
|
||||||
// send Leave message
|
// send Leave message
|
||||||
MouseEvent leaveEvent = new MouseEvent(event);
|
MouseEvent leaveEvent = new MouseEvent(event);
|
||||||
leaveEvent.changeAction(MouseAction.Leave);
|
leaveEvent.changeAction(MouseAction.Leave);
|
||||||
|
@ -254,7 +254,7 @@ class Window {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
bool processed = false;
|
bool processed = false;
|
||||||
if (event.action == MouseAction.Move) {
|
if (event.action == MouseAction.Move || event.action == MouseAction.Leave) {
|
||||||
processed = checkRemoveTracking(event);
|
processed = checkRemoveTracking(event);
|
||||||
}
|
}
|
||||||
if (!res) {
|
if (!res) {
|
||||||
|
|
|
@ -98,7 +98,7 @@ class ListWidget : WidgetGroup, OnScrollHandler {
|
||||||
onAdapterChanged();
|
onAdapterChanged();
|
||||||
return this;
|
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) {
|
@property ListWidget ownAdapter(ListAdapter adapter) {
|
||||||
if (_adapter !is null && _ownAdapter)
|
if (_adapter !is null && _ownAdapter)
|
||||||
destroy(_adapter);
|
destroy(_adapter);
|
||||||
|
|
|
@ -3,34 +3,45 @@ module dlangui.widgets.menu;
|
||||||
import dlangui.core.events;
|
import dlangui.core.events;
|
||||||
import dlangui.widgets.controls;
|
import dlangui.widgets.controls;
|
||||||
import dlangui.widgets.layouts;
|
import dlangui.widgets.layouts;
|
||||||
|
import dlangui.widgets.lists;
|
||||||
|
|
||||||
class MenuItem {
|
class MenuItem {
|
||||||
bool _checkable;
|
protected bool _checkable;
|
||||||
bool _checked;
|
protected bool _checked;
|
||||||
bool _enabled;
|
protected bool _enabled;
|
||||||
protected Action _action;
|
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() {
|
@property int subitemCount() {
|
||||||
return cast(int)_subitems.length;
|
return cast(int)_subitems.length;
|
||||||
}
|
}
|
||||||
|
/// returns submenu item by index
|
||||||
MenuItem subitem(int index) {
|
MenuItem subitem(int index) {
|
||||||
return _subitems[index];
|
return _subitems[index];
|
||||||
}
|
}
|
||||||
|
/// adds submenu item
|
||||||
MenuItem add(MenuItem subitem) {
|
MenuItem add(MenuItem subitem) {
|
||||||
_subitems ~= subitem;
|
_subitems ~= subitem;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
/// adds submenu item from action
|
||||||
MenuItem add(Action subitemAction) {
|
MenuItem add(Action subitemAction) {
|
||||||
_subitems ~= new MenuItem(subitemAction);
|
_subitems ~= new MenuItem(subitemAction);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
/// returns true if item is submenu (contains subitems)
|
||||||
@property bool isSubmenu() {
|
@property bool isSubmenu() {
|
||||||
return _subitems.length > 0;
|
return _subitems.length > 0;
|
||||||
}
|
}
|
||||||
|
/// returns item label
|
||||||
@property UIString label() {
|
@property UIString label() {
|
||||||
return _action.labelValue;
|
return _action.labelValue;
|
||||||
}
|
}
|
||||||
|
/// returns item action
|
||||||
@property const(Action) action() const { return _action; }
|
@property const(Action) action() const { return _action; }
|
||||||
|
/// sets item action
|
||||||
@property MenuItem action(Action a) { _action = a; return this; }
|
@property MenuItem action(Action a) { _action = a; return this; }
|
||||||
this() {
|
this() {
|
||||||
_enabled = true;
|
_enabled = true;
|
||||||
|
@ -59,16 +70,36 @@ class MenuItemWidget : HorizontalLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
class MainMenu : HorizontalLayout {
|
class MainMenu : HorizontalLayout {
|
||||||
MenuItem _item;
|
protected MenuItem _item;
|
||||||
|
protected bool onItemClick(Widget w) {
|
||||||
|
Log.d("onItemClick ", w.id);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
this(MenuItem item) {
|
this(MenuItem item) {
|
||||||
id = "MAIN_MENU";
|
id = "MAIN_MENU";
|
||||||
styleId = "MAIN_MENU";
|
styleId = "MAIN_MENU";
|
||||||
_item = item;
|
_item = item;
|
||||||
for (int i = 0; i < item.subitemCount; i++) {
|
for (int i = 0; i < item.subitemCount; i++) {
|
||||||
MenuItemWidget subitem = new MenuItemWidget(item.subitem(i));
|
MenuItemWidget subitem = new MenuItemWidget(item.subitem(i));
|
||||||
|
subitem.onClickListener = &onItemClick;
|
||||||
addChild(subitem);
|
addChild(subitem);
|
||||||
|
|
||||||
}
|
}
|
||||||
addChild((new Widget()).layoutWidth(FILL_PARENT));
|
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.Pressed, State.Pressed).backgroundColor(0x4080C000);
|
||||||
menuItem.createState(State.Hovered, State.Hovered).backgroundColor(0x80FFFF00);
|
menuItem.createState(State.Hovered, State.Hovered).backgroundColor(0x80FFFF00);
|
||||||
|
|
||||||
|
Style poopupMenu = res.createSubstyle("POPUP_MENU").backgroundImageId("btn_default_small");
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue