001    package org.gwtbootstrap3.extras.slider.client.ui;
002    
003    /*
004     * #%L
005     * GwtBootstrap3
006     * %%
007     * Copyright (C) 2013 - 2015 GwtBootstrap3
008     * %%
009     * Licensed under the Apache License, Version 2.0 (the "License");
010     * you may not use this file except in compliance with the License.
011     * You may obtain a copy of the License at
012     * 
013     *      http://www.apache.org/licenses/LICENSE-2.0
014     * 
015     * Unless required by applicable law or agreed to in writing, software
016     * distributed under the License is distributed on an "AS IS" BASIS,
017     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018     * See the License for the specific language governing permissions and
019     * limitations under the License.
020     * #L%
021     */
022    
023    import org.gwtbootstrap3.extras.slider.client.ui.base.SliderBase;
024    
025    import com.google.gwt.dom.client.Element;
026    import com.google.gwt.uibinder.client.UiConstructor;
027    import com.google.gwt.user.client.Event;
028    
029    /**
030     * This slider takes as value a range with a min value and a max value.
031     *
032     * @author Xiaodong SUN
033     */
034    public class RangeSlider extends SliderBase<Range> {
035    
036        /**
037         * Creates a range slider.
038         */
039        public RangeSlider() {
040            setRange(true);
041        }
042    
043        /**
044         * Creates a range slider with min, max, and range value.
045         *
046         * @param min
047         * @param max
048         * @param range
049         */
050        public RangeSlider(final double min, final double max, final Range range) {
051            this();
052            setMin(min);
053            setMax(max);
054            setValue(range);
055        }
056    
057        /**
058         * Creates a range slider with min, max, and range value.<br>
059         * <br>
060         * Useful for UiBinder.
061         *
062         * @param min
063         * @param max
064         * @param value
065         */
066        @UiConstructor
067        public RangeSlider(final double min, final double max, final String value) {
068            this(min, max, Range.fromString(value));
069        }
070    
071        @Override
072        protected native void setValue(Element e, Range value) /*-{
073            var range = value.@org.gwtbootstrap3.extras.slider.client.ui.Range::toJsArray()();
074            $wnd.jQuery(e).slider(@org.gwtbootstrap3.extras.slider.client.ui.base.SliderCommand::SET_VALUE, range);
075        }-*/;
076    
077        @Override
078        protected native Range getValue(Element e) /*-{
079            var range = $wnd.jQuery(e).slider(@org.gwtbootstrap3.extras.slider.client.ui.base.SliderCommand::GET_VALUE);
080            return @org.gwtbootstrap3.extras.slider.client.ui.Range::new(Lcom/google/gwt/core/client/JsArrayNumber;)(range);
081        }-*/;
082    
083        @Override
084        protected Range convertValue(String value) {
085            return Range.fromString(value);
086        }
087    
088        @Override
089        protected native void onSlide(Event event) /*-{
090            var range = @org.gwtbootstrap3.extras.slider.client.ui.Range::new(Lcom/google/gwt/core/client/JsArrayNumber;)(event.value);
091            this.@org.gwtbootstrap3.extras.slider.client.ui.RangeSlider::fireSlideEvent(Lorg/gwtbootstrap3/extras/slider/client/ui/Range;)(range);
092        }-*/;
093    
094        @Override
095        protected native void onSlideStart(Event event) /*-{
096            var range = @org.gwtbootstrap3.extras.slider.client.ui.Range::new(Lcom/google/gwt/core/client/JsArrayNumber;)(event.value);
097            this.@org.gwtbootstrap3.extras.slider.client.ui.RangeSlider::fireSlideStartEvent(Lorg/gwtbootstrap3/extras/slider/client/ui/Range;)(range);
098        }-*/;
099    
100        @Override
101        protected native void onSlideStop(Event event) /*-{
102            var range = @org.gwtbootstrap3.extras.slider.client.ui.Range::new(Lcom/google/gwt/core/client/JsArrayNumber;)(event.value);
103            this.@org.gwtbootstrap3.extras.slider.client.ui.RangeSlider::fireSlideStopEvent(Lorg/gwtbootstrap3/extras/slider/client/ui/Range;)(range);
104        }-*/;
105    
106        @Override
107        protected native void onSlideChange(Event event) /*-{
108            var range = @org.gwtbootstrap3.extras.slider.client.ui.Range::new(Lcom/google/gwt/core/client/JsArrayNumber;)(event.value.newValue);
109            this.@org.gwtbootstrap3.extras.slider.client.ui.RangeSlider::fireChangeEvent(Lorg/gwtbootstrap3/extras/slider/client/ui/Range;)(range);
110        }-*/;
111    
112    }