revert merge
[nikiroo-utils.git] / src / jexer / TWidget.java
index ba18989bfc43d38ea0549e42f5f20dfb8358e1ab..5c93712084a9b6f90bd9728ed17d368de82dfaa4 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;
@@ -598,9 +599,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);
         }
     }
 
@@ -935,8 +935,9 @@ public abstract class TWidget implements Comparable<TWidget> {
 
         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));
@@ -1132,6 +1133,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>
@@ -1144,7 +1157,7 @@ public abstract class TWidget implements Comparable<TWidget> {
      * @return difference between this.tabOrder and that.tabOrder, or
      * difference between this.z and that.z, or String.compareTo(text)
      */
-    public final int compareTo(final TWidget that) {
+    public int compareTo(final TWidget that) {
         if ((this instanceof TWindow)
             && (that instanceof TWindow)
         ) {
@@ -1421,9 +1434,9 @@ public abstract class TWidget implements Comparable<TWidget> {
                 if (activeChild != null) {
                     activeChild.active = false;
                 }
-                child.active = true;
-                activeChild = child;
             }
+            child.active = true;
+            activeChild = child;
         }
     }
 
@@ -1475,6 +1488,19 @@ public abstract class TWidget implements Comparable<TWidget> {
         }
     }
 
+    /**
+     * 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 +1631,10 @@ public abstract class TWidget implements Comparable<TWidget> {
             splitPane.setLeft(this);
             splitPane.setRight(newWidget);
         }
-        splitPane.activate();
         if (newWidget != null) {
-            newWidget.activate();
+            newWidget.activateAll();
         } else {
-            activate();
+            activateAll();
         }
 
         assert (parent != null);
@@ -1657,11 +1682,10 @@ public abstract class TWidget implements Comparable<TWidget> {
             splitPane.setTop(this);
             splitPane.setBottom(newWidget);
         }
-        splitPane.activate();
         if (newWidget != null) {
-            newWidget.activate();
+            newWidget.activateAll();
         } else {
-            activate();
+            activateAll();
         }
 
         assert (parent != null);
@@ -2139,6 +2163,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.
      *