Package com.sencha.gxt.core.client.dom

Source Code of com.sencha.gxt.core.client.dom.DefaultScrollSupport

/**
* 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.core.client.dom;

import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.UIObject;
import com.sencha.gxt.core.client.GXT;

public class DefaultScrollSupport implements ScrollSupport {

  private XElement scrollElement;

  private ScrollMode scrollMode = ScrollMode.NONE;

  public DefaultScrollSupport(Element scrollElement) {
    this.scrollElement = scrollElement.cast();
  }

  @Override
  public void ensureVisible(UIObject item) {
    Element element = item.getElement();
    ensureVisibleImpl(scrollElement, element);
  }

  @Override
  public int getHorizontalScrollPosition() {
    return scrollElement.getScrollLeft();
  }

  @Override
  public int getMaximumHorizontalScrollPosition() {
    return ScrollImplHelper.getMaximumHorizontalScrollPosition(scrollElement);
  }

  @Override
  public int getMaximumVerticalScrollPosition() {
    return scrollElement.getScrollHeight() - scrollElement.getClientHeight();
  }

  @Override
  public int getMinimumHorizontalScrollPosition() {
    return ScrollImplHelper.getMinimumHorizontalScrollPosition(scrollElement);
  }

  @Override
  public int getMinimumVerticalScrollPosition() {
    return 0;
  }

  public XElement getScrollElement() {
    return scrollElement;
  }

  @Override
  public ScrollMode getScrollMode() {
    return scrollMode;
  }

  @Override
  public int getVerticalScrollPosition() {
    return scrollElement.getScrollTop();
  }

  @Override
  public void scrollToBottom() {
    setVerticalScrollPosition(getMaximumVerticalScrollPosition());
  }

  @Override
  public void scrollToLeft() {
    setHorizontalScrollPosition(getMinimumHorizontalScrollPosition());
  }

  @Override
  public void scrollToRight() {
    setHorizontalScrollPosition(getMaximumHorizontalScrollPosition());
  }

  @Override
  public void scrollToTop() {
    setVerticalScrollPosition(getMinimumVerticalScrollPosition());
  }

  @Override
  public void setHorizontalScrollPosition(int position) {
    scrollElement.setScrollLeft(position);
  }

  @Override
  public void setScrollMode(ScrollMode scrollMode) {
    this.scrollMode = scrollMode;
    switch (scrollMode) {
      case AUTO:
      case ALWAYS:
      case NONE:
        scrollElement.getStyle().setProperty("overflowX", scrollMode.value().toLowerCase());
        scrollElement.getStyle().setProperty("overflowY", scrollMode.value().toLowerCase());
        break;
      case AUTOX:
        scrollElement.getStyle().setProperty("overflowX", scrollMode.value().toLowerCase());
        scrollElement.getStyle().setProperty("overflowY", "hidden");
        break;
      case AUTOY:
        scrollElement.getStyle().setProperty("overflowY", scrollMode.value().toLowerCase());
        scrollElement.getStyle().setProperty("overflowX", "hidden");
        break;
    }
    if ((GXT.isIE6() || GXT.isIE7()) && scrollMode != ScrollMode.NONE) {
      Scheduler.get().scheduleFinally(new ScheduledCommand() {
        @Override
        public void execute() {
          scrollElement.makePositionable();
        }
      });
    }
  }
 
  @Override
  public void setVerticalScrollPosition(int position) {
    scrollElement.setScrollTop(position);
  }

  private native void ensureVisibleImpl(Element scroll, Element e) /*-{
    if (!e)
      return;

    var item = e;
    var realOffset = 0;
    while (item && (item != scroll)) {
      realOffset += item.offsetTop;
      item = item.offsetParent;
    }

    scroll.scrollTop = realOffset - scroll.offsetHeight / 2;
  }-*/;

TOP

Related Classes of com.sencha.gxt.core.client.dom.DefaultScrollSupport

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.