X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTWidget.java;h=d292ec1490c938f304e142a565551d8eb6060e74;hb=be72cb5ccbd42fe304c0acafc380c5636f0d03a2;hp=4450e52fbe97c094bbbf554021536024f878903f;hpb=49befbbc7844658943c919ba0654da3d2bc91303;p=fanfix.git diff --git a/src/jexer/TWidget.java b/src/jexer/TWidget.java index 4450e52..d292ec1 100644 --- a/src/jexer/TWidget.java +++ b/src/jexer/TWidget.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.util.List; import java.util.ArrayList; +import jexer.backend.Screen; import jexer.bits.ColorTheme; import jexer.event.TCommandEvent; import jexer.event.TInputEvent; @@ -39,7 +40,6 @@ import jexer.event.TKeypressEvent; import jexer.event.TMenuEvent; import jexer.event.TMouseEvent; import jexer.event.TResizeEvent; -import jexer.io.Screen; import jexer.menu.TMenu; import static jexer.TKeypress.*; @@ -217,6 +217,23 @@ public abstract class TWidget implements Comparable { this.height = height; } + /** + * Change the dimensions. + * + * @param x absolute X position of the top-left corner + * @param y absolute Y position of the top-left corner + * @param width new widget width + * @param height new widget height + */ + public final void setDimensions(final int x, final int y, final int width, + final int height) { + + setX(x); + setY(y); + setWidth(width); + setHeight(height); + } + /** * My tab order inside a window or containing widget. */ @@ -427,7 +444,10 @@ public abstract class TWidget implements Comparable { if (parent == this) { return x; } - if ((parent instanceof TWindow) && !(parent instanceof TMenu)) { + if ((parent instanceof TWindow) + && !(parent instanceof TMenu) + && !(parent instanceof TDesktop) + ) { // Widgets on a TWindow have (0,0) as their top-left, but this is // actually the TWindow's (1,1). return parent.getAbsoluteX() + x + 1; @@ -446,7 +466,10 @@ public abstract class TWidget implements Comparable { if (parent == this) { return y; } - if ((parent instanceof TWindow) && !(parent instanceof TMenu)) { + if ((parent instanceof TWindow) + && !(parent instanceof TMenu) + && !(parent instanceof TDesktop) + ) { // Widgets on a TWindow have (0,0) as their top-left, but this is // actually the TWindow's (1,1). return parent.getAbsoluteY() + y + 1; @@ -527,6 +550,13 @@ public abstract class TWidget implements Comparable { } } + /** + * Repaint the screen on the next update. + */ + public void doRepaint() { + window.getApplication().doRepaint(); + } + // ------------------------------------------------------------------------ // Constructors ----------------------------------------------------------- // ------------------------------------------------------------------------ @@ -928,9 +958,15 @@ public abstract class TWidget implements Comparable { * @param resize resize event */ public void onResize(final TResizeEvent resize) { - // Default: do nothing, pass to children instead - for (TWidget widget: children) { - widget.onResize(resize); + // Default: change my width/height. + if (resize.getType() == TResizeEvent.Type.WIDGET) { + width = resize.getWidth(); + height = resize.getHeight(); + } else { + // Let children see the screen resize + for (TWidget widget: children) { + widget.onResize(resize); + } } } @@ -961,7 +997,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 @@ -1200,6 +1237,23 @@ public abstract class TWidget implements Comparable { return new TText(this, text, x, y, width, height, "ttext"); } + /** + * Convenience function to add an editable text area box to this + * container/window. + * + * @param text text on the screen + * @param x column relative to parent + * @param y row relative to parent + * @param width width of text area + * @param height height of text area + * @return the new text box + */ + public final TEditorWidget addEditor(final String text, final int x, + final int y, final int width, final int height) { + + return new TEditorWidget(this, text, x, y, width, height); + } + /** * Convenience function to spawn a message box. *