1 16 package com.google.gwt.user.client.ui; 17 18 import com.google.gwt.user.client.DOM; 19 import com.google.gwt.user.client.Element; 20 21 37 public class AbsolutePanel extends ComplexPanel { 38 39 44 private static void changeToStaticPositioning(Element elem) { 45 DOM.setStyleAttribute(elem, "left", ""); 46 DOM.setStyleAttribute(elem, "top", ""); 47 DOM.setStyleAttribute(elem, "position", "static"); 48 } 49 50 53 public AbsolutePanel() { 54 setElement(DOM.createDiv()); 55 56 DOM.setStyleAttribute(getElement(), "position", "relative"); 59 DOM.setStyleAttribute(getElement(), "overflow", "hidden"); 60 } 61 62 67 public void add(Widget w) { 68 super.add(w, getElement()); 69 } 70 71 80 public void add(Widget w, int left, int top) { 81 w.removeFromParent(); 86 setWidgetPositionImpl(w, left, top); 87 add(w); 88 } 89 90 97 public int getWidgetLeft(Widget w) { 98 checkWidgetParent(w); 99 return DOM.getAbsoluteLeft(w.getElement()) - DOM.getAbsoluteLeft(getElement()); 100 } 101 102 109 public int getWidgetTop(Widget w) { 110 checkWidgetParent(w); 111 return DOM.getAbsoluteTop(w.getElement()) - DOM.getAbsoluteTop(getElement()); 112 } 113 114 123 public void setWidgetPosition(Widget w, int left, int top) { 124 checkWidgetParent(w); 125 setWidgetPositionImpl(w, left, top); 126 } 127 128 136 protected void disown(Widget w) { 137 super.disown(w); 138 changeToStaticPositioning(w.getElement()); 139 } 140 141 private void checkWidgetParent(Widget w) { 142 if (w.getParent() != this) { 143 throw new IllegalArgumentException ( 144 "Widget must be a child of this panel."); 145 } 146 } 147 148 private void setWidgetPositionImpl(Widget w, int left, int top) { 149 Element h = w.getElement(); 150 if ((left == -1) && (top == -1)) { 151 changeToStaticPositioning(h); 152 } else { 153 DOM.setStyleAttribute(h, "position", "absolute"); 154 DOM.setStyleAttribute(h, "left", left + "px"); 155 DOM.setStyleAttribute(h, "top", top + "px"); 156 } 157 } 158 } 159 | Popular Tags |