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
*/
private TAction action;
+ /**
+ * The background color used for the button "shadow", or null for "no
+ * shadow".
+ */
+ private CellAttributes shadowColor;
+
// ------------------------------------------------------------------------
// Constructors -----------------------------------------------------------
// ------------------------------------------------------------------------
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);
+ }
}
/**
// 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.
*/
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");
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);
}
-
}
}
*/
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;
+ }
+ }
+
}