Merge branch 'tbutton_fix' into 'master'
[fanfix.git] / src / jexer / TButton.java
index d4e7c8952a208682febdf59457476807cc8910d5..964035fc5a0ee47241aed898cb59c63c5354746d 100644 (file)
@@ -3,7 +3,7 @@
  *
  * The MIT License (MIT)
  *
- * Copyright (C) 2017 Kevin Lamonte
+ * Copyright (C) 2019 Kevin Lamonte
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -42,7 +42,7 @@ import static jexer.TKeypress.*;
  *
  * @see TAction#DO()
  */
-public final class TButton extends TWidget {
+public class TButton extends TWidget {
 
     // ------------------------------------------------------------------------
     // Variables --------------------------------------------------------------
@@ -68,6 +68,11 @@ public final class TButton extends TWidget {
      */
     private TAction action;
 
+    /**
+     * The background color used for the button "shadow", or NULL for "no shadow".
+     */
+    private CellAttributes shadowColor;
+    
     // ------------------------------------------------------------------------
     // Constructors -----------------------------------------------------------
     // ------------------------------------------------------------------------
@@ -92,6 +97,11 @@ public final class TButton extends TWidget {
         setY(y);
         setHeight(2);
         setWidth(mnemonic.getRawLabel().length() + 3);
+
+        shadowColor = new CellAttributes();
+        shadowColor.setTo(getWindow().getBackground());
+        shadowColor.setForeColor(Color.BLACK);
+        shadowColor.setBold(false);
     }
 
     /**
@@ -209,10 +219,6 @@ public final class TButton extends TWidget {
     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");
@@ -226,28 +232,29 @@ public final class TButton extends TWidget {
         }
 
         if (inButtonPress) {
-            getScreen().putCharXY(1, 0, ' ', buttonColor);
-            getScreen().putStringXY(2, 0, mnemonic.getRawLabel(), buttonColor);
-            getScreen().putCharXY(getWidth() - 1, 0, ' ', buttonColor);
+               putCharXY(1, 0, ' ', buttonColor);
+               putStringXY(2, 0, mnemonic.getRawLabel(), buttonColor);
+            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);
+            putCharXY(0, 0, ' ', buttonColor);
+            putStringXY(1, 0, mnemonic.getRawLabel(), buttonColor);
+            putCharXY(getWidth() - 2, 0, ' ', buttonColor);
+               
+            if (shadowColor != null) {
+                   putCharXY(getWidth() - 1, 0,
+                       GraphicsChars.CP437[0xDC], shadowColor);
+                   hLineXY(1, 1, getWidth() - 1,
+                       GraphicsChars.CP437[0xDF], shadowColor);
+            }
         }
         if (mnemonic.getShortcutIdx() >= 0) {
             if (inButtonPress) {
-                getScreen().putCharXY(2 + mnemonic.getShortcutIdx(), 0,
+                putCharXY(2 + mnemonic.getShortcutIdx(), 0,
                     mnemonic.getShortcut(), menuMnemonicColor);
             } else {
-                getScreen().putCharXY(1 + mnemonic.getShortcutIdx(), 0,
+                putCharXY(1 + mnemonic.getShortcutIdx(), 0,
                     mnemonic.getShortcut(), menuMnemonicColor);
             }
-
         }
     }
 
@@ -275,4 +282,22 @@ public final class TButton extends TWidget {
         }
     }
 
+    /**
+     * Set the background color used for the button "shadow".
+     * <p>
+     * Can be NULL for "no shadow".
+     *
+     * @param color the new background color, or NULL if none
+     */
+    public void setShadowColor(final CellAttributes color) {
+       if (color != null) {
+               shadowColor = new CellAttributes();
+               shadowColor.setTo(color);
+               shadowColor.setForeColor(Color.BLACK);
+               shadowColor.setBold(false);
+       } else {
+               shadowColor = null;
+       }
+    }
+
 }