package org.aplikator.client.local.widgets; import java.io.Serializable; import org.aplikator.client.shared.data.ListItem; import org.aplikator.client.shared.descriptor.PropertyDTO; import org.gwtbootstrap3.client.ui.ListBox; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; public class ComboBoxWidget<T extends Serializable> extends DataFieldBase implements DataField<T> { private ListBox box = new ListBox(); public ComboBoxWidget(String caption, PropertyDTO property, int size) { super(caption, property); resetItemList(); controlHolder.add(box); box.addChangeHandler(new ChangeHandler() { public void onChange(ChangeEvent event) { setDirty(true); ValueChangeEvent.fire(ComboBoxWidget.this, null); } }); setGridSize(size); } private void resetItemList() { box.clear(); for (ListItem item : property.getListValues()) { box.addItem(item.getName(), item.getValue().toString()); } } public void setValue(T value) { resetItemList(); box.setSelectedIndex(-1); for (int i = 0; i < getProperty().getListValues().size(); i++) { if (((ListItem) getProperty().getListValues().get(i)).getValue().equals(value)) { box.setSelectedIndex(i); return; } } if (value != null) { box.addItem("! " + value.toString(), value.toString()); box.setSelectedIndex(getProperty().getListValues().size()); } } @SuppressWarnings("unchecked") public T getValue() { int index = box.getSelectedIndex(); if (index == -1) { return null; } return (T) ((ListItem) getProperty().getListValues().get(index)).getValue(); } public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler) { return addHandler(handler, ValueChangeEvent.getType()); } public void setEnabled(boolean enabled) { if (property.getRefferedThrough() != null) { enabled = false; } box.setEnabled(enabled); } }