package com.iambookmaster.client.common; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.WindowResizeListener; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.Widget; public class ScrollContainer extends AbsolutePanel implements WindowResizeListener { private ResizeTimer timer; private ScrollPanel scrollPanel; public ScrollContainer() { super.setHeight("100%"); super.setWidth("100%"); // HTML html = new HTML(" "); // html.setSize("100%", "100%"); // super.add(html, 0, 0); //static, // DOM.setStyleAttribute(html.getElement(), "position", "relative"); // html.getElement().getStyle().setProperty(name, value) scrollPanel = new ScrollPanel(); scrollPanel.setWidth("100%"); scrollPanel.setAlwaysShowScrollBars(true); super.add(scrollPanel, 0, 0); DOM.setStyleAttribute(getElement(), "overflow", "hidden"); resetHeight(); } public void setScrollWidget(Widget widget) { scrollPanel.setWidget(widget); DOM.setStyleAttribute(widget.getElement(), "overflow", "visible"); } public void onWindowResized(int width, int height) { resetHeight(); } public void onAttach() { super.onAttach(); WindowResizeCacheListener.addResizeListener(this); resetHeight(); } protected void onDetach() { super.onDetach(); if (timer != null) { timer.cancel(); } WindowResizeCacheListener.removeResizeListener(this); } public void resetHeight() { if (timer ==null) { timer = new ResizeTimer(200); } } private class ResizeTimer extends Timer { public ResizeTimer(int rep) { scheduleRepeating(rep); } public void run() { if (ScrollContainer.this.isAttached()==false) { return; } int h = getOffsetHeight(); int w = getOffsetWidth(); if (h>0 && w>0) { timer = null; this.cancel(); scrollPanel.setHeight(String.valueOf(h)+"px"); scrollPanel.setWidth(String.valueOf(w)+"px"); } } } public void setAlwaysShowScrollBars(boolean alwaysShow) { scrollPanel.setAlwaysShowScrollBars(alwaysShow); } public void ensureVisible(UIObject item) { scrollPanel.ensureVisible(item); } }