ingo@20: package de.intevation.flys.client.client.ui; ingo@20: ingo@20: import com.google.gwt.core.client.GWT; ingo@20: ingo@30: import com.smartgwt.client.types.VerticalAlignment; ingo@20: import com.smartgwt.client.widgets.Canvas; ingo@30: import com.smartgwt.client.widgets.Label; ingo@20: import com.smartgwt.client.widgets.form.DynamicForm; ingo@592: import com.smartgwt.client.widgets.form.fields.SelectItem; ingo@53: import com.smartgwt.client.widgets.layout.HLayout; ingo@20: import com.smartgwt.client.widgets.layout.VLayout; ingo@20: christian@4184: import de.intevation.flys.client.client.FLYSConstants; ingo@20: import de.intevation.flys.client.shared.model.Data; ingo@20: import de.intevation.flys.client.shared.model.DataItem; ingo@51: import de.intevation.flys.client.shared.model.DataList; ingo@20: import de.intevation.flys.client.shared.model.DefaultData; ingo@20: import de.intevation.flys.client.shared.model.DefaultDataItem; ingo@20: christian@4184: import java.util.Iterator; christian@4184: import java.util.LinkedHashMap; christian@4184: import java.util.Map; ingo@20: ingo@20: ingo@20: /** ingo@20: * This UIProvider displays the DataItems of the Data object in a combo box. ingo@20: * ingo@20: * @author Ingo Weinzierl ingo@20: */ ingo@49: public class SelectProvider ingo@49: extends AbstractUIProvider ingo@20: { christian@4184: private static final long serialVersionUID = 4696637534424070726L; christian@4184: ingo@20: /** The message class that provides i18n strings.*/ ingo@211: protected FLYSConstants messages = GWT.create(FLYSConstants.class); ingo@20: ingo@20: /** The combobox.*/ ingo@51: protected DynamicForm form; ingo@38: ingo@20: ingo@20: /** ingo@20: * This method currently returns a ingo@20: * {@link com.smartgwt.client.widgets.form.DynamicForm} that contains all ingo@20: * data items in a combobox stored in data. ingo@20: * ingo@20: * @param data The {@link Data} object. ingo@20: * ingo@20: * @return a combobox. ingo@20: */ christian@4184: @Override ingo@51: public Canvas create(DataList data) { ingo@20: VLayout v = new VLayout(); ingo@83: v.setMembersMargin(10); ingo@20: ingo@20: Canvas content = createWidget(data); ingo@57: Canvas button = getNextButton(); ingo@20: ingo@20: v.addMember(content); ingo@20: v.addMember(button); ingo@20: ingo@20: return v; ingo@20: } ingo@20: ingo@20: christian@4184: @Override ingo@53: public Canvas createOld(DataList dataList) { ingo@53: HLayout layout = new HLayout(); ingo@53: VLayout vLayout = new VLayout(); raimund@91: layout.setWidth("400px"); ingo@53: ingo@53: Label label = new Label(dataList.getLabel()); raimund@91: label.setWidth("200px"); ingo@53: ingo@53: int size = dataList.size(); ingo@53: for (int i = 0; i < size; i++) { ingo@53: Data data = dataList.get(i); ingo@53: DataItem[] items = data.getItems(); ingo@53: ingo@53: for (DataItem item: items) { ingo@53: HLayout hLayout = new HLayout(); ingo@53: ingo@53: hLayout.addMember(label); ingo@61: hLayout.addMember(new Label(item.getLabel())); ingo@53: ingo@53: vLayout.addMember(hLayout); raimund@91: vLayout.setWidth("130px"); ingo@53: } ingo@53: } ingo@53: ingo@58: Canvas back = getBackButton(dataList.getState()); ingo@58: ingo@53: layout.addMember(label); ingo@53: layout.addMember(vLayout); ingo@58: layout.addMember(back); ingo@53: ingo@53: return layout; ingo@53: } ingo@53: ingo@53: ingo@20: /** ingo@20: * This method creates the content of the widget. ingo@20: * felix@1585: * @param data The {@link DataList} object. ingo@20: * ingo@20: * @return a combobox. ingo@20: */ ingo@51: protected Canvas createWidget(DataList data) { ingo@20: GWT.log("SelectProvider - create()"); ingo@20: ingo@51: VLayout layout = new VLayout(); ingo@83: layout.setAlign(VerticalAlignment.TOP); ingo@83: layout.setHeight(25); ingo@20: christian@4184: LinkedHashMap initial = new LinkedHashMap(); ingo@266: ingo@51: form = new DynamicForm(); ingo@20: ingo@51: int size = data.size(); ingo@51: ingo@51: for (int i = 0; i < size; i++) { ingo@51: Data d = data.get(i); ingo@51: ingo@51: Label label = new Label(d.getDescription()); ingo@51: label.setValign(VerticalAlignment.TOP); ingo@53: label.setHeight(20); ingo@785: label.setWidth(400); ingo@51: ingo@594: SelectItem combobox = new SelectItem(d.getLabel()); ingo@592: combobox.setWidth(250); ingo@51: ingo@51: LinkedHashMap it = new LinkedHashMap(); ingo@51: ingo@519: boolean defaultSet = false; ingo@519: boolean first = true; ingo@519: ingo@519: DataItem def = d.getDefault(); ingo@519: String defValue = def != null ? def.getStringValue() : null; ingo@519: ingo@519: if (defValue != null && defValue.length() > 0) { ingo@519: initial.put(d.getLabel(), def.getStringValue()); ingo@519: defaultSet = true; ingo@519: } ingo@266: raimund@2537: // I was here. Me 2. ingo@51: for (DataItem item: d.getItems()) { ingo@519: if (!defaultSet && first) { ingo@266: initial.put(d.getLabel(), item.getStringValue()); ingo@519: first = false; ingo@266: } ingo@266: ingo@51: it.put(item.getStringValue(), item.getLabel()); ingo@51: } ingo@51: ingo@51: label.setWidth(50); ingo@51: combobox.setValueMap(it); ingo@51: combobox.setShowTitle(false); ingo@51: form.setItems(combobox); ingo@51: ingo@51: layout.addMember(label); ingo@51: layout.addMember(form); ingo@20: } ingo@20: ingo@266: form.setValues(initial); ingo@266: ingo@30: layout.setAlign(VerticalAlignment.TOP); ingo@30: ingo@30: return layout; ingo@20: } ingo@20: ingo@20: christian@4184: @Override ingo@20: protected Data[] getData() { christian@4184: Map values = form.getValues(); christian@4184: Iterator keys = values.keySet().iterator(); ingo@20: ingo@51: Data[] list = new Data[values.size()]; ingo@51: int i = 0; ingo@51: ingo@51: while (keys.hasNext()) { ingo@51: String fieldname = (String) keys.next(); ingo@51: String selection = (String) values.get(fieldname); ingo@51: ingo@51: DataItem item = new DefaultDataItem(fieldname, null, selection); ingo@51: ingo@51: list[i++] = new DefaultData( ingo@51: fieldname, null, null, new DataItem[] { item }); ingo@51: } ingo@51: ingo@51: return list; ingo@20: } ingo@20: } ingo@20: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :