package org.ourproject.massmob.client.ui;
import java.util.Iterator;
import org.ourproject.massmob.client.ui.img.Images;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.logical.shared.HasCloseHandlers;
import com.google.gwt.event.logical.shared.HasOpenHandlers;
import com.google.gwt.event.logical.shared.OpenEvent;
import com.google.gwt.event.logical.shared.OpenHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DisclosurePanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Widget;
public class CustomDisclosure extends Composite
implements HasWidgets, HasCloseHandlers<DisclosurePanel>, HasOpenHandlers<DisclosurePanel> {
interface CustomDisclosureUiBinder extends UiBinder<Widget, CustomDisclosure> {
}
private static CustomDisclosureUiBinder uiBinder = GWT.create(CustomDisclosureUiBinder.class);
private final ImageResource arrowDown;
private final ImageResource arrowRight;
@UiField
DisclosurePanel disclo;
private final IconTitle header;
public CustomDisclosure(final Images img) {
this("", false, img);
}
public CustomDisclosure(final String text, final boolean open, final Images img) {
initWidget(uiBinder.createAndBindUi(this));
arrowRight = img.arrowRight();
arrowDown = img.arrowDown();
header = new IconTitle(text);
disclo.setHeader(header);
disclo.setOpen(open);
}
@Override
public void add(final Widget w) {
disclo.add(w);
}
@Override
public HandlerRegistration addCloseHandler(final CloseHandler<DisclosurePanel> handler) {
return disclo.addCloseHandler(handler);
}
@Override
public HandlerRegistration addOpenHandler(final OpenHandler<DisclosurePanel> handler) {
return disclo.addOpenHandler(handler);
}
@Override
public void clear() {
disclo.clear();
}
boolean isOpen() {
return disclo.isOpen();
}
@Override
public Iterator<Widget> iterator() {
return disclo.iterator();
}
@UiHandler("disclo")
public void onClose(final CloseEvent<DisclosurePanel> event) {
header.setIcon(arrowRight);
}
@UiHandler("disclo")
public void onOpen(final OpenEvent<DisclosurePanel> event) {
header.setIcon(arrowDown);
}
@Override
public boolean remove(final Widget w) {
return disclo.remove(w);
}
public void setHeader(final Widget widget) {
header.add(widget);
}
public void setOpen(final boolean open) {
disclo.setOpen(open);
if (open) {
header.setIcon(arrowDown);
} else {
header.setIcon(arrowRight);
}
}
public void setText(final String text) {
header.setText(text);
}
}