* 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<TWidget> {
/**
* Every widget has a parent widget that it may be "contained" in. For
*/
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.
*/
*/
private boolean hasCursor = false;
+ /**
+ * Set visible cursor flag.
+ *
+ * @param hasCursor if true, this widget has a cursor
+ */
+ public final void setHasCursor(final boolean hasCursor) {
+ this.hasCursor = hasCursor;
+ }
+
/**
* See if this widget has a visible cursor.
*
*/
private int cursorX = 0;
+ /**
+ * Get cursor X value.
+ *
+ * @return cursor column position in relative coordinates
+ */
+ public final int getCursorX() {
+ return cursorX;
+ }
+
+ /**
+ * Set cursor X value.
+ *
+ * @param cursorX column position in relative coordinates
+ */
+ public final void setCursorX(final int cursorX) {
+ this.cursorX = cursorX;
+ }
+
/**
* Cursor row position in relative coordinates.
*/
private int cursorY = 0;
/**
- * Comparison operator sorts on tabOrder.
+ * Get cursor Y value.
+ *
+ * @return cursor row position in relative coordinates
+ */
+ public final int getCursorY() {
+ return cursorY;
+ }
+
+ /**
+ * Set cursor Y value.
*
- * @param that another TWidget instance
- * @return difference between this.tabOrder and that.tabOrder
+ * @param cursorY row position in relative coordinates
*/
- public final int compare(final TWidget that) {
+ public final void setCursorY(final int cursorY) {
+ this.cursorY = cursorY;
+ }
+
+ /**
+ * Comparison operator sorts on tabOrder for TWidgets and z for TWindows.
+ *
+ * @param that another TWidget or TWindow instance
+ * @return difference between this.tabOrder and that.tabOrder, or
+ * difference between this.z and that.z
+ */
+ @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);
}
* @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<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);
+ }
+
+ /**
+ * Convenience function to add a checkbox to this container/window.
+ *
+ * @param x column relative to parent
+ * @param y row relative to parent
+ * @param label label to display next to (right of) the checkbox
+ * @param checked initial check state
+ * @return the new checkbox
+ */
+ public final TCheckbox addCheckbox(final int x, final int y,
+ final String label, final boolean checked) {
+
+ return new TCheckbox(this, x, y, label, checked);
+ }
+
+ /**
+ * Convenience function to add a progress bar to this container/window.
+ *
+ * @param x column relative to parent
+ * @param y row relative to parent
+ * @param width width of progress bar
+ * @param value initial value of percent complete
+ * @return the new progress bar
+ */
+ public final TProgressBar addProgressBar(final int x, final int y,
+ final int width, final int value) {
+
+ return new TProgressBar(this, x, y, width, value);
+ }
+
+ /**
+ * Convenience function to add a radio button group to this
+ * container/window.
+ *
+ * @param x column relative to parent
+ * @param y row relative to parent
+ * @param label label to display on the group box
+ * @return the new radio button group
+ */
+ public final TRadioGroup addRadioGroup(final int x, final int y,
+ final String label) {
+
+ return new TRadioGroup(this, x, y, label);
+ }
+
+ /**
+ * Convenience function to add a text field to this container/window.
+ *
+ * @param x column relative to parent
+ * @param y row relative to parent
+ * @param width visible text width
+ * @param fixed if true, the text cannot exceed the display width
+ * @return the new text field
+ */
+ public final TField addField(final int x, final int y,
+ final int width, final boolean fixed) {
+
+ return new TField(this, x, y, width, fixed);
+ }
+
+ /**
+ * Convenience function to add a text field to this container/window.
+ *
+ * @param x column relative to parent
+ * @param y row relative to parent
+ * @param width visible text width
+ * @param fixed if true, the text cannot exceed the display width
+ * @param text initial text, default is empty string
+ * @return the new text field
+ */
+ public final TField addField(final int x, final int y,
+ final int width, final boolean fixed, final String text) {
+
+ return new TField(this, x, y, width, fixed, text);
+ }
+
+ /**
+ * Convenience function to add a text field to this container/window.
+ *
+ * @param x column relative to parent
+ * @param y row relative to parent
+ * @param width visible text width
+ * @param fixed if true, the text cannot exceed the display width
+ * @param text initial text, default is empty string
+ * @param enterAction function to call when enter key is pressed
+ * @param updateAction function to call when the text is updated
+ * @return the new text field
+ */
+ public final TField addField(final int x, final int y,
+ final int width, final boolean fixed, final String text,
+ final TAction enterAction, final TAction updateAction) {
+
+ return new TField(this, x, y, width, fixed, text, enterAction,
+ updateAction);
+ }
+
+ /**
+ * Convenience function to add a scrollable text 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
+ * @param colorKey ColorTheme key color to use for foreground text
+ * @return the new text box
+ */
+ public final TText addText(final String text, final int x,
+ final int y, final int width, final int height, final String colorKey) {
+
+ return new TText(this, text, x, y, width, height, colorKey);
+ }
+
+ /**
+ * Convenience function to add a scrollable text 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 TText addText(final String text, final int x, final int y,
+ final int width, final int height) {
+
+ return new TText(this, text, x, y, width, height, "ttext");
+ }
+
+ /**
+ * Convenience function to spawn a message box.
+ *
+ * @param title window title, will be centered along the top border
+ * @param caption message to display. Use embedded newlines to get a
+ * multi-line box.
+ * @return the new message box
+ */
+ public final TMessageBox messageBox(final String title,
+ final String caption) {
+
+ return getApplication().messageBox(title, caption, TMessageBox.Type.OK);
+ }
+
+ /**
+ * Convenience function to spawn a message box.
+ *
+ * @param title window title, will be centered along the top border
+ * @param caption message to display. Use embedded newlines to get a
+ * multi-line box.
+ * @param type one of the TMessageBox.Type constants. Default is
+ * Type.OK.
+ * @return the new message box
+ */
+ public final TMessageBox messageBox(final String title,
+ final String caption, final TMessageBox.Type type) {
+
+ return getApplication().messageBox(title, caption, type);
+ }
+
+ /**
+ * Convenience function to spawn an input box.
+ *
+ * @param title window title, will be centered along the top border
+ * @param caption message to display. Use embedded newlines to get a
+ * multi-line box.
+ * @return the new input box
+ */
+ public final TInputBox inputBox(final String title, final String caption) {
+
+ return getApplication().inputBox(title, caption);
+ }
+
+ /**
+ * Convenience function to spawn an input box.
+ *
+ * @param title window title, will be centered along the top border
+ * @param caption message to display. Use embedded newlines to get a
+ * multi-line box.
+ * @param text initial text to seed the field with
+ * @return the new input box
+ */
+ public final TInputBox inputBox(final String title, final String caption,
+ final String text) {
+
+ return getApplication().inputBox(title, caption, text);
+ }
+
+ /**
+ * Convenience function to add a password text field to this
+ * container/window.
+ *
+ * @param x column relative to parent
+ * @param y row relative to parent
+ * @param width visible text width
+ * @param fixed if true, the text cannot exceed the display width
+ * @return the new text field
+ */
+ public final TPasswordField addPasswordField(final int x, final int y,
+ final int width, final boolean fixed) {
+
+ return new TPasswordField(this, x, y, width, fixed);
+ }
+
+ /**
+ * Convenience function to add a password text field to this
+ * container/window.
+ *
+ * @param x column relative to parent
+ * @param y row relative to parent
+ * @param width visible text width
+ * @param fixed if true, the text cannot exceed the display width
+ * @param text initial text, default is empty string
+ * @return the new text field
+ */
+ public final TPasswordField addPasswordField(final int x, final int y,
+ final int width, final boolean fixed, final String text) {
+
+ return new TPasswordField(this, x, y, width, fixed, text);
+ }
+
+ /**
+ * Convenience function to add a password text field to this
+ * container/window.
+ *
+ * @param x column relative to parent
+ * @param y row relative to parent
+ * @param width visible text width
+ * @param fixed if true, the text cannot exceed the display width
+ * @param text initial text, default is empty string
+ * @param enterAction function to call when enter key is pressed
+ * @param updateAction function to call when the text is updated
+ * @return the new text field
+ */
+ public final TPasswordField addPasswordField(final int x, final int y,
+ final int width, final boolean fixed, final String text,
+ final TAction enterAction, final TAction updateAction) {
+
+ return new TPasswordField(this, x, y, width, fixed, text, enterAction,
+ updateAction);
+ }
+
}