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.

PopupDateFieldConnector.java 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /*
  2. @VaadinApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.terminal.gwt.client.ui;
  5. import java.util.Date;
  6. import com.google.gwt.core.client.GWT;
  7. import com.google.gwt.user.client.ui.Widget;
  8. import com.vaadin.terminal.gwt.client.ApplicationConnection;
  9. import com.vaadin.terminal.gwt.client.DateTimeService;
  10. import com.vaadin.terminal.gwt.client.UIDL;
  11. import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.FocusChangeListener;
  12. import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.TimeChangeListener;
  13. public class PopupDateFieldConnector extends TextualDateConnector {
  14. /*
  15. * (non-Javadoc)
  16. *
  17. * @see
  18. * com.vaadin.terminal.gwt.client.ui.VTextualDate#updateFromUIDL(com.vaadin
  19. * .terminal.gwt.client.UIDL,
  20. * com.vaadin.terminal.gwt.client.ApplicationConnection)
  21. */
  22. @Override
  23. @SuppressWarnings("deprecation")
  24. public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
  25. boolean lastReadOnlyState = getWidget().readonly;
  26. boolean lastEnabledState = getWidget().isEnabled();
  27. getWidget().parsable = uidl.getBooleanAttribute("parsable");
  28. super.updateFromUIDL(uidl, client);
  29. String popupStyleNames = getStyleNameFromUIDL(
  30. VPopupCalendar.POPUP_PRIMARY_STYLE_NAME, uidl, getState(),
  31. false);
  32. popupStyleNames += " "
  33. + VDateField.CLASSNAME
  34. + "-"
  35. + VPopupCalendar
  36. .resolutionToString(getWidget().currentResolution);
  37. getWidget().popup.setStyleName(popupStyleNames);
  38. getWidget().calendar.setDateTimeService(getWidget()
  39. .getDateTimeService());
  40. getWidget().calendar.setShowISOWeekNumbers(getWidget()
  41. .isShowISOWeekNumbers());
  42. if (getWidget().calendar.getResolution() != getWidget().currentResolution) {
  43. getWidget().calendar.setResolution(getWidget().currentResolution);
  44. if (getWidget().calendar.getDate() != null) {
  45. getWidget().calendar.setDate((Date) getWidget()
  46. .getCurrentDate().clone());
  47. // force re-render when changing resolution only
  48. getWidget().calendar.renderCalendar();
  49. }
  50. }
  51. getWidget().calendarToggle.setEnabled(getWidget().enabled);
  52. if (getWidget().currentResolution <= VPopupCalendar.RESOLUTION_MONTH) {
  53. getWidget().calendar
  54. .setFocusChangeListener(new FocusChangeListener() {
  55. public void focusChanged(Date date) {
  56. getWidget().updateValue(date);
  57. getWidget().buildDate();
  58. Date date2 = getWidget().calendar.getDate();
  59. date2.setYear(date.getYear());
  60. date2.setMonth(date.getMonth());
  61. }
  62. });
  63. } else {
  64. getWidget().calendar.setFocusChangeListener(null);
  65. }
  66. if (getWidget().currentResolution > VPopupCalendar.RESOLUTION_DAY) {
  67. getWidget().calendar
  68. .setTimeChangeListener(new TimeChangeListener() {
  69. public void changed(int hour, int min, int sec, int msec) {
  70. Date d = getWidget().getDate();
  71. if (d == null) {
  72. // date currently null, use the value from
  73. // calendarPanel
  74. // (~ client time at the init of the widget)
  75. d = (Date) getWidget().calendar.getDate()
  76. .clone();
  77. }
  78. d.setHours(hour);
  79. d.setMinutes(min);
  80. d.setSeconds(sec);
  81. DateTimeService.setMilliseconds(d, msec);
  82. // Always update time changes to the server
  83. getWidget().updateValue(d);
  84. // Update text field
  85. getWidget().buildDate();
  86. }
  87. });
  88. }
  89. if (getWidget().readonly) {
  90. getWidget().calendarToggle.addStyleName(VPopupCalendar.CLASSNAME
  91. + "-button-readonly");
  92. } else {
  93. getWidget().calendarToggle.removeStyleName(VPopupCalendar.CLASSNAME
  94. + "-button-readonly");
  95. }
  96. getWidget().calendarToggle.setEnabled(true);
  97. }
  98. @Override
  99. protected Widget createWidget() {
  100. return GWT.create(VPopupCalendar.class);
  101. }
  102. @Override
  103. public VPopupCalendar getWidget() {
  104. return (VPopupCalendar) super.getWidget();
  105. }
  106. }