X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTRadioButton.java;h=dcc5c13699f03fefceabbc54bf65bac1b6624745;hb=HEAD;hp=b4170ba82cbd579494e2967f0055e5ecedfe09ac;hpb=a69ed767c9c07cf35cf1c5f7821fc009cfe79cd2;p=fanfix.git diff --git a/src/jexer/TRadioButton.java b/src/jexer/TRadioButton.java index b4170ba..dcc5c13 100644 --- a/src/jexer/TRadioButton.java +++ b/src/jexer/TRadioButton.java @@ -30,12 +30,18 @@ package jexer; import jexer.bits.CellAttributes; import jexer.bits.GraphicsChars; +import jexer.bits.MnemonicString; +import jexer.bits.StringUtils; import jexer.event.TKeypressEvent; import jexer.event.TMouseEvent; import static jexer.TKeypress.*; /** * TRadioButton implements a selectable radio button. + * + * If the user clicks or presses space on this button, it is selected. + * + * If the user presses escape on this button, it is unselected. */ public class TRadioButton extends TWidget { @@ -44,27 +50,27 @@ public class TRadioButton extends TWidget { // ------------------------------------------------------------------------ /** - * RadioButton state, true means selected. + * RadioButton state, true means selected. Note package private access. */ - private boolean selected = false; + boolean selected = false; /** - * Label for this radio button. + * The shortcut and radio button label. */ - private String label; + private MnemonicString mnemonic; /** * ID for this radio button. Buttons start counting at 1 in the - * RadioGroup. + * RadioGroup. Note package private access. */ - private int id; + int id; // ------------------------------------------------------------------------ // Constructors ----------------------------------------------------------- // ------------------------------------------------------------------------ /** - * Public constructor. + * Package private constructor. * * @param parent parent widget * @param x column relative to parent @@ -72,17 +78,19 @@ public class TRadioButton extends TWidget { * @param label label to display next to (right of) the radiobutton * @param id ID for this radio button */ - public TRadioButton(final TRadioGroup parent, final int x, final int y, + TRadioButton(final TRadioGroup parent, final int x, final int y, final String label, final int id) { // Set parent and window - super(parent, x, y, label.length() + 4, 1); + super(parent, x, y, StringUtils.width(label) + 4, 1); - this.label = label; + mnemonic = new MnemonicString(label); this.id = id; setCursorVisible(true); setCursorX(1); + + parent.addRadioButton(this); } // ------------------------------------------------------------------------ @@ -114,10 +122,7 @@ public class TRadioButton extends TWidget { public void onMouseDown(final TMouseEvent mouse) { if ((mouseOnRadioButton(mouse)) && (mouse.isMouse1())) { // Switch state - selected = !selected; - if (selected) { - ((TRadioGroup) getParent()).setSelected(this); - } + ((TRadioGroup) getParent()).setSelected(id); } } @@ -130,9 +135,15 @@ public class TRadioButton extends TWidget { public void onKeypress(final TKeypressEvent keypress) { if (keypress.equals(kbSpace)) { - selected = !selected; - if (selected) { - ((TRadioGroup) getParent()).setSelected(this); + ((TRadioGroup) getParent()).setSelected(id); + return; + } + + if (keypress.equals(kbEsc)) { + TRadioGroup parent = (TRadioGroup) getParent(); + if (parent.requiresSelection == false) { + selected = false; + parent.setSelected(0); } return; } @@ -145,17 +156,41 @@ public class TRadioButton 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 radio button with label. */ @Override public void draw() { CellAttributes radioButtonColor; + CellAttributes mnemonicColor; if (isAbsoluteActive()) { radioButtonColor = getTheme().getColor("tradiobutton.active"); + mnemonicColor = getTheme().getColor("tradiobutton.mnemonic.highlighted"); } else { radioButtonColor = getTheme().getColor("tradiobutton.inactive"); + mnemonicColor = getTheme().getColor("tradiobutton.mnemonic"); } putCharXY(0, 0, '(', radioButtonColor); @@ -165,7 +200,11 @@ public class TRadioButton extends TWidget { putCharXY(1, 0, ' ', radioButtonColor); } putCharXY(2, 0, ')', radioButtonColor); - putStringXY(4, 0, label, radioButtonColor); + putStringXY(4, 0, mnemonic.getRawLabel(), radioButtonColor); + if (mnemonic.getScreenShortcutIdx() >= 0) { + putCharXY(4 + mnemonic.getScreenShortcutIdx(), 0, + mnemonic.getShortcut(), mnemonicColor); + } } // ------------------------------------------------------------------------ @@ -183,14 +222,17 @@ public class TRadioButton extends TWidget { } /** - * Set RadioButton state, true means selected. Note package private - * access. + * Set RadioButton state, true means selected. * * @param selected if true then this is the one button in the group that * is selected */ - void setSelected(final boolean selected) { - this.selected = selected; + public void setSelected(final boolean selected) { + if (selected == true) { + ((TRadioGroup) getParent()).setSelected(id); + } else { + ((TRadioGroup) getParent()).setSelected(0); + } } /** @@ -203,4 +245,13 @@ public class TRadioButton extends TWidget { return id; } + /** + * Get the mnemonic string for this button. + * + * @return mnemonic string + */ + public MnemonicString getMnemonic() { + return mnemonic; + } + }