package ilarkesto.core.menu;
import ilarkesto.core.logging.Log;
public class StaticMenuItem implements MenuItem {
private Log log = Log.get(StaticMenuItem.class);
private String label;
private boolean selected;
protected StaticMenu menu;
private Object payload;
private Runnable onSelect;
private Runnable onDeselect;
public StaticMenuItem(String label) {
super();
this.label = label;
}
void setMenu(StaticMenu menu) {
this.menu = menu;
}
@Override
public String getLabel() {
return label;
}
@Override
public boolean isSelected() {
return selected;
}
@Override
public void select() {
if (selected) return;
log.debug("select(", this, ")");
menu.deselectAll();
selected = true;
if (onSelect != null) onSelect.run();
menu.changeIndicator.markChanged();
}
@Override
public void deselect() {
if (!selected) return;
selected = false;
if (onDeselect != null) onDeselect.run();
menu.changeIndicator.markChanged();
}
public Object getPayload() {
return payload;
}
public boolean isPayload(Object test) {
if (test == null && payload == null) return true;
if (test == null || payload == null) return false;
return payload.equals(test);
}
public StaticMenuItem setPayload(Object payload) {
this.payload = payload;
if (menu != null) menu.changeIndicator.markChanged();
return this;
}
public StaticMenuItem setOnSelect(Runnable onSelect) {
this.onSelect = onSelect;
return this;
}
public StaticMenuItem setOnDeselect(Runnable onDeselect) {
this.onDeselect = onDeselect;
return this;
}
@Override
public String toString() {
return selected ? "*" + getLabel() : getLabel();
}
}