You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

IPopupCalendar.java 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package com.itmill.toolkit.terminal.gwt.client.ui;
  2. import com.google.gwt.user.client.Window;
  3. import com.google.gwt.user.client.ui.ClickListener;
  4. import com.google.gwt.user.client.ui.PopupListener;
  5. import com.google.gwt.user.client.ui.PopupPanel;
  6. import com.google.gwt.user.client.ui.Widget;
  7. import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
  8. import com.itmill.toolkit.terminal.gwt.client.Paintable;
  9. import com.itmill.toolkit.terminal.gwt.client.UIDL;
  10. public class IPopupCalendar extends ITextualDate implements Paintable,
  11. ClickListener, PopupListener {
  12. private IButton calendarToggle;
  13. private CalendarPanel calendar;
  14. private PopupPanel popup;
  15. public IPopupCalendar() {
  16. super();
  17. calendarToggle = new IButton();
  18. calendarToggle.setText("...");
  19. calendarToggle.addClickListener(this);
  20. add(calendarToggle);
  21. calendar = new CalendarPanel(this);
  22. popup = new PopupPanel(true);
  23. popup.setStyleName(IDateField.CLASSNAME + "-calendar");
  24. popup.setWidget(calendar);
  25. popup.addPopupListener(this);
  26. }
  27. public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
  28. super.updateFromUIDL(uidl, client);
  29. if (date != null)
  30. calendar.updateCalendar();
  31. calendarToggle.setEnabled(enabled);
  32. }
  33. public void onClick(Widget sender) {
  34. if (sender == calendarToggle) {
  35. calendar.updateCalendar();
  36. popup.show();
  37. int w = calendar.getOffsetWidth();
  38. int h = calendar.getOffsetHeight();
  39. int t = calendarToggle.getAbsoluteTop();
  40. int l = calendarToggle.getAbsoluteLeft();
  41. if (l + w > Window.getClientWidth())
  42. l = Window.getClientWidth() - w;
  43. if (t + h > Window.getClientHeight())
  44. t = Window.getClientHeight() - h
  45. - calendarToggle.getOffsetHeight() - 2;
  46. popup.setPopupPosition(l, t + calendarToggle.getOffsetHeight() + 2);
  47. popup.setWidth(w + "px");
  48. popup.setHeight(h + "px");
  49. }
  50. }
  51. public void onPopupClosed(PopupPanel sender, boolean autoClosed) {
  52. if (sender == popup)
  53. buildDate();
  54. }
  55. }