package org.vaadin.smartgwt.client.ui.form.fields; import java.util.ArrayList; import java.util.List; import org.vaadin.smartgwt.client.core.PaintableListListener; import org.vaadin.smartgwt.client.core.PaintablePropertyUpdater; import org.vaadin.smartgwt.client.core.VJSObject; import org.vaadin.smartgwt.client.ui.grid.VListGridField; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.grid.ListGridField; import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.Paintable; import com.vaadin.terminal.gwt.client.UIDL; public class VSelectItem extends VAbstractFormItem<SelectItem, String> { private final PaintablePropertyUpdater propertyUpdater = new PaintablePropertyUpdater(); public VSelectItem() { super(new SelectItem()); propertyUpdater.addPaintableListListener("pickListFields", new PaintableListListener() { @Override public void onAdd(Paintable[] source, Integer index, Paintable element) { final List<ListGridField> pickListFields = new ArrayList<ListGridField>(); for (Paintable paintable : source) { pickListFields.add(((VListGridField) paintable).getJSObject()); } getJSObject().setPickListFields(pickListFields.toArray(new ListGridField[0])); } @Override public void onRemove(Paintable[] source, Integer index, Paintable element) { } }); } @Override protected String getUIDLFormItemValue(UIDL uidl, String attributeName) { return uidl.getStringAttribute(attributeName); } @Override protected String getFormItemValue() { return getJSObject().getValueAsString(); } @Override protected void postAttributeUpdateFromUIDL(UIDL uidl, ApplicationConnection client) { propertyUpdater.updateFromUIDL(uidl, client); // the dataSource property is manually managed for now. Using the automatic painter doesn't work properly if (uidl.hasAttribute("optionDataSource")) { final Paintable paintable = uidl.getPaintableAttribute("optionDataSource", client); getJSObject().setOptionDataSource((DataSource) ((VJSObject<?>) paintable).getJSObject()); } } }