X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTWidget.java;h=32b55983613a67914aec832d2d0ac7c6ab323287;hb=713de2aab8afa1556d987897a9f28b85f5c0f8a2;hp=ba18989bfc43d38ea0549e42f5f20dfb8358e1ab;hpb=1e71bba21116ce83e76501c2e60f85ba6113e82d;p=fanfix.git diff --git a/src/jexer/TWidget.java b/src/jexer/TWidget.java index ba18989..32b5598 100644 --- a/src/jexer/TWidget.java +++ b/src/jexer/TWidget.java @@ -184,14 +184,7 @@ public abstract class TWidget implements Comparable { * @param enabled if true assume enabled */ protected TWidget(final TWidget parent, final boolean enabled) { - this.enabled = enabled; - this.parent = parent; - children = new ArrayList(); - - if (parent != null) { - this.window = parent.window; - parent.addChild(this); - } + this(parent, enabled, 0, 0, 0, 0); } /** @@ -215,9 +208,20 @@ public abstract class TWidget implements Comparable { } this.enabled = enabled; - this.parent = parent; children = new ArrayList(); + // Allow parentless widgets + if (parent != null) { + // Do not add TStatusBars, they are drawn by TApplication. + if (this instanceof TStatusBar) { + // We don't add the child to the children list here + this.parent = parent; + this.window = parent.window; + } else { + parent.addChild(this); + } + } + this.x = x; this.y = y; this.width = width; @@ -935,8 +939,9 @@ public abstract class TWidget implements Comparable { this.x = x; this.y = y; - this.width = width; - this.height = height; + // Call the functions so that subclasses can choose how to handle it. + setWidth(width); + setHeight(height); if (layout != null) { layout.onResize(new TResizeEvent(TResizeEvent.Type.WIDGET, width, height)); @@ -1144,6 +1149,7 @@ public abstract class TWidget implements Comparable { * @return difference between this.tabOrder and that.tabOrder, or * difference between this.z and that.z, or String.compareTo(text) */ + @Override public final int compareTo(final TWidget that) { if ((this instanceof TWindow) && (that instanceof TWindow) @@ -1369,6 +1375,8 @@ public abstract class TWidget implements Comparable { */ private void addChild(final TWidget child) { children.add(child); + child.parent = this; + child.window = this.window; if ((child.enabled) && !(child instanceof THScroller) @@ -1397,6 +1405,29 @@ public abstract class TWidget implements Comparable { children.get(i).tabOrder = i; } } + + /** + * Remove and {@link TWidget#close()} the given child from this {@link TWidget}. + *

+ * Will also reorder the tab values of the remaining children. + * + * @param child the child to remove + * + * @return TRUE if the child was removed, FALSE if it was not found + */ + public boolean removeChild(final TWidget child) { + if (children.remove(child)) { + child.close(); + child.parent = null; + child.window = null; + + resetTabOrder(); + + return true; + } + + return false; + } /** * Switch the active child. @@ -1475,6 +1506,19 @@ public abstract class TWidget implements Comparable { } } + /** + * Make this widget, all of its parents, the active child. + */ + public final void activateAll() { + activate(); + if (parent == this) { + return; + } + if (parent != null) { + parent.activateAll(); + } + } + /** * Switch the active widget with the next in the tab order. * @@ -1605,11 +1649,10 @@ public abstract class TWidget implements Comparable { splitPane.setLeft(this); splitPane.setRight(newWidget); } - splitPane.activate(); if (newWidget != null) { - newWidget.activate(); + newWidget.activateAll(); } else { - activate(); + activateAll(); } assert (parent != null); @@ -1657,11 +1700,10 @@ public abstract class TWidget implements Comparable { splitPane.setTop(this); splitPane.setBottom(newWidget); } - splitPane.activate(); if (newWidget != null) { - newWidget.activate(); + newWidget.activateAll(); } else { - activate(); + activateAll(); } assert (parent != null);