X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTWidget.java;h=d0c6b8177dac3a818ea8a0554f86d813fb356d3b;hb=928811d8e292801029b7b6605453524f65e9ebd9;hp=6312d087c84e12258a0d89db4e6624af9576f797;hpb=48e27807150e00bc9a92844382ebc8cedf1d265f;p=nikiroo-utils.git diff --git a/src/jexer/TWidget.java b/src/jexer/TWidget.java index 6312d08..d0c6b81 100644 --- a/src/jexer/TWidget.java +++ b/src/jexer/TWidget.java @@ -33,6 +33,7 @@ package jexer; import java.util.List; import java.util.LinkedList; +import jexer.bits.ColorTheme; import jexer.event.TCommandEvent; import jexer.event.TInputEvent; import jexer.event.TKeypressEvent; @@ -40,6 +41,7 @@ import jexer.event.TMenuEvent; import jexer.event.TMouseEvent; import jexer.event.TResizeEvent; import jexer.io.Screen; +import jexer.menu.TMenu; import static jexer.TKeypress.*; /** @@ -53,13 +55,76 @@ public abstract class TWidget { * example, a TWindow might contain several TTextFields, or a TComboBox * may contain a TScrollBar. */ - protected TWidget parent = null; + private TWidget parent = null; + + /** + * Get parent widget. + * + * @return parent widget + */ + public final TWidget getParent() { + return parent; + } + + /** + * Backdoor access for TWindow's constructor. ONLY TWindow USES THIS. + * + * @param window the top-level window + * @param x column relative to parent + * @param y row relative to parent + * @param width width of window + * @param height height of window + */ + protected final void setupForTWindow(final TWindow window, + final int x, final int y, final int width, final int height) { + + this.parent = window; + this.window = window; + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + /** + * Request full repaint on next screen refresh. + */ + protected final void setRepaint() { + window.getApplication().setRepaint(); + } + + /** + * Get this TWidget's parent TApplication. + * + * @return the parent TApplication + */ + public TApplication getApplication() { + return window.getApplication(); + } + + /** + * Get the Screen. + * + * @return the Screen + */ + public Screen getScreen() { + return window.getScreen(); + } /** * Child widgets that this widget contains. */ private List children; + /** + * Get the list of child widgets that this widget contains. + * + * @return the list of child widgets + */ + public List getChildren() { + return children; + } + /** * The currently active child widget that will receive keypress events. */ @@ -68,32 +133,122 @@ public abstract class TWidget { /** * If true, this widget will receive events. */ - protected boolean active = false; + private boolean active = false; + + /** + * Get active flag. + * + * @return if true, this widget will receive events + */ + public final boolean getActive() { + return active; + } + + /** + * Set active flag. + * + * @param active if true, this widget will receive events + */ + public final void setActive(final boolean active) { + this.active = active; + } /** * The window that this widget draws to. */ - protected TWindow window = null; + private TWindow window = null; /** * Absolute X position of the top-left corner. */ - protected int x = 0; + private int x = 0; + + /** + * Get X position. + * + * @return absolute X position of the top-left corner + */ + public final int getX() { + return x; + } + + /** + * Set X position. + * + * @param x absolute X position of the top-left corner + */ + public final void setX(final int x) { + this.x = x; + } /** * Absolute Y position of the top-left corner. */ - protected int y = 0; + private int y = 0; + + /** + * Get Y position. + * + * @return absolute Y position of the top-left corner + */ + public final int getY() { + return y; + } + + /** + * Set Y position. + * + * @param y absolute Y position of the top-left corner + */ + public final void setY(final int y) { + this.y = y; + } /** * Width. */ - protected int width = 0; + private int width = 0; + + /** + * Get the width. + * + * @return widget width + */ + public final int getWidth() { + return this.width; + } + + /** + * Change the width. + * + * @param width new widget width + */ + public final void setWidth(final int width) { + this.width = width; + } /** * Height. */ - protected int height = 0; + private int height = 0; + + /** + * Get the height. + * + * @return widget height + */ + public final int getHeight() { + return this.height; + } + + /** + * Change the height. + * + * @param height new widget height + */ + public final void setHeight(final int height) { + this.height = height; + } /** * My tab order inside a window or containing widget. @@ -121,19 +276,15 @@ public abstract class TWidget { */ public final void setEnabled(final boolean enabled) { this.enabled = enabled; - /* - - // TODO: get this working after scrollers are going again - - if (enabled == false) { + if (!enabled) { active = false; // See if there are any active siblings to switch to boolean foundSibling = false; - if (parent !is null) { - foreach (w; parent.children) { - if ((w.enabled) && - (!cast(THScroller)this) && - (!cast(TVScroller)this) + if (parent != null) { + for (TWidget w: parent.children) { + if ((w.enabled) + && !(this instanceof THScroller) + && !(this instanceof TVScroller) ) { parent.activate(w); foundSibling = true; @@ -145,7 +296,6 @@ public abstract class TWidget { } } } - */ } /** @@ -153,6 +303,15 @@ public abstract class TWidget { */ private boolean hasCursor = false; + /** + * See if this widget has a visible cursor. + * + * @return if true, this widget has a visible cursor + */ + public final boolean visibleCursor() { + return hasCursor; + } + /** * Cursor column position in relative coordinates. */ @@ -244,6 +403,15 @@ public abstract class TWidget { return parent.getAbsoluteY() + y; } + /** + * Get the global color theme. + * + * @return the ColorTheme + */ + public final ColorTheme getTheme() { + return window.getApplication().getTheme(); + } + /** * Draw my specific widget. When called, the screen rectangle I draw * into is already setup (offset and clipping). @@ -303,7 +471,7 @@ public abstract class TWidget { } /** - * Subclasses need this constructor to setup children. + * Default constructor for subclasses. */ protected TWidget() { children = new LinkedList(); @@ -317,7 +485,7 @@ public abstract class TWidget { protected TWidget(final TWidget parent) { this.parent = parent; this.window = parent.window; - + children = new LinkedList(); parent.addChild(this); } @@ -457,7 +625,7 @@ public abstract class TWidget { * * @return widget that is active, or this if no children */ - public final TWidget getActiveChild() { + public TWidget getActiveChild() { if ((this instanceof THScroller) || (this instanceof TVScroller) ) { @@ -481,6 +649,7 @@ public abstract class TWidget { public void onKeypress(final TKeypressEvent keypress) { if ((children.size() == 0) + // TODO // || (cast(TTreeView)this) // || (cast(TText)this) ) {