X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTButton.java;h=d1d7b390cca0170e0c33f9cde044e968c64fc947;hb=HEAD;hp=29f37432826cf7fbc3556df35462117cc557ced8;hpb=a69ed767c9c07cf35cf1c5f7821fc009cfe79cd2;p=fanfix.git diff --git a/src/jexer/TButton.java b/src/jexer/TButton.java index 29f3743..d1d7b39 100644 --- a/src/jexer/TButton.java +++ b/src/jexer/TButton.java @@ -32,9 +32,11 @@ import jexer.bits.CellAttributes; import jexer.bits.Color; import jexer.bits.GraphicsChars; import jexer.bits.MnemonicString; +import jexer.bits.StringUtils; import jexer.event.TKeypressEvent; import jexer.event.TMouseEvent; -import static jexer.TKeypress.*; +import static jexer.TKeypress.kbEnter; +import static jexer.TKeypress.kbSpace; /** * TButton implements a simple button. To make the button do something, pass @@ -68,6 +70,12 @@ public class TButton extends TWidget { */ private TAction action; + /** + * The background color used for the button "shadow", or null for "no + * shadow". + */ + private CellAttributes shadowColor; + // ------------------------------------------------------------------------ // Constructors ----------------------------------------------------------- // ------------------------------------------------------------------------ @@ -90,8 +98,20 @@ public class TButton extends TWidget { setX(x); setY(y); - setHeight(2); - setWidth(mnemonic.getRawLabel().length() + 3); + super.setHeight(2); + super.setWidth(StringUtils.width(mnemonic.getRawLabel()) + 3); + + shadowColor = new CellAttributes(); + shadowColor.setTo(getWindow().getBackground()); + shadowColor.setForeColor(Color.BLACK); + shadowColor.setBold(false); + + // Since we set dimensions after TWidget's constructor, we need to + // update the layout manager. + if (getParent().getLayoutManager() != null) { + getParent().getLayoutManager().remove(this); + getParent().getLayoutManager().add(this); + } } /** @@ -109,6 +129,20 @@ public class TButton extends TWidget { this(parent, text, x, y); this.action = action; } + + /** + * The action to call when the button is pressed. + **/ + public TAction getAction() { + return action; + } + + /** + * The action to call when the button is pressed. + **/ + public void setAction(TAction action) { + this.action = action; + } // ------------------------------------------------------------------------ // Event handlers --------------------------------------------------------- @@ -202,6 +236,27 @@ public class TButton extends TWidget { // TWidget ---------------------------------------------------------------- // ------------------------------------------------------------------------ + /** + * Override TWidget's width: we can only set width at construction time. + * + * @param width new widget width (ignored) + */ + @Override + public void setWidth(final int width) { + // Do nothing + } + + /** + * Override TWidget's height: we can only set height at construction + * time. + * + * @param height new widget height (ignored) + */ + @Override + public void setHeight(final int height) { + // Do nothing + } + /** * Draw a button with a shadow. */ @@ -209,10 +264,6 @@ public 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"); @@ -234,20 +285,21 @@ public class TButton extends TWidget { putStringXY(1, 0, mnemonic.getRawLabel(), buttonColor); putCharXY(getWidth() - 2, 0, ' ', buttonColor); - putCharXY(getWidth() - 1, 0, - GraphicsChars.CP437[0xDC], shadowColor); - hLineXY(1, 1, getWidth() - 1, - GraphicsChars.CP437[0xDF], shadowColor); + 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 (mnemonic.getScreenShortcutIdx() >= 0) { if (inButtonPress) { - putCharXY(2 + mnemonic.getShortcutIdx(), 0, + putCharXY(2 + mnemonic.getScreenShortcutIdx(), 0, mnemonic.getShortcut(), menuMnemonicColor); } else { - putCharXY(1 + mnemonic.getShortcutIdx(), 0, + putCharXY(1 + mnemonic.getScreenShortcutIdx(), 0, mnemonic.getShortcut(), menuMnemonicColor); } - } } @@ -270,9 +322,26 @@ public class TButton extends TWidget { */ public void dispatch() { if (action != null) { - action.DO(); + action.DO(this); inButtonPress = false; } } + /** + * Set the background color used for the button "shadow". If null, no + * shadow will be drawn. + * + * @param color the new background color, or null for no shadow + */ + 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; + } + } + }