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@30: import com.smartgwt.client.types.VerticalAlignment;
ingo@20: import com.smartgwt.client.widgets.Canvas;
ingo@20: import com.smartgwt.client.widgets.IButton;
ingo@30: import com.smartgwt.client.widgets.Label;
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@30: 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@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: forwardHandlers.add(handler);
ingo@20: }
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: handler.onStepForward(e);
ingo@20: }
ingo@20: }
ingo@20:
ingo@20: public void onClick(ClickEvent e) {
ingo@20: Data[] data = getData();
ingo@20:
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:
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@30: HLayout layout = new HLayout();
ingo@30: Label label = new Label(messages.river_selection());
ingo@30: DynamicForm form = new DynamicForm();
ingo@30: 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@30: label.setWidth(50);
ingo@20: combobox.setValueMap(it);
ingo@30: combobox.setShowTitle(false);
ingo@20: form.setItems(combobox);
ingo@20:
ingo@30: layout.addMember(label);
ingo@30: layout.addMember(form);
ingo@30:
ingo@30: label.setValign(VerticalAlignment.TOP);
ingo@30: layout.setAlign(VerticalAlignment.TOP);
ingo@30:
ingo@30: return layout;
ingo@20: }
ingo@20:
ingo@20:
ingo@20: protected Data[] getData() {
ingo@20: String selection = combobox.getValueAsString();
ingo@30: 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 :