All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sksamuel.jqm4gwt.form.elements.JQMRangeSlider Maven / Gradle / Ivy

The newest version!
package com.sksamuel.jqm4gwt.form.elements;

import com.google.gwt.dom.client.Document;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.sksamuel.jqm4gwt.HasMini;
import com.sksamuel.jqm4gwt.HasText;
import com.sksamuel.jqm4gwt.JQMCommon;
import com.sksamuel.jqm4gwt.form.JQMFieldContainer;

/**
 * See Range Slider
 *
 * @author slavap
 *
 */
public class JQMRangeSlider extends JQMFieldContainer implements HasText,
        HasMini {

    protected final FlowPanel range;

    private final JQMSlider lo;
    private final JQMSlider hi;

    public JQMRangeSlider() {
        range = new FlowPanel();
        range.getElement().setId(Document.get().createUniqueId());
        JQMCommon.setDataRole(range, "rangeslider");
        add(range);

        lo = new JQMSlider(range);
        lo.addValueChangeHandler(new ValueChangeHandler() {
            @Override
            public void onValueChange(ValueChangeEvent event) {
                Double loV = event.getValue();
                Double hiV = hi.getValue();
                if (loV == hiV || loV != null && loV.equals(hiV)) return;
                if (loV != null && loV.compareTo(hiV) > 0) {
                    hi.setValue(loV, true/*fireEvents*/);
                    lo.setValue(loV, true/*fireEvents*/); // could be set successfully after hi update only
                }
            }
        });

        hi = new JQMSlider(range);
        hi.addValueChangeHandler(new ValueChangeHandler() {
            @Override
            public void onValueChange(ValueChangeEvent event) {
                Double loV = lo.getValue();
                Double hiV = event.getValue();
                if (hiV == loV || hiV != null && hiV.equals(loV)) return;
                if (hiV != null && hiV.compareTo(loV) < 0) {
                    lo.setValue(hiV, true/*fireEvents*/);
                    hi.setValue(hiV, true/*fireEvents*/); // could be set successfully after lo update only
                }
            }
        });
    }

    public JQMSlider lo() {
        return lo;
    }

    public JQMSlider getLo() {
        return lo;
    }

    public JQMSlider hi() {
        return hi;
    }

    public JQMSlider getHi() {
        return hi;
    }

    @Override
    public String getText() {
        return lo.getText();
    }

    @Override
    public void setText(String text) {
        lo.setText(text);
        hi.setText(text);
    }

    @Override
    public JQMRangeSlider withText(String text) {
        setText(text);
        return this;
    }

    public boolean isHighlight() {
        String v = JQMCommon.getAttribute(range, "data-highligh");
        return v == null || v.isEmpty() || "true".equals(v);
    }

    public void setHighlight(boolean highlight) {
        if (highlight) JQMCommon.setAttribute(range, "data-highlight", null);
        else JQMCommon.setAttribute(range, "data-highlight", String.valueOf(highlight));
    }

    @Override
    public String getTheme() {
        return JQMCommon.getTheme(range);
    }

    @Override
    public void setTheme(String themeName) {
        JQMCommon.setTheme(range, themeName);
    }

    @Override
    public JQMRangeSlider withTheme(String themeName) {
        setTheme(themeName);
        return this;
    }

    public String getTrackTheme() {
        return range.getElement().getAttribute("data-track-theme");
    }

    /**
     * Sets the theme swatch for the slider
     */
    public void setTrackTheme(String theme) {
        JQMCommon.setAttribute(range, "data-track-theme", theme);
    }

    @Override
    public boolean isMini() {
        return JQMCommon.isMini(range);
    }

    @Override
    public void setMini(boolean mini) {
        JQMCommon.setMini(range, mini);
    }

    @Override
    public JQMRangeSlider withMini(boolean mini) {
        setMini(mini);
        return this;
    }

    public void disable() {
        lo.disable();
        hi.disable();
    }

    public void enable() {
        lo.enable();
        hi.enable();
    }

    public Double getLoValue() {
        return lo.getValue();
    }

    public void setLoValue(Double value) {
        lo.setValue(value);
    }

    public double getLoValueDouble() {
        return lo.getValueDouble();
    }

    // GWT Designer has strange problem with showing properties, which are defined as Double,
    // but works just fine with double.
    public void setLoValueDouble(double value) {
        lo.setValueDouble(value);
    }

    public int getLoValueInt() {
        return lo.getValueInt();
    }

    public void setLoValueInt(int value) {
        lo.setValueInt(value);
    }

    public Double getHiValue() {
        return hi.getValue();
    }

    public void setHiValue(Double value) {
        hi.setValue(value);
    }

    public double getHiValueDouble() {
        return hi.getValueDouble();
    }

    public void setHiValueDouble(double value) {
        hi.setValueDouble(value);
    }

    public int getHiValueInt() {
        return hi.getValueInt();
    }

    public void setHiValueInt(int value) {
        hi.setValueInt(value);
    }

    public Double getStep() {
        return lo.getStep();
    }

    public void setStep(Double value) {
        lo.setStep(value);
        hi.setStep(value);
    }

    public int getStepInt() {
        return lo.getStepInt();
    }

    public void setStepInt(int value) {
        lo.setStepInt(value);
        hi.setStepInt(value);
    }

    public double getStepDouble() {
        return lo.getStepDouble();
    }

    public void setStepDouble(double value) {
        lo.setStepDouble(value);
        hi.setStepDouble(value);
    }

    public Double getMin() {
        return lo.getMin();
    }

    public void setMin(Double min) {
        lo.setMin(min);
        hi.setMin(min);
    }

    public int getMinInt() {
        return lo.getMinInt();
    }

    public void setMinInt(int min) {
        lo.setMinInt(min);
        hi.setMinInt(min);
    }

    public double getMinDouble() {
        return lo.getMinDouble();
    }

    public void setMinDouble(double min) {
        lo.setMinDouble(min);
        hi.setMinDouble(min);
    }

    public Double getMax() {
        return lo.getMax();
    }

    public void setMax(Double max) {
        lo.setMax(max);
        hi.setMax(max);
    }

    public int getMaxInt() {
        return lo.getMaxInt();
    }

    public void setMaxInt(int max) {
        lo.setMaxInt(max);
        hi.setMaxInt(max);
    }

    public double getMaxDouble() {
        return lo.getMaxDouble();
    }

    public void setMaxDouble(double max) {
        lo.setMaxDouble(max);
        hi.setMaxDouble(max);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy