001    package org.gwtbootstrap3.extras.slider.client.ui.base.event;
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 com.google.gwt.event.shared.GwtEvent;
024    
025    /**
026     * The slide event is fired when the slider is dragged.
027     *
028     * @param <T> slider value type
029     */
030    public class SlideEvent<T> extends GwtEvent<SlideHandler<T>> {
031    
032        private static Type<SlideHandler<?>> TYPE;
033    
034        private T value;
035    
036        /**
037         * Fires a slide event on all registered handlers in the handler manager. If
038         * no such handlers exist, this method will do nothing.
039         *
040         * @param source the source of the handlers
041         * @param newValue the new slider value
042         */
043        public static <T> void fire(final HasSlideHandlers<T> source, T newValue) {
044            if (TYPE != null) {
045                SlideEvent<T> event = new SlideEvent<T>(newValue);
046                source.fireEvent(event);
047            }
048        }
049    
050        /**
051         * Gets the type associated with this event.
052         *
053         * @return returns the handler type
054         */
055        public static Type<SlideHandler<?>> getType() {
056            if (TYPE == null) {
057                TYPE = new Type<SlideHandler<?>>();
058            }
059            return TYPE;
060        }
061    
062        @SuppressWarnings({ "unchecked", "rawtypes" })
063        @Override
064        public Type<SlideHandler<T>> getAssociatedType() {
065            return (Type) TYPE;
066        }
067    
068        @Override
069        protected void dispatch(final SlideHandler<T> handler) {
070            handler.onSlide(this);
071        }
072    
073        /**
074         * Creates a slide event with slider value
075         *
076         * @param newValue the new slider value
077         */
078        protected SlideEvent(final T newValue) {
079            this.value = newValue;
080        }
081    
082        /**
083         * @return the new slider value
084         */
085        public T getValue() {
086            return value;
087        }
088    
089        @Override
090        public String toDebugString() {
091            return super.toDebugString() + getValue();
092        }
093    }