ingo@20: package de.intevation.flys.client.client.ui; ingo@20: ingo@20: import java.util.ArrayList; ingo@20: import java.util.LinkedHashMap; ingo@20: import java.util.List; ingo@20: ingo@20: import com.google.gwt.core.client.GWT; ingo@20: ingo@20: import com.smartgwt.client.widgets.Canvas; ingo@20: import com.smartgwt.client.widgets.IButton; ingo@20: import com.smartgwt.client.widgets.events.ClickEvent; ingo@20: import com.smartgwt.client.widgets.events.ClickHandler; ingo@20: import com.smartgwt.client.widgets.form.DynamicForm; ingo@20: import com.smartgwt.client.widgets.form.fields.ComboBoxItem; 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@20: import de.intevation.flys.client.shared.model.DefaultData; ingo@20: import de.intevation.flys.client.shared.model.DefaultDataItem; ingo@20: ingo@20: import de.intevation.flys.client.client.FLYSMessages; ingo@20: import de.intevation.flys.client.client.event.HasStepForwardHandlers; ingo@20: import de.intevation.flys.client.client.event.StepForwardEvent; ingo@20: import de.intevation.flys.client.client.event.StepForwardHandler; 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@20: public class SelectProvider implements UIProvider, HasStepForwardHandlers, ingo@20: ClickHandler ingo@20: { ingo@20: /** The message class that provides i18n strings.*/ ingo@20: protected FLYSMessages messages = GWT.create(FLYSMessages.class); ingo@20: ingo@20: /** The StepForwardHandlers.*/ ingo@20: protected List forwardHandlers; ingo@20: ingo@20: /** The combobox.*/ ingo@20: protected ComboBoxItem combobox; ingo@20: ingo@20: ingo@20: /** ingo@20: * Creates a new UIProvider instance of this class. ingo@20: */ ingo@20: public SelectProvider() { ingo@20: forwardHandlers = new ArrayList(); ingo@20: } ingo@20: ingo@20: ingo@20: public void addStepForwardHandler(StepForwardHandler handler) { ingo@20: if (handler != null) { ingo@20: GWT.log("SelectProvider - addStepForwardHandler()"); ingo@20: forwardHandlers.add(handler); ingo@20: } ingo@20: ingo@20: GWT.log("Handlers now: " + forwardHandlers.size()); ingo@20: } ingo@20: ingo@20: ingo@20: /** ingo@20: * This method is called after the user has clicked on the 'next' button to ingo@20: * step to the next state. ingo@20: * ingo@20: * @param e The StepForwardEvent. ingo@20: */ ingo@20: protected void fireStepForwardEvent(StepForwardEvent e) { ingo@20: GWT.log("SelectProvider - fireStepForwardEvent() handlers: " + forwardHandlers.size()); ingo@20: for (StepForwardHandler handler: forwardHandlers) { ingo@20: GWT.log("SelectProvider - fireStepForwardEvent()"); ingo@20: handler.onStepForward(e); ingo@20: } ingo@20: } ingo@20: ingo@20: public void onClick(ClickEvent e) { ingo@20: GWT.log("SelectProvider - feed and advance..."); ingo@20: Data[] data = getData(); ingo@20: ingo@20: GWT.log("GO ON..."); ingo@20: SelectProvider.this.fireStepForwardEvent(new StepForwardEvent(data)); ingo@20: } 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@20: public Canvas create(Data data) { ingo@20: VLayout v = new VLayout(); ingo@20: ingo@20: Canvas content = createWidget(data); ingo@20: ingo@20: IButton button = new IButton(messages.next(), this); ingo@20: //IButton button = new IButton(messages.next(), new ClickHandler() { ingo@20: // public void onClick(ClickEvent e) { ingo@20: // GWT.log("SelectProvider - feed and advance..."); ingo@20: // Data[] data = getData(); ingo@20: ingo@20: // GWT.log("GO ON..."); ingo@20: // SelectProvider.this.fireStepForwardEvent(new StepForwardEvent(data)); ingo@20: // } ingo@20: //}); 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@20: /** ingo@20: * This method creates the content of the widget. ingo@20: * ingo@20: * @param data The {@link Data} object. ingo@20: * ingo@20: * @return a combobox. ingo@20: */ ingo@20: protected Canvas createWidget(Data data) { ingo@20: GWT.log("SelectProvider - create()"); ingo@20: ingo@20: DynamicForm form = new DynamicForm(); ingo@20: combobox = new ComboBoxItem("river"); ingo@20: ingo@20: LinkedHashMap it = new LinkedHashMap(); ingo@20: ingo@20: for (DataItem item: data.getItems()) { ingo@20: GWT.log("Add item: " + item.getLabel()); ingo@20: it.put(item.getStringValue(), item.getLabel()); ingo@20: } ingo@20: ingo@20: combobox.setValueMap(it); ingo@20: form.setItems(combobox); ingo@20: ingo@20: return form; ingo@20: } ingo@20: ingo@20: ingo@20: protected Data[] getData() { ingo@20: String selection = combobox.getValueAsString(); ingo@20: ingo@20: GWT.log("SelectProvider - getData() Selected value = " + selection); ingo@20: DataItem item = new DefaultDataItem("river", null, selection); ingo@20: ingo@20: return new Data[] { new DefaultData( ingo@20: "river", null, null, new DataItem[] { item }, null) }; ingo@20: } ingo@20: } ingo@20: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :