X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTWidget.java;h=2ca7108146c0090809d543b91233da31adda130b;hb=2b9c27db318b916730aa04f2b41bd3bff795a5dc;hp=e07594997d1b208a4824191030f429a849457dc8;hpb=fca67db090dc7e6476b98b800ce225c2bf60425c;p=fanfix.git diff --git a/src/jexer/TWidget.java b/src/jexer/TWidget.java index e075949..2ca7108 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,13 +41,14 @@ import jexer.event.TMenuEvent; import jexer.event.TMouseEvent; import jexer.event.TResizeEvent; import jexer.io.Screen; +import jexer.menu.TMenu; import static jexer.TKeypress.*; /** * TWidget is the base class of all objects that can be drawn on screen or * handle user input events. */ -public abstract class TWidget { +public abstract class TWidget implements Comparable { /** * Every widget has a parent widget that it may be "contained" in. For @@ -55,6 +57,15 @@ public abstract class TWidget { */ 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. * @@ -75,11 +86,45 @@ public abstract class TWidget { 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. */ @@ -104,7 +149,7 @@ public abstract class TWidget { * * @param active if true, this widget will receive events */ - public final void setActive(boolean active) { + public final void setActive(final boolean active) { this.active = active; } @@ -113,6 +158,15 @@ public abstract class TWidget { */ private TWindow window = null; + /** + * Get the window this widget is on. + * + * @return the window + */ + public final TWindow getWindow() { + return window; + } + /** * Absolute X position of the top-left corner. */ @@ -278,12 +332,19 @@ public abstract class TWidget { private int cursorY = 0; /** - * Comparison operator sorts on tabOrder. + * Comparison operator sorts on tabOrder for TWidgets and z for TWindows. * - * @param that another TWidget instance - * @return difference between this.tabOrder and that.tabOrder + * @param that another TWidget or TWindow instance + * @return difference between this.tabOrder and that.tabOrder, or + * difference between this.z and that.z */ - public final int compare(final TWidget that) { + @Override + public final int compareTo(final TWidget that) { + if ((this instanceof TWindow) + && (that instanceof TWindow) + ) { + return (((TWindow) this).getZ() - ((TWindow) that).getZ()); + } return (this.tabOrder - that.tabOrder); } @@ -358,6 +419,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). @@ -429,6 +499,17 @@ public abstract class TWidget { * @param parent parent widget */ protected TWidget(final TWidget parent) { + this(parent, true); + } + + /** + * Protected constructor used by subclasses that are disabled by default. + * + * @param parent parent widget + * @param enabled if true assume enabled + */ + protected TWidget(final TWidget parent, final boolean enabled) { + this.enabled = enabled; this.parent = parent; this.window = parent.window; children = new LinkedList(); @@ -571,7 +652,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) ) { @@ -832,4 +913,48 @@ public abstract class TWidget { return false; } + /** + * Convenience function to add a label to this container/window. + * + * @param text label + * @param x column relative to parent + * @param y row relative to parent + * @return the new label + */ + public final TLabel addLabel(final String text, final int x, final int y) { + return addLabel(text, x, y, "tlabel"); + } + + /** + * Convenience function to add a label to this container/window. + * + * @param text label + * @param x column relative to parent + * @param y row relative to parent + * @param colorKey ColorTheme key color to use for foreground text. + * Default is "tlabel" + * @return the new label + */ + public final TLabel addLabel(final String text, final int x, final int y, + final String colorKey) { + + return new TLabel(this, text, x, y, colorKey); + } + + /** + * Convenience function to add a button to this container/window. + * + * @param text label on the button + * @param x column relative to parent + * @param y row relative to parent + * @param action to call when button is pressed + * @return the new button + */ + public final TButton addButton(final String text, final int x, final int y, + final TAction action) { + + return new TButton(this, text, x, y, action); + } + + }