mirror of https://github.com/buggins/dlangui.git
support key and mouse event listeners for widgets - to allow easy overriding key and mouse processing
This commit is contained in:
parent
819bbdabdd
commit
a5c4a0f59d
|
@ -81,6 +81,16 @@ interface OnFocusHandler {
|
||||||
bool onFocusChanged(Widget source, bool focused);
|
bool onFocusChanged(Widget source, bool focused);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// interface - slot for onKey
|
||||||
|
interface OnKeyHandler {
|
||||||
|
bool onKey(Widget source, KeyEvent event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// interface - slot for onMouse
|
||||||
|
interface OnMouseHandler {
|
||||||
|
bool onMouse(Widget source, MouseEvent event);
|
||||||
|
}
|
||||||
|
|
||||||
/// focus movement options
|
/// focus movement options
|
||||||
enum FocusMovement {
|
enum FocusMovement {
|
||||||
/// no focus movement
|
/// no focus movement
|
||||||
|
@ -880,6 +890,8 @@ class Widget {
|
||||||
|
|
||||||
/// process key event, return true if event is processed.
|
/// process key event, return true if event is processed.
|
||||||
bool onKeyEvent(KeyEvent event) {
|
bool onKeyEvent(KeyEvent event) {
|
||||||
|
if (onKeyListener.assigned && onKeyListener(this, event))
|
||||||
|
return true; // processed by external handler
|
||||||
if (event.action == KeyAction.KeyDown) {
|
if (event.action == KeyAction.KeyDown) {
|
||||||
Action action = findKeyAction(event.keyCode, event.flags & (KeyFlag.Shift | KeyFlag.Alt | KeyFlag.Control));
|
Action action = findKeyAction(event.keyCode, event.flags & (KeyFlag.Shift | KeyFlag.Alt | KeyFlag.Control));
|
||||||
if (action !is null) {
|
if (action !is null) {
|
||||||
|
@ -910,6 +922,8 @@ class Widget {
|
||||||
|
|
||||||
/// process mouse event; return true if event is processed by widget.
|
/// process mouse event; return true if event is processed by widget.
|
||||||
bool onMouseEvent(MouseEvent event) {
|
bool onMouseEvent(MouseEvent event) {
|
||||||
|
if (onMouseListener.assigned && onMouseListener(this, event))
|
||||||
|
return true; // processed by external handler
|
||||||
//Log.d("onMouseEvent ", id, " ", event.action, " (", event.x, ",", event.y, ")");
|
//Log.d("onMouseEvent ", id, " ", event.action, " (", event.x, ",", event.y, ")");
|
||||||
// support onClick
|
// support onClick
|
||||||
if (canClick) {
|
if (canClick) {
|
||||||
|
@ -977,6 +991,10 @@ class Widget {
|
||||||
Signal!OnCheckHandler onCheckChangeListener;
|
Signal!OnCheckHandler onCheckChangeListener;
|
||||||
/// focus state change event listener (bool delegate(Widget, bool))
|
/// focus state change event listener (bool delegate(Widget, bool))
|
||||||
Signal!OnFocusHandler onFocusChangeListener;
|
Signal!OnFocusHandler onFocusChangeListener;
|
||||||
|
/// key event listener (bool delegate(Widget, KeyEvent)) - return true if event is processed by handler
|
||||||
|
Signal!OnKeyHandler onKeyListener;
|
||||||
|
/// mouse event listener (bool delegate(Widget, MouseEvent)) - return true if event is processed by handler
|
||||||
|
Signal!OnMouseHandler onMouseListener;
|
||||||
|
|
||||||
/// helper function to add onCheckChangeListener in method chain
|
/// helper function to add onCheckChangeListener in method chain
|
||||||
Widget addOnClickListener(bool delegate(Widget) listener) {
|
Widget addOnClickListener(bool delegate(Widget) listener) {
|
||||||
|
|
Loading…
Reference in New Issue