package xapi.polymer.pickers; import com.google.gwt.core.client.js.JsProperty; import com.google.gwt.core.client.js.JsType; import com.google.gwt.core.shared.GWT; import xapi.components.api.OnWebComponentCreated; import xapi.components.api.WebComponent; import xapi.components.api.WebComponentFactory; import elemental.dom.Element; /** * For elements that have boolean on/off state, but also wish to handle the null or "no choice made state", * it is preferable to use an {@link EnumPickerElement} with the {@link OnOff} enum type. * * @author James X Nelson (james@wetheinter.net) * */ @JsType @WebComponent(tagName="xapi-on-off-picker") public interface OnOffPickerElement extends EnumPickerElement<OnOffPickerElement.OnOff>, OnWebComponentCreated<Element> { WebComponentFactory<OnOffPickerElement> NEW_ON_OFF_PICKER = GWT.create(OnOffPickerElement.class); static enum OnOff { ON, OFF } @Override default void onCreated(Element e) { onAfterCreated(ev-> render(null, OnOff.values()) , true); } default boolean on() { return getValue() == OnOff.ON; } default boolean off() { return getValue() == OnOff.OFF; } default boolean hasValue() { return getValue() != null; } default void setOn() { setValue(OnOff.ON); } default void setOff() { setValue(OnOff.OFF); } @JsProperty String getOnString(); @JsProperty void setOnString(String onString); @JsProperty String getOffString(); @JsProperty void setOffString(String onString); @JsProperty String getNullString(); @JsProperty void setNullString(String onString); default String stringValue() { OnOff value = getValue(); if (value == null) { } if (value == OnOff.ON) return getOnString(); else return getOffString(); } }