view flys-client/src/main/java/de/intevation/flys/client/client/widgets/KMSpinner.java @ 3847:f3b821735e39

Calculate the info url via i18n Don't fetch the info url from the artifact service and use i18n to calculate the url by using the official gauge and river number. flys-client/trunk@5582 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Bjoern Ricks <bjoern.ricks@intevation.de>
date Mon, 24 Sep 2012 08:39:22 +0000
parents 3b4cef59836a
children 4aa7216b329a
line wrap: on
line source
package de.intevation.flys.client.client.widgets;

import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.NumberFormat;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.widgets.Button;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.FormItemValueFormatter;
import com.smartgwt.client.widgets.form.FormItemValueParser;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
import com.smartgwt.client.widgets.form.fields.events.KeyPressEvent;
import com.smartgwt.client.widgets.form.fields.events.KeyPressHandler;
import com.smartgwt.client.widgets.layout.HLayout;

import de.intevation.flys.client.shared.model.FacetRecord;

import java.util.ArrayList;
import java.util.List;

/**
 * SpinnerItem-like element with text label and up/down buttons.
 */
public class KMSpinner extends HLayout {
    protected List<KMSpinnerChangeListener> listeners = new ArrayList<KMSpinnerChangeListener>();

    protected Label label;
    protected FacetRecord facetRecord;
    protected double value;

    public KMSpinner(double initialValue, FacetRecord facetRecord) {
        super(2);
        this.facetRecord = facetRecord;
        this.value = initialValue;

        setWidth("99%");

        // minusButton shall ask service for previous available cs.
        Button minusButton = new Button("-");
        minusButton.setWidth(18);
        minusButton.setHeight(18);
        minusButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
            public void onClick(ClickEvent evt) {
                fireChangedEvent(value - 0.1d, false);
            }
        });

        DynamicForm form = new DynamicForm();
        final TextItem kmField = new TextItem();
        kmField.setValue(initialValue);
        kmField.setWidth("*");
        kmField.setTitle("");
        kmField.setHeight(16);

        FormItemValueFormatter doubleFormat = new FormItemValueFormatter() {
            public String formatValue(Object value, Record record, DynamicForm form, FormItem item) {
                if (value != null) {
                    NumberFormat nf = NumberFormat.getDecimalFormat();
                    try {
                        double d = Double.valueOf(value.toString()).doubleValue();
                        return nf.format(d);
                    }
                    catch (Exception e) {
                        return value.toString();
                    }
                }
                else {
                    return null;
                }
            }
        };
        kmField.setEditorValueFormatter(doubleFormat);

        FormItemValueParser doubleParser = new FormItemValueParser() {
            public Object parseValue(String value, DynamicForm form, FormItem item) {
                if (value == null)
                    return null;
                try {
                    NumberFormat nf = NumberFormat.getDecimalFormat();
                    double d = nf.parse(value.toString());
                    return Double.toString(d);
                }
                catch(NumberFormatException nfe) {
                    return value;
                }
            }
        };
        kmField.setEditorValueParser(doubleParser);

        // Update on focus lost and enter-pressed.
        kmField.addBlurHandler(new BlurHandler() {
            @Override
            public void onBlur(BlurEvent be) {
                if (kmField.getValue() != null) {
                    try {
                        fireChangedEvent(Double.parseDouble(kmField.getValue().toString()), true);
                    }
                    catch(NumberFormatException nfe) {
                        GWT.log("entered string cannot be parsed to double.");
                    }
                }
            }
        });
        kmField.addKeyPressHandler(new KeyPressHandler() {
            @Override
            public void onKeyPress(KeyPressEvent kpe) {
                if (kpe.getKeyName().equals("Enter")) {
                    kmField.blurItem();
                }
            }
        });

        // TODO: i18n Now add all the validators, formatters, editors/parsers  etc.
        form.setFields(kmField);
        form.setTitle("");
        form.setTitlePrefix("");
        form.setTitleSuffix("");
        form.setTitleWidth(0);
        form.setWidth(50);
        form.setHeight(18);

        // PlusButton shall ask service for next available cs.
        Button plusButton = new Button("+");
        plusButton.setWidth(18);
        plusButton.setHeight(18);
        plusButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
            public void onClick(ClickEvent evt) {
                fireChangedEvent(value + 0.1d, true);
            }
        });

        this.addMember(minusButton);
        this.addMember(form);
        this.addMember(plusButton);
    }

    public void addChangeListener(KMSpinnerChangeListener listener) {
        this.listeners.add(listener);
    }

    protected void fireChangedEvent(double val, boolean up) {
        for(KMSpinnerChangeListener listener : listeners) {
            listener.spinnerValueEntered(this, val, facetRecord, up);
        }
    }
}

http://dive4elements.wald.intevation.org