Package com.sencha.gxt.theme.base.client.slider

Source Code of com.sencha.gxt.theme.base.client.slider.SliderHorizontalBaseAppearance$SliderHorizontalResources

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

import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.safecss.shared.SafeStyles;
import com.google.gwt.safecss.shared.SafeStylesUtils;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.sencha.gxt.core.client.XTemplates;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.core.client.util.Point;

public abstract class SliderHorizontalBaseAppearance extends SliderBaseAppearance {

  public interface SliderHorizontalResources extends SliderResources {

    @Override
    SliderHorizontalStyle style();

  }
  public interface SliderHorizontalStyle extends SliderStyle {
  }

  public interface SliderHorizontalTemplate extends XTemplates {

    @XTemplate(source = "SliderHorizontal.html")
    SafeHtml template(SliderStyle style, SafeStyles width, SafeStyles offset);

  }

  private final SliderHorizontalResources resources;
  private final SliderHorizontalTemplate template;

  public SliderHorizontalBaseAppearance(SliderHorizontalResources resources, SliderHorizontalTemplate template) {
    super(resources);
    this.resources = resources;
    this.template = template;
  }

  @Override
  public int getSliderLength(XElement parent) {
    return getInnerEl(parent).getOffsetWidth();
  }

  @Override
  public int getClickedValue(Context context, Element parent, Point location) {
    Element innerEl = getInnerEl(parent);
    return location.getX() - XElement.as(innerEl).getLeft(false);
  }

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

    SafeStyles offsetStyles = createThumbStyles(fractionalValue, width);
    SafeStyles widthStyle = SafeStylesUtils.fromTrustedString("width: " + width + "px;");
    sb.append(template.template(resources.style(), widthStyle, offsetStyles));
  }

  @Override
  public void setThumbPosition(Element parent, int pos) {
    XElement thumbElement = XElement.as(getThumb(parent));
    pos = Math.max(-(getHalfThumbWidth()), pos);
    thumbElement.getStyle().setLeft(pos, Unit.PX);
  }

  @Override
  protected Element getEndEl(Element parent) {
    return parent.getFirstChildElement().getFirstChildElement();
  }

  @Override
  protected Element getInnerEl(Element parent) {
    return parent.getFirstChildElement().getFirstChildElement().getFirstChildElement();
  }

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

  protected SafeStyles createThumbStyles(double fractionalValue, int width) {
    int offset = (int) (fractionalValue * (width - 21)) - getHalfThumbWidth();

    offset = Math.max(-(getHalfThumbWidth()), offset);

    SafeStyles offsetStyles = SafeStylesUtils.fromTrustedString("left:" + offset + "px;");
    return offsetStyles;
  }

  protected int getHalfThumbWidth() {
    return 7;
  }

  protected int getTrackPadding() {
    return 7;
  }
}
TOP

Related Classes of com.sencha.gxt.theme.base.client.slider.SliderHorizontalBaseAppearance$SliderHorizontalResources

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.