package gminers.glasspane.component.button;
import gminers.glasspane.HorzAlignment;
import gminers.glasspane.VertAlignment;
import gminers.glasspane.event.ComponentActivateEvent;
import gminers.glasspane.event.StateChangedEvent;
import gminers.glasspane.listener.PaneEventHandler;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.ToString;
import lombok.experimental.FieldDefaults;
/**
* Implements a clickable button that toggles states between selected and deselected.
*
* @author Aesen Vismea
*
*/
@FieldDefaults(level = AccessLevel.PROTECTED)
@ToString
@Getter
public class PaneToggleButton
extends PaneButton {
/**
* Whether or not this button is selected.
*/
boolean selected = false;
public PaneToggleButton() {
this("Toggle Button");
}
public PaneToggleButton(final String text) {
this.text = text;
alignmentX = HorzAlignment.MIDDLE;
alignmentY = VertAlignment.MIDDLE;
width = 200;
height = 20;
}
public void setSelected(final boolean selected) {
final boolean oldSelected = this.selected;
this.selected = selected;
if (oldSelected != this.selected) {
fireEvent(StateChangedEvent.class, this);
}
}
@PaneEventHandler
public void onActivateForToggle(final ComponentActivateEvent e) {
if (enabled) {
selected = !selected;
fireEvent(StateChangedEvent.class, this);
}
}
}