Merge commit '8a1cae77d279cc246a68109f6178b2bb05e7471f'
[fanfix.git] / src / jexer / TWidget.java
index 32b55983613a67914aec832d2d0ac7c6ab323287..d60efd8d3a321236e2069199c6db2fb364505d69 100644 (file)
@@ -36,6 +36,7 @@ import java.util.ArrayList;
 import jexer.backend.Screen;
 import jexer.bits.Cell;
 import jexer.bits.CellAttributes;
+import jexer.bits.Clipboard;
 import jexer.bits.ColorTheme;
 import jexer.event.TCommandEvent;
 import jexer.event.TInputEvent;
@@ -208,20 +209,9 @@ public abstract class TWidget implements Comparable<TWidget> {
         }
 
         this.enabled = enabled;
+        this.parent = parent;
         children = new ArrayList<TWidget>();
 
-        // 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;
@@ -602,9 +592,8 @@ public abstract class TWidget implements Comparable<TWidget> {
      * @param command command event
      */
     public void onCommand(final TCommandEvent command) {
-        // Default: do nothing, pass to children instead
-        for (TWidget widget: children) {
-            widget.onCommand(command);
+        if (activeChild != null) {
+            activeChild.onCommand(command);
         }
     }
 
@@ -1137,6 +1126,18 @@ public abstract class TWidget implements Comparable<TWidget> {
         return null;
     }
 
+    /**
+     * Get the Clipboard.
+     *
+     * @return the Clipboard, or null if not assigned
+     */
+    public Clipboard getClipboard() {
+        if (window != null) {
+            return window.getApplication().getClipboard();
+        }
+        return null;
+    }
+
     /**
      * Comparison operator.  For various subclasses it sorts on:
      * <ul>
@@ -1150,7 +1151,7 @@ public abstract class TWidget implements Comparable<TWidget> {
      * difference between this.z and that.z, or String.compareTo(text)
      */
     @Override
-    public final int compareTo(final TWidget that) {
+    public int compareTo(final TWidget that) {
         if ((this instanceof TWindow)
             && (that instanceof TWindow)
         ) {
@@ -1373,10 +1374,8 @@ public abstract class TWidget implements Comparable<TWidget> {
      *
      * @param child TWidget to add
      */
-    private void addChild(final TWidget child) {
+    public void addChild(final TWidget child) {
         children.add(child);
-        child.parent = this;
-        child.window = this.window;
 
         if ((child.enabled)
             && !(child instanceof THScroller)
@@ -1416,17 +1415,17 @@ public abstract class TWidget implements Comparable<TWidget> {
      * @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;
+        if (children.remove(child)) {
+                child.close();
+                child.parent = null;
+                child.window = null;
+                
+                resetTabOrder();
+                
+                return true;
+        }
+        
+        return false;
     }
 
     /**
@@ -1452,9 +1451,9 @@ public abstract class TWidget implements Comparable<TWidget> {
                 if (activeChild != null) {
                     activeChild.active = false;
                 }
-                child.active = true;
-                activeChild = child;
             }
+            child.active = true;
+            activeChild = child;
         }
     }
 
@@ -2181,6 +2180,21 @@ public abstract class TWidget implements Comparable<TWidget> {
         return new TRadioGroup(this, x, y, label);
     }
 
+    /**
+     * 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 width width of group
+     * @param label label to display on the group box
+     */
+    public final TRadioGroup addRadioGroup(final int x, final int y,
+        final int width, final String label) {
+
+        return new TRadioGroup(this, x, y, width, label);
+    }
+
     /**
      * Convenience function to add a text field to this container/window.
      *