/*
* Copyright 2010 Daniel Kurka
*
* 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.googlecode.mgwt.ui.client.widget.panel.scroll;
import java.util.Iterator;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import com.google.web.bindery.event.shared.HandlerRegistration;
import com.googlecode.mgwt.collection.shared.LightArrayInt;
import com.googlecode.mgwt.ui.client.widget.panel.flex.IsFlexible;
import com.googlecode.mgwt.ui.client.widget.panel.scroll.impl.ScrollPanelImpl;
/**
* A scroll panel that can handle touch input and has momentum
*
* The scrollbars maybe missing from the DOM if scrolling is disabled for a certain direction.
*
* @author Daniel Kurka
*
*/
public class ScrollPanel extends Composite implements HasWidgets, IsFlexible {
protected final ScrollPanelImpl impl = GWT.create(ScrollPanelImpl.class);
public ScrollPanel() {
initWidget(impl);
}
@Override
public void setWidget(Widget w) {
impl.setWidget(w);
}
public void setWidget(IsWidget w) {
impl.setWidget(w);
}
/**
* Methods only exists to make scroll panel work with UiBinder @use {@link #setWidget(IsWidget)}
*/
@Override
public void add(Widget w) {
impl.add(w);
}
@Override
public void clear() {
impl.clear();
}
@Override
public Iterator<Widget> iterator() {
return impl.iterator();
}
@Override
public boolean remove(Widget w) {
return impl.remove(w);
}
public void setOffSetY(int y) {
impl.setOffSetY(y);
}
public void setMaxScrollY(int y) {
impl.setMaxScrollY(y);
}
public int getMaxScrollY() {
return impl.getMaxScrollY();
}
public void setMinScrollY(int y) {
impl.setMinScrollY(y);
}
public int getMinScrollY() {
return impl.getMinScrollY();
}
/**
* Should scrolling in x-axis be enabled
*
* @param enabled true to enable
*/
public void setScrollingEnabledX(boolean enabled) {
impl.setScrollingEnabledX(enabled);
}
/**
* Refresh the scroll panel
*
* This method needs to be called if the content of the child widget has changed without calling
* {@link #setWidget(IsWidget)}
*
* ScrollPanel needs to recalculate sizes.
*/
public void refresh() {
impl.refresh();
}
/**
* Should scrolling in y-axis be enabled
*
* @param enabled true to enable
*/
public void setScrollingEnabledY(boolean enabled) {
impl.setScrollingEnabledY(enabled);
}
/**
* Use position absolute instead of -webkit-translate
*
* This is required on android if the scrolling area contains input elements
*
* default: false
*
* @param android a boolean.
*/
public void setUsePos(boolean android) {
impl.setUsePos(android);
}
public void scrollTo(int x, int y) {
impl.scrollTo(x, y, 1);
}
public void scrollTo(int x, int y, int time, boolean relative) {
impl.scrollTo(x, y, time, relative);
}
public void scrollToPage(int pageX, int pageY, int time) {
impl.scrollToPage(pageX, pageY, time);
}
public void scrollToPage(int pageX, int pageY, int time, boolean issueEvent) {
impl.scrollToPage(pageX, pageY, time, issueEvent);
}
public void setBounce(boolean bounce) {
impl.setBounce(bounce);
}
public void setMomentum(boolean momentum) {
impl.setMomentum(momentum);
}
public void setSnap(boolean snap) {
impl.setSnap(snap);
}
public void setSnapThreshold(int threshold) {
impl.setSnapThreshold(threshold);
}
public HandlerRegistration addBeforeScrollStartHandler(BeforeScrollStartEvent.Handler handler) {
return impl.addBeforeScrollStartHandler(handler);
}
public HandlerRegistration addBeforeScrollMoveHandler(BeforeScrollMoveEvent.Handler handler) {
return impl.addBeforeScrollMoveHandler(handler);
}
public HandlerRegistration addBeforeScrollEndHandler(BeforeScrollEndEvent.Handler handler) {
return impl.addBeforeScrollEndHandler(handler);
}
public HandlerRegistration addScrollEndHandler(ScrollEndEvent.Handler handler) {
return impl.addScrollEndHandler(handler);
}
public HandlerRegistration addScrollStartHandler(ScrollStartEvent.Handler handler) {
return impl.addScrollStartHandler(handler);
}
public HandlerRegistration addScrollMoveHandler(ScrollMoveEvent.Handler handler) {
return impl.addScrollMoveHandler(handler);
}
public HandlerRegistration addScrollRefreshHandler(ScrollRefreshEvent.Handler handler) {
return impl.addScrollRefreshHandler(handler);
}
public HandlerRegistration addScrollTouchEndHandler(ScrollTouchEndEvent.Handler handler) {
return impl.addScrollTouchEndHandler(handler);
}
public HandlerRegistration addScrollAnimationStartHandler(
ScrollAnimationStartEvent.Handler handler) {
return impl.addScrollAnimationStartHandler(handler);
}
public HandlerRegistration addScrollAnimationMoveHandler(ScrollAnimationMoveEvent.Handler handler) {
return impl.addScrollAnimationMoveHandler(handler);
}
public HandlerRegistration addScrollAnimationEndHandler(ScrollAnimationEndEvent.Handler handler) {
return impl.addScrollAnimationEndHandler(handler);
}
public int getY() {
return impl.getY();
}
public int getX() {
return impl.getX();
}
public void setBounceFactor(double bounceFactor) {
impl.setBounceFactor(bounceFactor);
}
/**
* @deprecated use {@link #setShowVerticalScrollBar(boolean)}
*/
@Deprecated
public void setShowScrollBarX(boolean b) {
impl.setShowScrollBarX(b);
}
/**
* @deprecated use {@link #setShowHorizontalScrollBar(boolean)}
*/
@Deprecated
public void setShowScrollBarY(boolean b) {
impl.setShowScrollBarY(b);
}
public void setShowHorizontalScrollBar(boolean show) {
impl.setShowHorizontalScrollBar(show);
}
public void setShowVerticalScrollBar(boolean show) {
impl.setShowVerticalScrollBar(show);
}
public int getCurrentPageX() {
return impl.getCurrentPageX();
}
public int getCurrentPageY() {
return impl.getCurrentPageY();
}
public void setAutoHandleResize(boolean handle) {
impl.setAutoHandleResize(handle);
}
public void setOffSetMaxY(int height) {
impl.setOffSetMaxY(height);
}
public void setSnapSelector(String selector) {
impl.setSnapSelector(selector);
}
public LightArrayInt getPagesY() {
return impl.getPagesY();
}
public LightArrayInt getPagesX() {
return impl.getPagesX();
}
public void setHideScrollBar(boolean hideScrollBar) {
impl.setHideScrollBar(hideScrollBar);
}
public void setScrollLock(boolean lock) {
impl.setScrollLock(lock);
}
}