color chooser widget
[nikiroo-utils.git] / src / jexer / TWidget.java
index 6cb0f98b1fe4c6634334c13f081a07fbd78a7e0e..dffa9e1ccf465e5dd0c401f66a6a84701c135f29 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Jexer - Java Text User Interface
  *
  * License: LGPLv3 or later
@@ -30,6 +30,7 @@
  */
 package jexer;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.LinkedList;
 
@@ -133,7 +134,7 @@ public abstract class TWidget implements Comparable<TWidget> {
      *
      * @return if true, this widget will receive events
      */
-    public final boolean getActive() {
+    public final boolean isActive() {
         return active;
     }
 
@@ -267,7 +268,7 @@ public abstract class TWidget implements Comparable<TWidget> {
      *
      * @return if true, this widget can be tabbed to or receive events
      */
-    public final boolean getEnabled() {
+    public final boolean isEnabled() {
         return enabled;
     }
 
@@ -303,15 +304,15 @@ public abstract class TWidget implements Comparable<TWidget> {
     /**
      * If true, this widget has a cursor.
      */
-    private boolean hasCursor = false;
+    private boolean cursorVisible = false;
 
     /**
      * Set visible cursor flag.
      *
-     * @param hasCursor if true, this widget has a cursor
+     * @param cursorVisible if true, this widget has a cursor
      */
-    public final void setHasCursor(final boolean hasCursor) {
-        this.hasCursor = hasCursor;
+    public final void setCursorVisible(final boolean cursorVisible) {
+        this.cursorVisible = cursorVisible;
     }
 
     /**
@@ -319,8 +320,8 @@ public abstract class TWidget implements Comparable<TWidget> {
      *
      * @return if true, this widget has a visible cursor
      */
-    public final boolean visibleCursor() {
-        return hasCursor;
+    public final boolean isCursorVisible() {
+        return cursorVisible;
     }
 
     /**
@@ -370,19 +371,29 @@ public abstract class TWidget implements Comparable<TWidget> {
     }
 
     /**
-     * Comparison operator sorts on tabOrder for TWidgets and z for TWindows.
+     * Comparison operator.  For various subclasses it sorts on:
+     * <ul>
+     * <li>tabOrder for TWidgets</li>
+     * <li>z for TWindows</li>
+     * <li>text for TTreeItems</li>
+     * </ul>
      *
-     * @param that another TWidget or TWindow instance
+     * @param that another TWidget, TWindow, or TTreeItem instance
      * @return difference between this.tabOrder and that.tabOrder, or
-     * difference between this.z and that.z
+     * 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)
         ) {
             return (((TWindow) this).getZ() - ((TWindow) that).getZ());
         }
+        if ((this instanceof TTreeItem)
+            && (that instanceof TTreeItem)
+        ) {
+            return (((TTreeItem) this).getText().compareTo(
+                ((TTreeItem) that).getText()));
+        }
         return (this.tabOrder - that.tabOrder);
     }
 
@@ -392,11 +403,11 @@ public abstract class TWidget implements Comparable<TWidget> {
      * @return true if this widget is active and all of its parents are
      * active.
      */
-    public final boolean getAbsoluteActive() {
+    public final boolean isAbsoluteActive() {
         if (parent == this) {
             return active;
         }
-        return (active && parent.getAbsoluteActive());
+        return (active && parent.isAbsoluteActive());
     }
 
     /**
@@ -405,7 +416,7 @@ public abstract class TWidget implements Comparable<TWidget> {
      * @return absolute screen column number for the cursor's X position
      */
     public final int getCursorAbsoluteX() {
-        assert (hasCursor);
+        assert (cursorVisible);
         return getAbsoluteX() + cursorX;
     }
 
@@ -415,7 +426,7 @@ public abstract class TWidget implements Comparable<TWidget> {
      * @return absolute screen row number for the cursor's Y position
      */
     public final int getCursorAbsoluteY() {
-        assert (hasCursor);
+        assert (cursorVisible);
         return getAbsoluteY() + cursorY;
     }
 
@@ -751,8 +762,7 @@ public abstract class TWidget implements Comparable<TWidget> {
     public void onKeypress(final TKeypressEvent keypress) {
 
         if ((children.size() == 0)
-            // TODO
-            // || (cast(TTreeView)this)
+            || (this instanceof TTreeView)
             || (this instanceof TText)
         ) {
 
@@ -781,12 +791,12 @@ public abstract class TWidget implements Comparable<TWidget> {
         for (TWidget widget: children) {
             if (widget instanceof TButton) {
                 TButton button = (TButton) widget;
-                if (button.getEnabled()
-                    && !keypress.getKey().getIsKey()
-                    && keypress.getKey().getAlt()
-                    && !keypress.getKey().getCtrl()
+                if (button.isEnabled()
+                    && !keypress.getKey().isFnKey()
+                    && keypress.getKey().isAlt()
+                    && !keypress.getKey().isCtrl()
                     && (Character.toLowerCase(button.getMnemonic().getShortcut())
-                        == Character.toLowerCase(keypress.getKey().getCh()))
+                        == Character.toLowerCase(keypress.getKey().getChar()))
                 ) {
 
                     widget.handleEvent(new TKeypressEvent(kbEnter));
@@ -1272,4 +1282,147 @@ public abstract class TWidget implements Comparable<TWidget> {
             updateAction);
     }
 
+    /**
+     * Convenience function to add a tree view to this container/window.
+     *
+     * @param x column relative to parent
+     * @param y row relative to parent
+     * @param width width of tree view
+     * @param height height of tree view
+     * @return the new tree view
+     */
+    public final TTreeView addTreeView(final int x, final int y,
+        final int width, final int height) {
+
+        return new TTreeView(this, x, y, width, height);
+    }
+
+    /**
+     * Convenience function to add a tree view to this container/window.
+     *
+     * @param x column relative to parent
+     * @param y row relative to parent
+     * @param width width of tree view
+     * @param height height of tree view
+     * @param action action to perform when an item is selected
+     * @return the new tree view
+     */
+    public final TTreeView addTreeView(final int x, final int y,
+        final int width, final int height, final TAction action) {
+
+        return new TTreeView(this, x, y, width, height, action);
+    }
+
+    /**
+     * Convenience function to spawn a file open box.
+     *
+     * @param path path of selected file
+     * @return the result of the new file open box
+     * @throws IOException if a java.io operation throws
+     */
+    public final String fileOpenBox(final String path) throws IOException {
+        return getApplication().fileOpenBox(path);
+    }
+
+    /**
+     * Convenience function to spawn a file open box.
+     *
+     * @param path path of selected file
+     * @param type one of the Type constants
+     * @return the result of the new file open box
+     * @throws IOException if a java.io operation throws
+     */
+    public final String fileOpenBox(final String path,
+        final TFileOpenBox.Type type) throws IOException {
+
+        return getApplication().fileOpenBox(path, type);
+    }
+    /**
+     * Convenience function to add a directory list to this container/window.
+     *
+     * @param path directory path, must be a directory
+     * @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 directory list
+     */
+    public final TDirectoryList addDirectoryList(final String path, final int x,
+        final int y, final int width, final int height) {
+
+        return new TDirectoryList(this, path, x, y, width, height, null);
+    }
+
+    /**
+     * Convenience function to add a directory list to this container/window.
+     *
+     * @param path directory path, must be a directory
+     * @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 action action to perform when an item is selected
+     * @return the new directory list
+     */
+    public final TDirectoryList addDirectoryList(final String path, final int x,
+        final int y, final int width, final int height, final TAction action) {
+
+        return new TDirectoryList(this, path, x, y, width, height, action);
+    }
+
+    /**
+     * Convenience function to add a directory list to this container/window.
+     *
+     * @param strings list of strings to show
+     * @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 directory list
+     */
+    public final TList addList(final List<String> strings, final int x,
+        final int y, final int width, final int height) {
+
+        return new TList(this, strings, x, y, width, height, null);
+    }
+
+    /**
+     * Convenience function to add a directory list to this container/window.
+     *
+     * @param strings list of strings to show
+     * @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 enterAction action to perform when an item is selected
+     * @return the new directory list
+     */
+    public final TList addList(final List<String> strings, final int x,
+        final int y, final int width, final int height,
+        final TAction enterAction) {
+
+        return new TList(this, strings, x, y, width, height, enterAction);
+    }
+
+    /**
+     * Convenience function to add a directory list to this container/window.
+     *
+     * @param strings list of strings to show
+     * @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 enterAction action to perform when an item is selected
+     * @param moveAction action to perform when the user navigates to a new
+     * item with arrow/page keys
+     * @return the new directory list
+     */
+    public final TList addList(final List<String> strings, final int x,
+        final int y, final int width, final int height,
+        final TAction enterAction, final TAction moveAction) {
+
+        return new TList(this, strings, x, y, width, height, enterAction,
+            moveAction);
+    }
+
 }