package ilarkesto.gwt.client; import ilarkesto.core.base.Utl; import java.util.Collection; import java.util.List; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FocusListener; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Widget; public abstract class AMultiSelectionViewEditWidget<I extends Object> extends AViewEditWidget { private HTML viewer; private MultiSelectionWidget<I> editor; @Override protected final Widget onViewerInitialization() { viewer = new HTML(); return viewer; } @Override protected final Widget onEditorInitialization() { editor = new MultiSelectionWidget<I>(); ToolbarWidget toolbar = new ToolbarWidget(); toolbar.addButton(new AAction() { @Override public String getLabel() { return "Apply"; } @Override protected void onExecute() { submitEditor(); } }); toolbar.addButton(new AAction() { @Override public String getLabel() { return "Cancel"; } @Override protected void onExecute() { cancelEditor(); } }); FlowPanel container = new FlowPanel(); container.add(editor); container.add(toolbar); FocusPanel focusPanel = new FocusPanel(container); focusPanel.addFocusListener(new EditorFocusListener()); return focusPanel; } public final void setViewerItems(Collection items) { if (items.isEmpty()) { viewer.setText("."); return; } StringBuilder sb = new StringBuilder(); boolean first = true; for (Object item : items) { if (first) { first = false; } else { sb.append(", "); } sb.append(item); } viewer.setHTML(Utl.concatToHtml(items, "<br>")); } public void setEditorItems(Collection<I> items) { editor.setItems(items); } public void setEditorSelectedItems(Collection<I> items) { editor.setSelected(items); } public List<I> getEditorSelectedItems() { return editor.getSelected(); } private class EditorFocusListener implements FocusListener { public void onFocus(Widget sender) {} public void onLostFocus(Widget sender) { submitEditor(); } } }