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);
}
}