ingo@20: package de.intevation.flys.client.client.ui;
ingo@20:
ingo@51: import java.util.Iterator;
ingo@20: import java.util.LinkedHashMap;
ingo@51: import java.util.Map;
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:
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:
ingo@211: import de.intevation.flys.client.client.FLYSConstants;
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: {
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: */
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:
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:
ingo@266: 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:
ingo@20: protected Data[] getData() {
ingo@51: Map values = form.getValues();
ingo@51: 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 :