package com.drakulo.games.ais.ui.component.button;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import com.drakulo.games.ais.ui.FontHelper;
import com.drakulo.games.ais.ui.component.Bindable;
import com.drakulo.games.ais.ui.twlbridge.RootPane;
import de.matthiasmann.twl.Label;
import de.matthiasmann.twl.Widget;
public class TextButton extends Button implements Bindable {
private static final String THEME_ENABLED = "centeredButton";
private static final String THEME_DISABLED = "disabledButtonLabel";
private static final String THEME_CLICKED = "clickedButtonLabel";
/** The text label */
private Label label;
public TextButton(String text) {
this(text, 0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
/**
* Complete constructor
*
* @param text
* the message
* @param x
* the X coordinate
* @param y
* the Y coordinate
* @param width
* the button width
* @param height
* the button height
*/
public TextButton(String text, int x, int y, int width, int height) {
createLabel();
label.setText(FontHelper.firstToUpper(text));
label.setSize(width, height);
setWidth(width);
setHeight(height);
setPosition(x, y);
label.setPosition(x, y);
}
/**
* Simple constructor
*
* @param text
* the message
* @param x
* the X coordinate
* @param y
* the Y coordinate
*/
public TextButton(String text, int x, int y) {
this(text, x, y, DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
@Override
public void render(Graphics g) throws SlickException {
// Render the button background
super.render(g);
}
@Override
public void update(Input input) throws SlickException {
super.update(input);
label.setVisible(isShown());
final String lastTheme = label.getTheme();
if (state == PRESSED) {
label.setTheme(THEME_CLICKED);
} else if (disabled) {
label.setTheme(THEME_DISABLED);
} else {
label.setTheme(THEME_ENABLED);
}
if (!lastTheme.equals(label.getTheme())) {
label.reapplyTheme();
}
}
@Override
public void setPosition(int x, int y) {
super.setPosition(x, y);
if (label == null) {
createLabel();
}
label.setPosition(x, y);
}
public void setText(String text) {
label.setText(FontHelper.firstToUpper(text));
}
/**
* Bind the button label to the TWL root pane
*
* @param pane
* - the TWL root pane
*/
public void bindTo(RootPane pane) {
pane.add(label);
}
/**
* Initialize the label with a centered style for text rendering
*/
private void createLabel() {
label = new Label();
label.setTheme(THEME_ENABLED);
}
@Override
public void setSize(int width, int height) {
super.setSize(width, height);
label.setSize(width, height);
}
@Override
public void enable() {
super.enable();
label.setTheme(THEME_ENABLED);
label.reapplyTheme();
}
@Override
public void disable() {
super.disable();
label.setTheme(THEME_CLICKED);
label.validateLayout();
label.reapplyTheme();
}
@Override
public Widget getBindable() {
return label;
}
}