]> source.dussan.org Git - vaadin-framework.git/commitdiff
Enabled paging (browsing calendar) w/o actually changing selected date.
authorMarc Englund <marc.englund@itmill.com>
Tue, 26 Feb 2008 07:57:06 +0000 (07:57 +0000)
committerMarc Englund <marc.englund@itmill.com>
Tue, 26 Feb 2008 07:57:06 +0000 (07:57 +0000)
svn changeset:3925/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/CalendarPanel.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IDateField.java

index ee5b6ef1b0f5744976d8859fae2e90dc86f42cf5..bcf897696e01810cbd810083d230f8daabd56533 100644 (file)
@@ -61,6 +61,7 @@ public class CalendarPanel extends FlexTable implements MouseListener,
         setStyleName(IDateField.CLASSNAME + "-calendarpanel");\r
         // buildCalendar(true);\r
         addTableListener(new DateClickListener(this));\r
+\r
     }\r
 \r
     private void buildCalendar(boolean forceRedraw) {\r
@@ -95,12 +96,6 @@ public class CalendarPanel extends FlexTable implements MouseListener,
     }\r
 \r
     private void buildCalendarHeader(boolean forceRedraw, boolean needsMonth) {\r
-        Date cdate = datefield.getCurrentDate();\r
-        // Can't draw a calendar without a date\r
-        if (cdate == null) {\r
-            cdate = new Date();\r
-        }\r
-\r
         if (forceRedraw) {\r
             if (prevMonth == null) { // Only do once\r
                 prevYear = new IEventButton();\r
@@ -165,26 +160,28 @@ public class CalendarPanel extends FlexTable implements MouseListener,
         }\r
 \r
         final String monthName = needsMonth ? datefield.getDateTimeService()\r
-                .getMonth(cdate.getMonth()) : "";\r
-        final int year = cdate.getYear() + 1900;\r
+                .getMonth(datefield.getShowingDate().getMonth()) : "";\r
+        final int year = datefield.getShowingDate().getYear() + 1900;\r
         setHTML(0, 2, "<span class=\"" + IDateField.CLASSNAME\r
                 + "-calendarpanel-month\">" + monthName + " " + year\r
                 + "</span>");\r
     }\r
 \r
     private void buildCalendarBody() {\r
-        Date date = datefield.getCurrentDate();\r
-        boolean selected = true; // date actually selected?\r
-        if (date == null) {\r
-            date = new Date();\r
-            selected = false;\r
-        }\r
+        // date actually selected?\r
+        Date currentDate = datefield.getCurrentDate();\r
+        Date showing = datefield.getShowingDate();\r
+        boolean selected = (currentDate != null\r
+                && currentDate.getMonth() == showing.getMonth() && currentDate\r
+                .getYear() == showing.getYear());\r
+\r
         final int startWeekDay = datefield.getDateTimeService()\r
-                .getStartWeekDay(date);\r
-        final int numDays = DateTimeService.getNumberOfDaysInMonth(date);\r
+                .getStartWeekDay(datefield.getShowingDate());\r
+        final int numDays = DateTimeService.getNumberOfDaysInMonth(datefield\r
+                .getShowingDate());\r
         int dayCount = 0;\r
         final Date today = new Date();\r
-        final Date curr = new Date(date.getTime());\r
+        final Date curr = new Date(datefield.getShowingDate().getTime());\r
         for (int row = 2; row < 8; row++) {\r
             for (int col = 0; col < 7; col++) {\r
                 if (!(row == 2 && col < startWeekDay)) {\r
@@ -211,12 +208,15 @@ public class CalendarPanel extends FlexTable implements MouseListener,
                         if (!isEnabledDate(curr)) {\r
                             cssClass += " " + baseclass + "-disabled";\r
                         }\r
-                        if (selected && date.getDate() == dayCount) {\r
+                        if (selected\r
+                                && datefield.getShowingDate().getDate() == dayCount) {\r
                             cssClass += " " + baseclass + "-selected";\r
                         }\r
                         if (today.getDate() == dayCount\r
-                                && today.getMonth() == date.getMonth()\r
-                                && today.getYear() == date.getYear()) {\r
+                                && today.getMonth() == datefield\r
+                                        .getShowingDate().getMonth()\r
+                                && today.getYear() == datefield\r
+                                        .getShowingDate().getYear()) {\r
                             cssClass += " " + baseclass + "-today";\r
                         }\r
                         if (title.length() > 0) {\r
@@ -276,34 +276,18 @@ public class CalendarPanel extends FlexTable implements MouseListener,
         if (!datefield.isEnabled() || datefield.isReadonly()) {\r
             return;\r
         }\r
-\r
+        Date showingDate = datefield.getShowingDate();\r
         if (sender == prevYear) {\r
-            datefield.getCurrentDate().setYear(\r
-                    datefield.getCurrentDate().getYear() - 1);\r
-            datefield.getClient().updateVariable(datefield.getId(), "year",\r
-                    datefield.getCurrentDate().getYear() + 1900,\r
-                    datefield.isImmediate());\r
+            showingDate.setYear(showingDate.getYear() - 1);\r
             updateCalendar();\r
         } else if (sender == nextYear) {\r
-            datefield.getCurrentDate().setYear(\r
-                    datefield.getCurrentDate().getYear() + 1);\r
-            datefield.getClient().updateVariable(datefield.getId(), "year",\r
-                    datefield.getCurrentDate().getYear() + 1900,\r
-                    datefield.isImmediate());\r
+            showingDate.setYear(showingDate.getYear() + 1);\r
             updateCalendar();\r
         } else if (sender == prevMonth) {\r
-            datefield.getCurrentDate().setMonth(\r
-                    datefield.getCurrentDate().getMonth() - 1);\r
-            datefield.getClient().updateVariable(datefield.getId(), "month",\r
-                    datefield.getCurrentDate().getMonth() + 1,\r
-                    datefield.isImmediate());\r
+            showingDate.setMonth(showingDate.getMonth() - 1);\r
             updateCalendar();\r
         } else if (sender == nextMonth) {\r
-            datefield.getCurrentDate().setMonth(\r
-                    datefield.getCurrentDate().getMonth() + 1);\r
-            datefield.getClient().updateVariable(datefield.getId(), "month",\r
-                    datefield.getCurrentDate().getMonth() + 1,\r
-                    datefield.isImmediate());\r
+            showingDate.setMonth(showingDate.getMonth() + 1);\r
             updateCalendar();\r
         }\r
     }\r
@@ -399,8 +383,10 @@ public class CalendarPanel extends FlexTable implements MouseListener,
 \r
             try {\r
                 final Integer day = new Integer(text);\r
-                final Date newDate = new Date(cal.datefield.getCurrentDate()\r
-                        .getTime());\r
+                if (cal.datefield.getCurrentDate() == null) {\r
+                    cal.datefield.setCurrentDate(new Date());\r
+                }\r
+                final Date newDate = cal.datefield.getShowingDate();\r
                 newDate.setDate(day.intValue());\r
                 if (!isEnabledDate(newDate)) {\r
                     return;\r
index 76408cbbd2925347b78d218bc3734199c2583ec8..8396f5bd5991015612fbc36db819d36e3cac3c8d 100644 (file)
@@ -40,6 +40,8 @@ public class IDateField extends FlowPanel implements Paintable {
     protected boolean enabled;\r
 \r
     protected Date date = null;\r
+    // e.g when paging a calendar, before actually selecting\r
+    protected Date showingDate = new Date();\r
 \r
     protected DateTimeService dts;\r
 \r
@@ -113,8 +115,10 @@ public class IDateField extends FlowPanel implements Paintable {
         if (year > -1) {\r
             date = new Date((long) getTime(year, month, day, hour, min, sec,\r
                     msec));\r
+            showingDate.setTime(date.getTime());\r
         } else {\r
             date = null;\r
+            showingDate = new Date();\r
         }\r
 \r
     }\r
@@ -175,6 +179,14 @@ public class IDateField extends FlowPanel implements Paintable {
         this.date = date;\r
     }\r
 \r
+    public Date getShowingDate() {\r
+        return showingDate;\r
+    }\r
+\r
+    public void setShowingDate(Date date) {\r
+        showingDate = date;\r
+    }\r
+\r
     public boolean isImmediate() {\r
         return immediate;\r
     }\r