package xapi.gwtc.view; import java.util.LinkedHashSet; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.InputElement; import com.google.gwt.dom.client.LabelElement; import com.google.gwt.event.dom.client.ClickEvent; 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.uibinder.client.UiTemplate; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.EventListener; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Image; public class ModuleSelectorView extends Composite{ @UiTemplate("ModuleSelectorView.ui.xml") interface MyBinder extends UiBinder<HTMLPanel, ModuleSelectorView> {} static MyBinder binder = GWT.create(MyBinder.class); @UiField(provided=true) final GwtcResources res; private final LinkedHashSet<String> modules = new LinkedHashSet<String>(); @UiField LabelElement modulesLabel; @UiField InputElement moduleAdder; @UiField Image addButton; @UiField DivElement selectedModules; @UiField HTMLPanel moduleTemplate; public ModuleSelectorView(GwtcResources res) { this.res = res; initWidget(binder.createAndBindUi(this)); } @UiHandler({"addButton"}) void onAdd(ClickEvent e) { String entered = moduleAdder.getValue(); if (entered.length() > 0) addModule(entered); moduleAdder.setValue(""); } public void addModule(final String entered) { if (modules.add(entered)) { final Element clone = Element.as(moduleTemplate.getElement().cloneNode(true)); clone.removeClassName(res.css().hidden()); Element el = clone.getFirstChildElement().getNextSiblingElement(); el.setInnerText(entered); com.google.gwt.user.client.Element image = el.getNextSiblingElement().cast(); DOM.setEventListener(image, new EventListener() { @Override public void onBrowserEvent(Event event) { modules.remove(entered); clone.removeFromParent(); } }); DOM.sinkEvents(image, Event.ONCLICK | Event.ONKEYDOWN); selectedModules.appendChild(clone); } } public Iterable<String> getModules() { return modules; } }