/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.menu;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.InputElement;
import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.client.ui.HasValue;
/**
*
* @author mg
*/
public class MenuItemCheckBox extends MenuItemImageText implements HasValue<Boolean>, HasValueChangeHandlers<Boolean> {
protected Boolean value;
protected InputElement inputElem;
public MenuItemCheckBox(Boolean aValue, String aText, boolean asHtml) {
super(aText, asHtml, null, null);
setValue(aValue);
setScheduledCommand(new Scheduler.ScheduledCommand() {
@Override
public void execute() {
setValue(!getValue(), true);
}
});
}
@Override
protected void regenerate() {
getElement().setInnerSafeHtml(generateHtml());
leftMark = getElement().getFirstChildElement().getFirstChildElement();
inputElem = (InputElement) leftMark.getFirstChildElement();
field = (Element) getElement().getFirstChildElement().getLastChild();
}
protected SafeHtml generateHtml() {
String ltext = text != null ? text : "";
return MenuItemTemplates.INSTANCE.checkBox(html ? SafeHtmlUtils.fromTrustedString(ltext) : SafeHtmlUtils.fromString(ltext));
}
@Override
public Boolean getValue() {
return value;
}
@Override
public void setValue(Boolean value) {
setValue(value, false);
}
@Override
public void setValue(Boolean aValue, boolean fireEvents) {
if (aValue == null) {
aValue = Boolean.FALSE;
}
Boolean oldValue = getValue();
value = aValue;
inputElem.setChecked(aValue);
inputElem.setDefaultChecked(aValue);
if (fireEvents && !aValue.equals(oldValue)) {
ValueChangeEvent.fire(this, aValue);
}
}
@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Boolean> handler) {
return addHandler(handler, ValueChangeEvent.getType());
}
}