package ilarkesto.gwt.client.editor; import ilarkesto.gwt.client.ADropdownViewEditWidget; import ilarkesto.gwt.client.LabelProvider; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class DropdownEditorWidget<T> extends ADropdownViewEditWidget { private AOptionEditorModel<T> model; private LabelProvider<T> labelProvider; private List<T> options; public DropdownEditorWidget(AOptionEditorModel<T> editor, LabelProvider<T> labelProvider) { super(); this.model = editor; this.labelProvider = labelProvider; } @Override protected void onViewerUpdate() { String label = labelProvider.getLabel(model.getValue()); setViewerText(label); } @Override protected void onEditorUpdate() { options = model.getOptions(); Map<String, String> optionsMap = new LinkedHashMap<String, String>(); int index = 0; for (T option : options) { optionsMap.put(String.valueOf(index), labelProvider.getLabel(option)); index++; } setOptions(optionsMap); } @Override protected void onEditorSubmit() { String selected = getSelectedOption(); int index = Integer.parseInt(selected); model.changeValue(options.get(index)); // TODO catch exceptions } @Override public boolean isEditable() { return model.isEditable(); } @Override public String getTooltip() { return model.getTooltip(); } @Override public String getId() { return model.getId(); } }