package ilarkesto.gwt.client; import ilarkesto.core.base.ToHtmlSupport; import java.util.LinkedHashMap; import java.util.Map; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.user.client.ui.FocusListener; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.Widget; public abstract class ADropdownViewEditWidget extends AViewEditWidget { private HTML viewer; private ListBox editor; @Override protected final Widget onViewerInitialization() { viewer = new HTML(); return viewer; } @Override protected final Widget onEditorInitialization() { editor = new ListBox(); editor.addChangeHandler(new EditorChangeListener()); editor.addFocusListener(new EditorFocusListener()); editor.setVisibleItemCount(7); return editor; } public final void setOptions(String... options) { Map<String, String> optionsAsKeyLabelMap = new LinkedHashMap<String, String>(); for (String option : options) { optionsAsKeyLabelMap.put(option, option); } setOptions(optionsAsKeyLabelMap); } public final void setOptions(Map<String, String> optionsAsKeyLabelMap) { ensureEditorInitialized(); editor.clear(); for (Map.Entry<String, String> entry : optionsAsKeyLabelMap.entrySet()) { editor.addItem(entry.getValue(), entry.getKey()); } } public final void setSelectedOption(String key) { for (int i = 0; i < editor.getItemCount(); i++) { if (editor.getValue(i).equals(key)) { editor.setItemSelected(i, true); break; } } } public final String getSelectedOption() { return editor.getValue(editor.getSelectedIndex()); } public final void setViewerText(String text) { viewer.setText(text); } public final void setViewerItem(Object item) { if (item == null) { setViewerText(null); return; } if (item instanceof ToHtmlSupport) { viewer.setHTML(((ToHtmlSupport) item).toHtml()); return; } setViewerText(item.toString()); } private class EditorChangeListener implements ChangeHandler { @Override public void onChange(ChangeEvent event) { submitEditor(); } } private class EditorFocusListener implements FocusListener { public void onFocus(Widget sender) {} public void onLostFocus(Widget sender) { submitEditor(); } } }