private void showPopup() { if (position.equals("auto")) { int extra = 20; int left = getPopupPositionWidget().getAbsoluteLeft(); int top = getPopupPositionWidget().getAbsoluteTop() + getPopupPositionWidget().getOffsetHeight(); int browserWindowWidth = Window.getClientWidth() + Window.getScrollLeft(); int browserWindowHeight = Window.getClientHeight() + Window.getScrollTop(); if (left + popup.getOffsetWidth() > browserWindowWidth - extra) { left = getPopupPositionWidget().getAbsoluteLeft() - (popup.getOffsetWidth() - getPopupPositionWidget().getOffsetWidth()); } if (top + popup.getOffsetHeight() > browserWindowHeight - extra) { top = getPopupPositionWidget().getAbsoluteTop() - popup.getOffsetHeight() - 2; } left = left + xOffset; if (left < 0) { left = 0; } popup.setPopupPosition(left, top + yOffset); popup.setVisible(true); } else if (position.equals("fixed")) { int extra = 20; int left = getPopupPositionWidget().getAbsoluteLeft(); int top = getPopupPositionWidget().getAbsoluteTop() + getPopupPositionWidget().getOffsetHeight() - Window.getScrollTop(); int browserWindowWidth = Window.getClientWidth() + Window.getScrollLeft(); int clientHeight = Window.getClientHeight(); if (left + popup.getOffsetWidth() > browserWindowWidth - extra) { left = getPopupPositionWidget().getAbsoluteLeft() - (popup.getOffsetWidth() - getPopupPositionWidget().getOffsetWidth()); } if (top + popup.getOffsetHeight() > clientHeight - extra) { top = (getPopupPositionWidget().getAbsoluteTop() - Window.getScrollTop()) - popup.getOffsetHeight() - 2; } left = left + xOffset; if (left < 0) { left = 0; } popup.setPopupPosition(left, top + yOffset); popup.addStyleName("fixed"); popup.setShadowStyle("fixed"); popup.setVisible(true); } }
/** Called whenever an update is received from the server */ @Override public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { super.updateFromUIDL(uidl, client); if (client.updateComponent(this, uidl, false)) { hidePopup(); return; } addStyleName(CLASSNAME); position = uidl.getStringAttribute("position"); xOffset = uidl.getIntAttribute("xoffset"); yOffset = uidl.getIntAttribute("yoffset"); popupVisible = uidl.getBooleanVariable("popupVisible"); if (popupVisible) { if (uidl.hasAttribute("popupPositionPaintable")) { popupPositionPaintable = uidl.getPaintableAttribute("popupPositionPaintable", client); } else { popupPositionPaintable = null; } if (uidl.hasAttribute("style")) { final String[] styles = uidl.getStringAttribute("style").split(" "); final StringBuffer styleBuf = new StringBuffer(); final String primaryName = popup.getStylePrimaryName(); styleBuf.append(primaryName); styleBuf.append(" "); styleBuf.append(VPopupView.CLASSNAME + "-popup"); for (int i = 0; i < styles.length; i++) { styleBuf.append(" "); styleBuf.append(primaryName); styleBuf.append("-"); styleBuf.append(styles[i]); } popup.setStyleName(styleBuf.toString()); } else { popup.setStyleName(popup.getStylePrimaryName() + " " + VPopupView.CLASSNAME + "-popup"); } UIDL popupUIDL = uidl.getChildUIDL(0); popup.setVisible(false); popup.show(); popup.updateFromUIDL(popupUIDL); showPopup(); } else { hidePopup(); } }
private void hidePopup() { popup.setVisible(false); popup.hide(); }