package br.com.etyllica.gui.base;
import br.com.etyllica.core.event.GUIEvent;
import br.com.etyllica.core.event.KeyEvent;
import br.com.etyllica.core.event.MouseEvent;
import br.com.etyllica.core.event.PointerEvent;
import br.com.etyllica.core.event.PointerState;
import br.com.etyllica.core.graphics.Graphics;
import br.com.etyllica.gui.Label;
import br.com.etyllica.gui.RoundView;
import br.com.etyllica.gui.theme.Theme;
/**
*
* Button Component
*
* @author yuripourre
*
*/
public class BaseButton extends RoundView {
protected Label label;
private String alt = "";
protected boolean clicked = false;
public BaseButton(int x, int y, int w, int h) {
super(x, y, w, h);
}
@Override
public void draw(Graphics g) {
if(!visible)
return;
Theme theme = getTheme();
if(!disabled) {
if(!mouseOver) {
g.setColor(theme.getBaseColor());
} else {
if(clicked) {
g.setColor(theme.getActiveSelectionColor());
} else {
g.setColor(theme.getSelectionColor());
}
}
} else {
g.setColor(theme.getButtonDisabledColor());
}
g.fillRect(left(),top(),width(),height());
drawLabel(g);
}
protected void drawLabel(Graphics g) {
if(hasLabel())
label.draw(g);
}
public void updateEvent(GUIEvent event) {
executeAction(event);
if(hasLabel())
label.updateEvent(event);
}
protected void leftClick() {
//igualaImagem(click);
}
protected void leftUp() {
}
protected void middleClick() {
//new Voicer().say(rotulo);
}
protected void rightClick() {
}
protected void justOnMouse() {
//igualaImagem(sobMouse);
}
@Override
public GUIEvent updateMouse(PointerEvent event) {
GUIEvent value = super.updateMouse(event);
if(value != GUIEvent.NONE) {
updateEvent(value);
return value;
}
if(!disabled) {
//If mouse is Over
if(mouseOver) {
if(event.getState() == PointerState.PRESSED) {
if(event.isKey(MouseEvent.MOUSE_BUTTON_LEFT)) {
clicked = true;
leftClick();
value = GUIEvent.MOUSE_LEFT_BUTTON_DOWN;
} else if(event.isKey(MouseEvent.MOUSE_BUTTON_RIGHT)) {
rightClick();
value = GUIEvent.MOUSE_RIGHT_BUTTON_DOWN;
} else if(event.isKey(MouseEvent.MOUSE_BUTTON_MIDDLE)) {
middleClick();
value = GUIEvent.MOUSE_MIDDLE_BUTTON_DOWN;
}
}
else if(event.getState() == PointerState.RELEASED) {
if(event.isKey(MouseEvent.MOUSE_BUTTON_LEFT)) {
clicked = false;
leftUp();
value = GUIEvent.MOUSE_LEFT_BUTTON_UP;
} else if(event.isKey(MouseEvent.MOUSE_BUTTON_RIGHT)) {
value = GUIEvent.MOUSE_RIGHT_BUTTON_UP;
} else if(event.isKey(MouseEvent.MOUSE_BUTTON_MIDDLE)) {
value = GUIEvent.MOUSE_MIDDLE_BUTTON_UP;
}
} else if(event.getState()==PointerState.DOUBLE_CLICK) {
if(event.isKey(MouseEvent.MOUSE_BUTTON_LEFT)) {
value = GUIEvent.MOUSE_LEFT_BUTTON_DOUBLE_CLICK;
} else if(event.isKey(MouseEvent.MOUSE_BUTTON_RIGHT)) {
value = GUIEvent.MOUSE_RIGHT_BUTTON_DOUBLE_CLICK;
} else if(event.isKey(MouseEvent.MOUSE_BUTTON_MIDDLE)) {
value = GUIEvent.MOUSE_MIDDLE_BUTTON_DOUBLE_CLICK;
}
} else if(event.getState() == PointerState.MOVE) {
justOnMouse();
value = GUIEvent.MOUSE_OVER;
}
//If mouse is not over
} else {
if(event.isButtonDown(MouseEvent.MOUSE_BUTTON_LEFT)) {
onFocus = false;
}
}
}
updateEvent(value);
return value;
}
public Label getLabel() {
return label;
}
public void setLabel(Label label) {
this.label = label;
label.setX(x+(w/2-label.getW()/2)+label.getX());
label.setY(y+(h/2-label.getH()/2)+label.getY());
//int offsetX = label.getX();
//int offsetY = label.getY();
//label.setX(x+offsetX);
//label.setY(y+offsetY);
label.setContentBounds(left(), top(), width(), height());
}
public void setCenterLabel(Label label) {
this.label = label;
label.setX(label.getX()+(left()+width()/2-label.getW()/2));
label.setY(label.getY()+(top()+height()/2-label.getH()/2));
label.setContentBounds(left(), top(), width(), height());
}
@Override
public void setX(int x) {
super.setX(x);
if(hasLabel()) {
label.setContentBounds(left(), top(), width(), height());
}
}
@Override
public void setY(int y) {
super.setY(y);
if(hasLabel())
label.setContentBounds(left(), top(), width(), height());
}
@Override
public GUIEvent updateKeyboard(KeyEvent event) {
if(event.isKeyDown(KeyEvent.VK_TAB)) {
return GUIEvent.NEXT_COMPONENT;
}
if(event.isKeyDown(KeyEvent.VK_ENTER)) {
this.updateEvent(GUIEvent.MOUSE_LEFT_BUTTON_DOWN);
}/*else if(event.getReleased(Tecla.TSK_ENTER)) {
return GUIEvent.MOUSE_LEFT_BUTTON_UP;
}*/
return GUIEvent.NONE;
}
protected boolean hasLabel() {
return label != null;
}
public String getAlt() {
return alt;
}
public void setAlt(String alt) {
this.alt = alt;
}
public boolean isClicked() {
return clicked;
}
@Override
public void resize() {
super.resize();
if(hasLabel()) {
label.resize();
}
}
@Override
public void setBounds(int x, int y, int w, int h) {
super.setBounds(x, y, w, h);
if(hasLabel()) {
label.setContentBounds(left(), top(), width(), height());
}
}
}