com.gwtm.ui.client.widgets.Slider.java Source code

Java tutorial

Introduction

Here is the source code for com.gwtm.ui.client.widgets.Slider.java

Source

/*
 * Copyright (c) 2011 Zhihua (Dennis) Jiang
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.gwtm.ui.client.widgets;

import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.HTML;
import com.gwtm.ui.client.core.InputController;
import com.gwtm.ui.client.core.Utils;
import com.gwtm.ui.client.core.widgets.PanelBase;
import com.gwtm.ui.client.events.DraggingEvent;
import com.gwtm.ui.client.events.DraggingHandler;
import com.gwtm.ui.client.themes.ThemeConstants;
import com.gwtm.ui.client.themes.ThemeManager;

public class Slider extends PanelBase implements DraggingHandler, HasValueChangeHandlers<Integer> {

    protected int _value = 0;
    protected HTML _label = new HTML(_value + "");
    protected HTML _slider = new HTML("<div></div><div></div><div></div>");

    public Slider() {
        Utils.Widgets.setPrimaryCssClass(this, ThemeManager.getTheme().slider());
        add(_slider);
    }

    @Override
    public void onLoad() {
        super.onLoad();
        InputController.get().addDraggingHandler(this);
    }

    @Override
    public void onUnload() {
        InputController.get().removeDraggingHandler(this);
    }

    @Override
    public void onDraggingStart(DraggingEvent e) {
        InputController.get().captureDraggingEvent(this);
        int value = computeNewValue(e);
        setValue(value);
    }

    @Override
    public void onDraggingMove(DraggingEvent e) {
        e.stopPropagation();
        int value = computeNewValue(e);
        setValue(value);
    }

    @Override
    public void onDraggingEnd(DraggingEvent e) {
        InputController.get().releaseDraggingEvent(this);
    }

    public void setValue(int value, boolean fireEvent) {
        if (_value != value) {
            _value = value;
            updateSliderPosition();
            if (fireEvent) {
                ValueChangeEvent.fire(this, _value);
            }
        }
    }

    public void setValue(int value) {
        setValue(value, true);
    }

    public int getValue() {
        return _value;
    }

    @Override
    public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Integer> handler) {
        return this.addHandler(handler, ValueChangeEvent.getType());
    }

    public void setDisplayValue(boolean display) {
        if (display) {
            Utils.Widgets.removeExtensionCssClass(this, ThemeConstants.Extension.hide);
        } else {
            Utils.Widgets.setExtensionCssClass(this, ThemeConstants.Extension.hide);
        }
    }

    private int computeNewValue(DraggingEvent e) {
        Element ele = getElement();
        int offset = (int) e.getX() - ele.getAbsoluteLeft();
        int width = ele.getClientWidth();
        int value = offset * 100 / width;
        if (value > 100) {
            value = 100;
        } else if (value < 0) {
            value = 0;
        }
        return value;
    }

    private void updateSliderPosition() {
        _label.setHTML(_value + "");
        Element slider = getSliderElement();
        slider.getStyle().setWidth(_value, Unit.PCT);
    }

    private Element getSliderElement() {
        return (Element) _slider.getElement().getChild(1);
    }

}