/*
* 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.widgets.boxes;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.GwtEvent;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.ui.HasValue;
/**
*
* @author mg
*/
public class ImageToggleButton extends ImageButton implements HasValue<Boolean>, HasValueChangeHandlers<Boolean> {
protected HandlerManager handlerManager = new HandlerManager(this);
protected Boolean selected;
public ImageToggleButton(String aTitle, boolean asHtml) {
this(aTitle, asHtml, null);
}
public ImageToggleButton(String aTitle, boolean asHtml, ImageResource aImage) {
super(aTitle, asHtml, aImage);
addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
boolean val = getValue() != null ? getValue() : false;
setValue(!val, true);
}
});
}
@Override
public Boolean getValue() {
return selected;
}
@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();
selected = aValue;
setStyleDependentName("active", selected);
setStyleDependentName("default", !selected);
if (fireEvents && !aValue.equals(oldValue)) {
ValueChangeEvent.fire(this, aValue);
}
}
@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Boolean> handler) {
return handlerManager.addHandler(ValueChangeEvent.getType(), handler);
}
@Override
public void fireEvent(GwtEvent<?> event) {
if (event instanceof ValueChangeEvent) {
handlerManager.fireEvent(event);
} else {
super.fireEvent(event);
}
}
}