From 9dc2b1ba53422da27d645af0a6ff71ef7b27da6d Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Wed, 9 Jan 2008 14:52:31 +0000 Subject: [PATCH] static id for floating calendars (#1260). Also showing popup with callback function to avoid flickering svn changeset:3433/svn branch:trunk --- .../gwt/client/ui/IPopupCalendar.java | 50 ++++++++++++------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IPopupCalendar.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IPopupCalendar.java index 8d1495190a..c90ea2a35c 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IPopupCalendar.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IPopupCalendar.java @@ -4,11 +4,13 @@ package com.itmill.toolkit.terminal.gwt.client.ui; +import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.PopupListener; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.user.client.ui.PopupPanel.PositionCallback; import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection; import com.itmill.toolkit.terminal.gwt.client.Paintable; import com.itmill.toolkit.terminal.gwt.client.UIDL; @@ -36,6 +38,10 @@ public class IPopupCalendar extends ITextualDate implements Paintable, popup.setStyleName(IDateField.CLASSNAME + "-popup"); popup.setWidget(calendar); popup.addPopupListener(this); + + DOM.setElementProperty(calendar.getElement(), "id", + "PID_TOOLKIT_POPUPCAL"); + } public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { @@ -49,26 +55,36 @@ public class IPopupCalendar extends ITextualDate implements Paintable, public void onClick(Widget sender) { if (sender == calendarToggle && !open) { calendar.updateCalendar(); - popup.show(); // clear previous values popup.setWidth(""); popup.setHeight(""); - final int w = calendar.getOffsetWidth(); - final int h = calendar.getOffsetHeight(); - int t = calendarToggle.getAbsoluteTop(); - int l = calendarToggle.getAbsoluteLeft(); - if (l + w > Window.getClientWidth() + Window.getScrollLeft()) { - l = Window.getClientWidth() + Window.getScrollLeft() - w; - } - if (t + h > Window.getClientHeight() + Window.getScrollTop()) { - t = Window.getClientHeight() + Window.getScrollTop() - h - - calendarToggle.getOffsetHeight() - 30; - l += calendarToggle.getOffsetWidth(); - } - popup.setPopupPosition(l, t + calendarToggle.getOffsetHeight() + 2); - popup.setWidth(w + "px"); - popup.setHeight(h + "px"); - open = true; + popup.setPopupPositionAndShow(new PositionCallback() { + public void setPosition(int offsetWidth, int offsetHeight) { + final int w = offsetWidth; + final int h = offsetHeight; + int t = calendarToggle.getAbsoluteTop(); + int l = calendarToggle.getAbsoluteLeft(); + if (l + w > Window.getClientWidth() + + Window.getScrollLeft()) { + l = Window.getClientWidth() + Window.getScrollLeft() + - w; + } + if (t + h > Window.getClientHeight() + + Window.getScrollTop()) { + t = Window.getClientHeight() + Window.getScrollTop() + - h - calendarToggle.getOffsetHeight() - 30; + l += calendarToggle.getOffsetWidth(); + } + popup.setPopupPosition(l, t + + calendarToggle.getOffsetHeight() + 2); + + // fix size + popup.setWidth(w + "px"); + popup.setHeight(h + "px"); + open = true; + + } + }); } else { open = false; } -- 2.39.5