Many changes:
[fanfix.git] / src / jexer / TButton.java
index fc93c782b5fda5c66ff01a9297fc23ee53588837..8aa62705ea5b641dc5f76c003608dd7e221bdafd 100644 (file)
@@ -42,22 +42,17 @@ import static jexer.TKeypress.*;
  *
  * @see TAction#DO()
  */
-public final class TButton extends TWidget {
+public class TButton extends TWidget {
+
+    // ------------------------------------------------------------------------
+    // Variables --------------------------------------------------------------
+    // ------------------------------------------------------------------------
 
     /**
      * The shortcut and button text.
      */
     private MnemonicString mnemonic;
 
-    /**
-     * Get the mnemonic string for this button.
-     *
-     * @return mnemonic string
-     */
-    public MnemonicString getMnemonic() {
-        return mnemonic;
-    }
-
     /**
      * Remember mouse state.
      */
@@ -73,29 +68,9 @@ public final class TButton extends TWidget {
      */
     private TAction action;
 
-    /**
-     * The time at which dispatch() was called.
-     */
-    private long dispatchTime;
-
-    /**
-     * How long to animate dispatch of the event in millis.
-     */
-    private static final long DISPATCH_TIME = 75;
-
-    /**
-     * Act as though the button was pressed.  This is useful for other UI
-     * elements to get the same action as if the user clicked the button.
-     */
-    public void dispatch() {
-        if (action != null) {
-            long now = System.currentTimeMillis();
-            if (now - dispatchTime > DISPATCH_TIME) {
-                action.DO();
-                dispatchTime = now;
-            }
-        }
-    }
+    // ------------------------------------------------------------------------
+    // Constructors -----------------------------------------------------------
+    // ------------------------------------------------------------------------
 
     /**
      * Private constructor.
@@ -135,6 +110,10 @@ public final class TButton extends TWidget {
         this.action = action;
     }
 
+    // ------------------------------------------------------------------------
+    // Event handlers ---------------------------------------------------------
+    // ------------------------------------------------------------------------
+
     /**
      * Returns true if the mouse is currently on the button.
      *
@@ -155,61 +134,6 @@ public final class TButton extends TWidget {
         return false;
     }
 
-    /**
-     * Draw a button with a shadow.
-     */
-    @Override
-    public void draw() {
-        CellAttributes buttonColor;
-        CellAttributes menuMnemonicColor;
-        CellAttributes shadowColor = new CellAttributes();
-        shadowColor.setTo(getWindow().getBackground());
-        shadowColor.setForeColor(Color.BLACK);
-        shadowColor.setBold(false);
-
-        long now = System.currentTimeMillis();
-        boolean inDispatch = false;
-        if (now - dispatchTime < DISPATCH_TIME) {
-            inDispatch = true;
-        }
-
-        if (!isEnabled()) {
-            buttonColor = getTheme().getColor("tbutton.disabled");
-            menuMnemonicColor = getTheme().getColor("tbutton.disabled");
-        } else if (isAbsoluteActive()) {
-            buttonColor = getTheme().getColor("tbutton.active");
-            menuMnemonicColor = getTheme().getColor("tbutton.mnemonic.highlighted");
-        } else {
-            buttonColor = getTheme().getColor("tbutton.inactive");
-            menuMnemonicColor = getTheme().getColor("tbutton.mnemonic");
-        }
-
-        if (inButtonPress || inDispatch) {
-            getScreen().putCharXY(1, 0, ' ', buttonColor);
-            getScreen().putStringXY(2, 0, mnemonic.getRawLabel(), buttonColor);
-            getScreen().putCharXY(getWidth() - 1, 0, ' ', buttonColor);
-        } else {
-            getScreen().putCharXY(0, 0, ' ', buttonColor);
-            getScreen().putStringXY(1, 0, mnemonic.getRawLabel(), buttonColor);
-            getScreen().putCharXY(getWidth() - 2, 0, ' ', buttonColor);
-
-            getScreen().putCharXY(getWidth() - 1, 0,
-                GraphicsChars.CP437[0xDC], shadowColor);
-            getScreen().hLineXY(1, 1, getWidth() - 1,
-                GraphicsChars.CP437[0xDF], shadowColor);
-        }
-        if (mnemonic.getShortcutIdx() >= 0) {
-            if (inButtonPress || inDispatch) {
-                getScreen().putCharXY(2 + mnemonic.getShortcutIdx(), 0,
-                    mnemonic.getShortcut(), menuMnemonicColor);
-            } else {
-                getScreen().putCharXY(1 + mnemonic.getShortcutIdx(), 0,
-                    mnemonic.getShortcut(), menuMnemonicColor);
-            }
-
-        }
-    }
-
     /**
      * Handle mouse button presses.
      *
@@ -235,7 +159,6 @@ public final class TButton extends TWidget {
         this.mouse = mouse;
 
         if (inButtonPress && mouse.isMouse1()) {
-            inButtonPress = false;
             // Dispatch the event
             dispatch();
         }
@@ -275,4 +198,81 @@ public final class TButton extends TWidget {
         super.onKeypress(keypress);
     }
 
+    // ------------------------------------------------------------------------
+    // TWidget ----------------------------------------------------------------
+    // ------------------------------------------------------------------------
+
+    /**
+     * Draw a button with a shadow.
+     */
+    @Override
+    public void draw() {
+        CellAttributes buttonColor;
+        CellAttributes menuMnemonicColor;
+        CellAttributes shadowColor = new CellAttributes();
+        shadowColor.setTo(getWindow().getBackground());
+        shadowColor.setForeColor(Color.BLACK);
+        shadowColor.setBold(false);
+
+        if (!isEnabled()) {
+            buttonColor = getTheme().getColor("tbutton.disabled");
+            menuMnemonicColor = getTheme().getColor("tbutton.disabled");
+        } else if (isAbsoluteActive()) {
+            buttonColor = getTheme().getColor("tbutton.active");
+            menuMnemonicColor = getTheme().getColor("tbutton.mnemonic.highlighted");
+        } else {
+            buttonColor = getTheme().getColor("tbutton.inactive");
+            menuMnemonicColor = getTheme().getColor("tbutton.mnemonic");
+        }
+
+        if (inButtonPress) {
+            getScreen().putCharXY(1, 0, ' ', buttonColor);
+            getScreen().putStringXY(2, 0, mnemonic.getRawLabel(), buttonColor);
+            getScreen().putCharXY(getWidth() - 1, 0, ' ', buttonColor);
+        } else {
+            getScreen().putCharXY(0, 0, ' ', buttonColor);
+            getScreen().putStringXY(1, 0, mnemonic.getRawLabel(), buttonColor);
+            getScreen().putCharXY(getWidth() - 2, 0, ' ', buttonColor);
+
+            getScreen().putCharXY(getWidth() - 1, 0,
+                GraphicsChars.CP437[0xDC], shadowColor);
+            getScreen().hLineXY(1, 1, getWidth() - 1,
+                GraphicsChars.CP437[0xDF], shadowColor);
+        }
+        if (mnemonic.getShortcutIdx() >= 0) {
+            if (inButtonPress) {
+                getScreen().putCharXY(2 + mnemonic.getShortcutIdx(), 0,
+                    mnemonic.getShortcut(), menuMnemonicColor);
+            } else {
+                getScreen().putCharXY(1 + mnemonic.getShortcutIdx(), 0,
+                    mnemonic.getShortcut(), menuMnemonicColor);
+            }
+
+        }
+    }
+
+    // ------------------------------------------------------------------------
+    // TButton ----------------------------------------------------------------
+    // ------------------------------------------------------------------------
+
+    /**
+     * Get the mnemonic string for this button.
+     *
+     * @return mnemonic string
+     */
+    public MnemonicString getMnemonic() {
+        return mnemonic;
+    }
+
+    /**
+     * Act as though the button was pressed.  This is useful for other UI
+     * elements to get the same action as if the user clicked the button.
+     */
+    public void dispatch() {
+        if (action != null) {
+            action.DO();
+            inButtonPress = false;
+        }
+    }
+
 }