X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTWidget.java;h=169e5576be85d09a4aedd865ecc680a84d45e2f9;hb=3eacc236973b94764d86b67ce836ae72e05c0687;hp=08c0a45ca9c68c28c8345b14faa5f1344d852daf;hpb=12b55d76e3473407bf37fca3667860240cb8f3be;p=fanfix.git diff --git a/src/jexer/TWidget.java b/src/jexer/TWidget.java index 08c0a45..169e557 100644 --- a/src/jexer/TWidget.java +++ b/src/jexer/TWidget.java @@ -302,6 +302,25 @@ public abstract class TWidget implements Comparable { * @return if true, this widget has a visible cursor */ public final boolean isCursorVisible() { + // If cursor is out of my bounds, it is not visible. + if ((cursorX >= width) + || (cursorX < 0) + || (cursorY >= height) + || (cursorY < 0) + ) { + return false; + } + + // If cursor is out of my window's bounds, it is not visible. + if ((getCursorAbsoluteX() >= window.getAbsoluteX() + + window.getWidth() - 1) + || (getCursorAbsoluteX() < 0) + || (getCursorAbsoluteY() >= window.getAbsoluteY() + + window.getHeight() - 1) + || (getCursorAbsoluteY() < 0) + ) { + return false; + } return cursorVisible; } @@ -419,7 +438,6 @@ public abstract class TWidget implements Comparable { * @return absolute screen column number for the cursor's X position */ public final int getCursorAbsoluteX() { - assert (cursorVisible); return getAbsoluteX() + cursorX; } @@ -429,7 +447,6 @@ public abstract class TWidget implements Comparable { * @return absolute screen row number for the cursor's Y position */ public final int getCursorAbsoluteY() { - assert (cursorVisible); return getAbsoluteY() + cursorY; } @@ -550,6 +567,13 @@ public abstract class TWidget implements Comparable { } } + /** + * Repaint the screen on the next update. + */ + public void doRepaint() { + window.getApplication().doRepaint(); + } + // ------------------------------------------------------------------------ // Constructors ----------------------------------------------------------- // ------------------------------------------------------------------------ @@ -596,7 +620,12 @@ public abstract class TWidget implements Comparable { this.parent = parent; this.window = parent.window; children = new ArrayList(); - parent.addChild(this); + + // Do not add TStatusBars, they are drawn by TApplication + if (this instanceof TStatusBar) { + } else { + parent.addChild(this); + } } /** @@ -616,7 +645,12 @@ public abstract class TWidget implements Comparable { this.parent = parent; this.window = parent.window; children = new ArrayList(); - parent.addChild(this); + + // Do not add TStatusBars, they are drawn by TApplication + if (this instanceof TStatusBar) { + } else { + parent.addChild(this); + } this.x = x; this.y = y; @@ -944,6 +978,29 @@ public abstract class TWidget implements Comparable { } } + /** + * Method that subclasses can override to handle mouse button + * double-clicks. + * + * @param mouse mouse button event + */ + public void onMouseDoubleClick(final TMouseEvent mouse) { + // Default: do nothing, pass to children instead + for (int i = children.size() - 1 ; i >= 0 ; i--) { + TWidget widget = children.get(i); + if (widget.mouseWouldHit(mouse)) { + // Dispatch to this child, also activate it + activate(widget); + + // Set x and y relative to the child's coordinates + mouse.setX(mouse.getAbsoluteX() - widget.getAbsoluteX()); + mouse.setY(mouse.getAbsoluteY() - widget.getAbsoluteY()); + widget.handleEvent(mouse); + return; + } + } + } + /** * Method that subclasses can override to handle window/screen resize * events. @@ -990,7 +1047,8 @@ public abstract class TWidget implements Comparable { /** * Method that subclasses can override to do processing when the UI is - * idle. + * idle. Note that repainting is NOT assumed. To get a refresh after + * onIdle, call doRepaint(). */ public void onIdle() { // Default: do nothing, pass to children instead @@ -1035,6 +1093,10 @@ public abstract class TWidget implements Comparable { onMouseMotion(mouse); break; + case MOUSE_DOUBLE_CLICK: + onMouseDoubleClick(mouse); + break; + default: throw new IllegalArgumentException("Invalid mouse event type: " + mouse.getType());