edu.arizona.biosemantics.gxt.theme.green.client.base.slider.Css3VerticalSliderAppearance.java Source code

Java tutorial

Introduction

Here is the source code for edu.arizona.biosemantics.gxt.theme.green.client.base.slider.Css3VerticalSliderAppearance.java

Source

/**
 * Sencha GXT 3.1.1 - Sencha for GWT
 * Copyright(c) 2007-2014, Sencha, Inc.
 * licensing@sencha.com
 *
 * http://www.sencha.com/products/gxt/license/
 */
package edu.arizona.biosemantics.gxt.theme.green.client.base.slider;

import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.safecss.shared.SafeStylesBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.sencha.gxt.cell.core.client.SliderCell.VerticalSliderAppearance;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.core.client.util.Point;
import edu.arizona.biosemantics.gxt.theme.green.client.FieldDetails;
import edu.arizona.biosemantics.gxt.theme.green.client.SliderDetails;

/**
 *
 */
public class Css3VerticalSliderAppearance extends Css3HorizontalSliderAppearance
        implements VerticalSliderAppearance {
    public interface Css3VerticalSliderResources extends Css3HorizontalSliderResources {
        @Source({ "Css3HorizontalSlider.css", "Css3VerticalSlider.css" })
        Css3VerticalSliderStyle style();
    }

    public interface Css3VerticalSliderStyle extends Css3HorizontalSliderStyle {
    }

    private final Css3VerticalSliderResources resources;

    public Css3VerticalSliderAppearance() {
        this(GWT.<Css3VerticalSliderResources>create(Css3VerticalSliderResources.class));
    }

    public Css3VerticalSliderAppearance(Css3VerticalSliderResources resources) {
        this(resources, GWT.<Css3HorizontalSliderTemplate>create(Css3HorizontalSliderTemplate.class));
    }

    public Css3VerticalSliderAppearance(Css3VerticalSliderResources resources,
            Css3HorizontalSliderTemplate template) {
        super(resources, template);
        this.resources = resources;
    }

    @Override
    public int getClickedValue(Context context, Element parent, Point location) {
        XElement track = getTrack(parent);
        return location.getY() - track.getTop(false) - (resources.theme().field().slider().thumbWidth() / 2);
    }

    @Override
    public int getSliderLength(XElement parent) {
        SliderDetails sliderDetails = resources.theme().field().slider();
        return getTrack(parent).getOffsetHeight() - sliderDetails.thumbWidth();
    }

    @Override
    public boolean isVertical() {
        return true;
    }

    @Override
    public void render(double fractionalValue, int width, int height, SafeHtmlBuilder sb) {
        if (height == -1) {
            // default
            height = 200;
        }

        FieldDetails fieldDetails = resources.theme().field();

        int thumbWidth = fieldDetails.slider().thumbWidth();
        int thumbHeight = fieldDetails.slider().thumbHeight();

        int fieldWidth = Math.max(fieldDetails.height(), fieldDetails.slider().thumbHeight());
        fieldWidth = Math.max(fieldWidth, fieldDetails.slider().trackHeight());

        int halfThumbWidth = thumbWidth / 2;
        int maxTrackLength = height - thumbWidth;

        int offset = (int) (fractionalValue * maxTrackLength) - halfThumbWidth;
        offset = Math.max(-halfThumbWidth, offset);
        offset = Math.min(maxTrackLength + halfThumbWidth, offset);

        SafeStylesBuilder sliderStyleBuilder = new SafeStylesBuilder();
        sliderStyleBuilder.appendTrustedString("height:" + height + "px;");
        sliderStyleBuilder.appendTrustedString("width:" + fieldWidth + "px;");

        SafeStylesBuilder trackStyleBuilder = new SafeStylesBuilder();
        trackStyleBuilder.appendTrustedString("height: " + height + "px;");
        trackStyleBuilder
                .appendTrustedString("left:" + ((fieldWidth - fieldDetails.slider().trackHeight()) / 2) + "px;");

        SafeStylesBuilder thumbStyleBuilder = new SafeStylesBuilder();
        thumbStyleBuilder.appendTrustedString("bottom:" + offset + "px;");
        // reversed width/height due to orientation
        int thumbLeft = ((fieldDetails.slider().trackHeight() - thumbHeight) / 2)
                - (fieldDetails.slider().trackBorder().top() + fieldDetails.slider().trackBorder().bottom());
        thumbStyleBuilder.appendTrustedString("left:" + thumbLeft + "px;");
        thumbStyleBuilder.appendTrustedString("margin-bottom:" + halfThumbWidth + "px;");

        SafeStylesBuilder thumbCenterStyleBuilder = new SafeStylesBuilder();
        updateThumbCenterStyle(thumbCenterStyleBuilder, "top", "height", thumbWidth,
                fieldDetails.slider().thumbBorder().left(), fieldDetails.slider().thumbBorder().right());
        updateThumbCenterStyle(thumbCenterStyleBuilder, "left", "width", thumbHeight,
                fieldDetails.slider().thumbBorder().top(), fieldDetails.slider().thumbBorder().bottom());

        sb.append(template.render(resources.style(), sliderStyleBuilder.toSafeStyles(),
                trackStyleBuilder.toSafeStyles(), thumbStyleBuilder.toSafeStyles(),
                thumbCenterStyleBuilder.toSafeStyles()));
    }

    @Override
    public void setThumbPosition(Element parent, int pos) {
        XElement thumbElement = XElement.as(getThumb(parent));
        int halfThumbSize = resources.theme().field().slider().thumbWidth() / 2;
        pos = Math.max(-halfThumbSize, pos);
        thumbElement.getStyle().setBottom(pos, Unit.PX);
    }
}