001package 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
023import 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 */
030public 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}