view flys-client/src/main/java/de/intevation/flys/client/client/widgets/KMSpinner.java @ 3719:e82acd5c86f7

Merged revisions 5495-5496,5509,5514-5515,5521-5526 via svnmerge from file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-client/trunk ........ r5495 | ingo | 2012-09-17 14:55:09 +0200 (Mo, 17 Sep 2012) | 1 line Added missing i18n strings for minfo state description. ........ r5496 | ingo | 2012-09-17 15:47:43 +0200 (Mo, 17 Sep 2012) | 1 line Tagged 'flys-client' as 2.9.1 ........ r5509 | teichmann | 2012-09-18 17:54:37 +0200 (Di, 18 Sep 2012) | 1 line Removed trailing whitespace. ........ r5514 | bricks | 2012-09-19 09:56:42 +0200 (Mi, 19 Sep 2012) | 2 lines Add missing Changelog entry for r5472 ........ r5515 | bricks | 2012-09-19 09:59:35 +0200 (Mi, 19 Sep 2012) | 2 lines Implement a scrolling gauge info tree ........ r5521 | bricks | 2012-09-19 14:41:48 +0200 (Mi, 19 Sep 2012) | 2 lines Add station info to the gauges ........ r5522 | bricks | 2012-09-19 14:43:43 +0200 (Mi, 19 Sep 2012) | 2 lines Improve the handling of the GaugePanel in the ParameterList ........ r5523 | bricks | 2012-09-19 14:51:02 +0200 (Mi, 19 Sep 2012) | 4 lines Improve the GaugePanel Be locale aware and only load the gauge info if the river name changes. ........ r5524 | bricks | 2012-09-19 15:14:46 +0200 (Mi, 19 Sep 2012) | 5 lines Fix a NullPointerException When iterating over a list it must be checked if the reference to the list is valid. ........ r5525 | bricks | 2012-09-19 15:16:24 +0200 (Mi, 19 Sep 2012) | 2 lines Don't display the GaugePanel if no river is selected ........ r5526 | bricks | 2012-09-19 15:18:36 +0200 (Mi, 19 Sep 2012) | 2 lines Use the wstunit from the river as unit for the Pegelnullpunkt ........ flys-client/tags/2.9.1@5528 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 19 Sep 2012 14:42:48 +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