package edu.ualberta.med.biobank.mvp.view.widget;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
import edu.ualberta.med.biobank.mvp.user.ui.HasButton;
public class DelegatingButton implements HasButton {
private final HandlerManager handlerManager = new HandlerManager(this);
private final ClickMonitor clickMonitor = new ClickMonitor();
private HandlerRegistration handlerRegistration;
private HasButton button;
private boolean enabled = true;
public synchronized void setDelegate(HasButton button) {
removeOldHandler();
this.button = button;
button.setEnabled(enabled);
handlerRegistration = button.addClickHandler(clickMonitor);
}
@Override
public HandlerRegistration addClickHandler(ClickHandler handler) {
return handlerManager.addHandler(ClickEvent.getType(), handler);
}
@Override
public void fireEvent(GwtEvent<?> event) {
handlerManager.fireEvent(event);
}
@Override
public void setEnabled(boolean enabled) {
this.enabled = enabled;
if (button != null) {
button.setEnabled(enabled);
}
}
@Override
public boolean isEnabled() {
return enabled;
}
private void removeOldHandler() {
if (handlerRegistration != null) {
handlerRegistration.removeHandler();
}
}
private class ClickMonitor implements ClickHandler {
@Override
public void onClick(ClickEvent event) {
fireEvent(event);
}
}
}