]> source.dussan.org Git - vaadin-framework.git/commitdiff
VDateField classname updates:
authorJouni Koivuviita <jouni.koivuviita@itmill.com>
Wed, 13 May 2009 07:17:31 +0000 (07:17 +0000)
committerJouni Koivuviita <jouni.koivuviita@itmill.com>
Wed, 13 May 2009 07:17:31 +0000 (07:17 +0000)
* now includes a stylename for each resolution: v-datefield-year, v-datefield-month, v-datefield-day, v-datefield-full
* popup-calendar has its own stylename plus the above resolution stylenames

VCalendarPanel DOM refactored to allow more advanced theming. Won't break any old themes, but will break Testing Tools backwards compatibility.

svn changeset:7771/svn branch:6.0

src/com/vaadin/terminal/gwt/client/ui/VCalendarPanel.java
src/com/vaadin/terminal/gwt/client/ui/VDateField.java
src/com/vaadin/terminal/gwt/client/ui/VPopupCalendar.java
src/com/vaadin/terminal/gwt/client/ui/VTextualDate.java

index cb9ffd2c671d7c37fe16d045089aaa879be4f7f8..85c4124dd4a1beb823e2a4f83742d83d3c961ee6 100644 (file)
@@ -41,6 +41,8 @@ public class VCalendarPanel extends FlexTable implements MouseListener {
 \r
     private CalendarEntrySource entrySource;\r
 \r
+    private FlexTable days = new FlexTable();\r
+\r
     /* Needed to identify resolution changes */\r
     private int resolution = VDateField.RESOLUTION_YEAR;\r
 \r
@@ -51,14 +53,13 @@ public class VCalendarPanel extends FlexTable implements MouseListener {
         datefield = parent;\r
         setStyleName(VDateField.CLASSNAME + "-calendarpanel");\r
         // buildCalendar(true);\r
-        addTableListener(new DateClickListener(this));\r
+        days.addTableListener(new DateClickListener(this));\r
     }\r
 \r
     public VCalendarPanel(VDateField parent, Date min, Date max) {\r
         datefield = parent;\r
         setStyleName(VDateField.CLASSNAME + "-calendarpanel");\r
-        // buildCalendar(true);\r
-        addTableListener(new DateClickListener(this));\r
+        days.addTableListener(new DateClickListener(this));\r
 \r
     }\r
 \r
@@ -82,21 +83,34 @@ public class VCalendarPanel extends FlexTable implements MouseListener {
 \r
     private void clearCalendarBody(boolean remove) {\r
         if (!remove) {\r
-            for (int row = 2; row < 8; row++) {\r
+            for (int row = 1; row < 7; row++) {\r
                 for (int col = 0; col < 7; col++) {\r
-                    setHTML(row, col, "&nbsp;");\r
+                    days.setHTML(row, col, "&nbsp;");\r
                 }\r
             }\r
-        } else if (getRowCount() > 2) {\r
-            while (getRowCount() > 2) {\r
-                removeRow(2);\r
-            }\r
+        } else if (getRowCount() > 1) {\r
+            removeRow(1);\r
+            days.clear();\r
+\r
         }\r
     }\r
 \r
     private void buildCalendarHeader(boolean forceRedraw, boolean needsMonth) {\r
         if (forceRedraw) {\r
-            if (prevMonth == null) { // Only do once\r
+            if (prevMonth == null) {\r
+\r
+                getFlexCellFormatter().setStyleName(0, 0,\r
+                        VDateField.CLASSNAME + "-calendarpanel-prevyear");\r
+                getFlexCellFormatter().setStyleName(0, 4,\r
+                        VDateField.CLASSNAME + "-calendarpanel-nextyear");\r
+                getFlexCellFormatter().setStyleName(0, 3,\r
+                        VDateField.CLASSNAME + "-calendarpanel-nextmonth");\r
+                getFlexCellFormatter().setStyleName(0, 1,\r
+                        VDateField.CLASSNAME + "-calendarpanel-prevmonth");\r
+\r
+                getRowFormatter().addStyleName(0,\r
+                        VDateField.CLASSNAME + "-calendarpanel-header");\r
+\r
                 prevYear = new VEventButton();\r
                 prevYear.setHTML("&laquo;");\r
                 prevYear.setStyleName("v-button-prevyear");\r
@@ -120,10 +134,6 @@ public class VCalendarPanel extends FlexTable implements MouseListener {
                     setWidget(0, 3, nextMonth);\r
                     setWidget(0, 1, prevMonth);\r
                 }\r
-\r
-                getFlexCellFormatter().setColSpan(0, 2, 3);\r
-                getRowFormatter().addStyleName(0,\r
-                        VDateField.CLASSNAME + "-calendarpanel-header");\r
             } else if (!needsMonth) {\r
                 // Remove month traverse buttons\r
                 prevMonth.removeMouseListener(this);\r
@@ -133,34 +143,48 @@ public class VCalendarPanel extends FlexTable implements MouseListener {
                 prevMonth = null;\r
                 nextMonth = null;\r
             }\r
-\r
-            // Print weekday names\r
-            final int firstDay = datefield.getDateTimeService()\r
-                    .getFirstDayOfWeek();\r
-            for (int i = 0; i < 7; i++) {\r
-                int day = i + firstDay;\r
-                if (day > 6) {\r
-                    day = 0;\r
-                }\r
-                if (datefield.getCurrentResolution() > VDateField.RESOLUTION_MONTH) {\r
-                    setHTML(1, i, "<strong>"\r
-                            + datefield.getDateTimeService().getShortDay(day)\r
-                            + "</strong>");\r
-                } else {\r
-                    setHTML(1, i, "");\r
-                }\r
-            }\r
         }\r
 \r
         final String monthName = needsMonth ? datefield.getDateTimeService()\r
                 .getMonth(datefield.getShowingDate().getMonth()) : "";\r
         final int year = datefield.getShowingDate().getYear() + 1900;\r
+        getFlexCellFormatter().setStyleName(0, 2,\r
+                VDateField.CLASSNAME + "-calendarpanel-month");\r
         setHTML(0, 2, "<span class=\"" + VDateField.CLASSNAME\r
                 + "-calendarpanel-month\">" + monthName + " " + year\r
                 + "</span>");\r
     }\r
 \r
     private void buildCalendarBody() {\r
+\r
+        setWidget(1, 0, days);\r
+        setCellPadding(0);\r
+        setCellSpacing(0);\r
+        getFlexCellFormatter().setColSpan(1, 0, 5);\r
+        getFlexCellFormatter().setStyleName(1, 0,\r
+                VDateField.CLASSNAME + "-calendarpanel-body");\r
+\r
+        days.getFlexCellFormatter().setStyleName(0, 0, "v-first");\r
+        days.getFlexCellFormatter().setStyleName(0, 6, "v-last");\r
+        days.getRowFormatter().setStyleName(0,\r
+                VDateField.CLASSNAME + "-calendarpanel-weekdays");\r
+\r
+        // Print weekday names\r
+        final int firstDay = datefield.getDateTimeService().getFirstDayOfWeek();\r
+        for (int i = 0; i < 7; i++) {\r
+            int day = i + firstDay;\r
+            if (day > 6) {\r
+                day = 0;\r
+            }\r
+            if (datefield.getCurrentResolution() > VDateField.RESOLUTION_MONTH) {\r
+                days.setHTML(0, i, "<strong>"\r
+                        + datefield.getDateTimeService().getShortDay(day)\r
+                        + "</strong>");\r
+            } else {\r
+                days.setHTML(0, i, "");\r
+            }\r
+        }\r
+\r
         // date actually selected?\r
         Date currentDate = datefield.getCurrentDate();\r
         Date showing = datefield.getShowingDate();\r
@@ -175,9 +199,9 @@ public class VCalendarPanel extends FlexTable implements MouseListener {
         int dayCount = 0;\r
         final Date today = new Date();\r
         final Date curr = new Date(datefield.getShowingDate().getTime());\r
-        for (int row = 2; row < 8; row++) {\r
+        for (int row = 1; row < 7; row++) {\r
             for (int col = 0; col < 7; col++) {\r
-                if (!(row == 2 && col < startWeekDay)) {\r
+                if (!(row == 1 && col < startWeekDay)) {\r
                     if (dayCount < numDays) {\r
                         final int selectedDate = ++dayCount;\r
                         String title = "";\r
@@ -215,7 +239,7 @@ public class VCalendarPanel extends FlexTable implements MouseListener {
                         if (title.length() > 0) {\r
                             cssClass += " " + baseclass + "-entry";\r
                         }\r
-                        setHTML(row, col, "<span title=\"" + title\r
+                        days.setHTML(row, col, "<span title=\"" + title\r
                                 + "\" class=\"" + cssClass + "\">"\r
                                 + selectedDate + "</span>");\r
                     } else {\r
@@ -230,9 +254,10 @@ public class VCalendarPanel extends FlexTable implements MouseListener {
     private void buildTime(boolean forceRedraw) {\r
         if (time == null) {\r
             time = new VTime(datefield);\r
-            setText(8, 0, ""); // Add new row\r
-            getFlexCellFormatter().setColSpan(8, 0, 7);\r
-            setWidget(8, 0, time);\r
+            setWidget(2, 0, time);\r
+            getFlexCellFormatter().setColSpan(2, 0, 5);\r
+            getFlexCellFormatter().setStyleName(2, 0,\r
+                    VDateField.CLASSNAME + "-calendarpanel-time");\r
         }\r
         time.updateTime(forceRedraw);\r
     }\r
@@ -418,12 +443,12 @@ public class VCalendarPanel extends FlexTable implements MouseListener {
         }\r
 \r
         public void onCellClicked(SourcesTableEvents sender, int row, int col) {\r
-            if (sender != cal || row < 2 || row > 7\r
+            if (sender != cal.days || row < 1 || row > 6\r
                     || !cal.datefield.isEnabled() || cal.datefield.isReadonly()) {\r
                 return;\r
             }\r
 \r
-            final String text = cal.getText(row, col);\r
+            final String text = cal.days.getText(row, col);\r
             if (text.equals(" ")) {\r
                 return;\r
             }\r
index fd9e252fb7d8db6983bb85893fa59c195004b683..07fd9e33cbedc6bbda7dc7d6f35b4d4a8c9b37ec 100644 (file)
@@ -34,6 +34,19 @@ public class VDateField extends FlowPanel implements Paintable, Field {
     public static final int RESOLUTION_SEC = 5;\r
     public static final int RESOLUTION_MSEC = 6;\r
 \r
+    static String resolutionToString(int res) {\r
+        if (res > RESOLUTION_DAY) {\r
+            return "full";\r
+        }\r
+        if (res == RESOLUTION_DAY) {\r
+            return "day";\r
+        }\r
+        if (res == RESOLUTION_MONTH) {\r
+            return "month";\r
+        }\r
+        return "year";\r
+    }\r
+\r
     protected int currentResolution = RESOLUTION_YEAR;\r
 \r
     protected String currentLocale;\r
@@ -109,6 +122,10 @@ public class VDateField extends FlowPanel implements Paintable, Field {
 \r
         currentResolution = newResolution;\r
 \r
+        // Add stylename that indicates current resolution\r
+        setStyleName(CLASSNAME + " " + CLASSNAME + "-"\r
+                + resolutionToString(currentResolution));\r
+\r
         final int year = uidl.getIntVariable("year");\r
         final int month = (currentResolution >= RESOLUTION_MONTH) ? uidl\r
                 .getIntVariable("month") : -1;\r
index 31004be71d54a5eb8a0208840a97e5f461e2f367..983b1fb71e7bbc313f92da2dce101bce766e9dfa 100644 (file)
@@ -50,6 +50,10 @@ public class VPopupCalendar extends VTextualDate implements Paintable, Field,
     @Override\r
     public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {\r
         super.updateFromUIDL(uidl, client);\r
+        addStyleName(CLASSNAME + "-popupcalendar");\r
+        popup.setStyleName(VDateField.CLASSNAME + "-popup "\r
+                + VDateField.CLASSNAME + "-"\r
+                + resolutionToString(currentResolution));\r
         if (date != null) {\r
             calendar.updateCalendar();\r
         }\r
index 05128c943bb8d06b796b4cc79f200102d945eeba..e8e5fe255a9a959a1cc1652cc3f006f8a56a0822 100644 (file)
@@ -6,11 +6,15 @@ package com.vaadin.terminal.gwt.client.ui;
 \r
 import java.util.Date;\r
 \r
+import com.google.gwt.event.dom.client.BlurEvent;\r
+import com.google.gwt.event.dom.client.BlurHandler;\r
+import com.google.gwt.event.dom.client.ChangeEvent;\r
+import com.google.gwt.event.dom.client.ChangeHandler;\r
+import com.google.gwt.event.dom.client.FocusEvent;\r
+import com.google.gwt.event.dom.client.FocusHandler;\r
 import com.google.gwt.i18n.client.DateTimeFormat;\r
 import com.google.gwt.user.client.DOM;\r
-import com.google.gwt.user.client.ui.ChangeListener;\r
 import com.google.gwt.user.client.ui.TextBox;\r
-import com.google.gwt.user.client.ui.Widget;\r
 import com.vaadin.terminal.gwt.client.ApplicationConnection;\r
 import com.vaadin.terminal.gwt.client.BrowserInfo;\r
 import com.vaadin.terminal.gwt.client.ClientExceptionHandler;\r
@@ -22,7 +26,7 @@ import com.vaadin.terminal.gwt.client.Paintable;
 import com.vaadin.terminal.gwt.client.UIDL;\r
 \r
 public class VTextualDate extends VDateField implements Paintable, Field,\r
-        ChangeListener, ContainerResizedListener, Focusable {\r
+        ChangeHandler, ContainerResizedListener, Focusable {\r
 \r
     private static final String PARSE_ERROR_CLASSNAME = CLASSNAME\r
             + "-parseerror";\r
@@ -44,7 +48,19 @@ public class VTextualDate extends VDateField implements Paintable, Field,
         text.setStyleName(VTextField.CLASSNAME);\r
         // add datefield spesific style name also\r
         text.addStyleName(CLASSNAME + "-textfield");\r
-        text.addChangeListener(this);\r
+        text.addChangeHandler(this);\r
+        text.addFocusHandler(new FocusHandler() {\r
+            public void onFocus(FocusEvent event) {\r
+                text.addStyleName(VTextField.CLASSNAME + "-"\r
+                        + VTextField.CLASSNAME_FOCUS);\r
+            }\r
+        });\r
+        text.addBlurHandler(new BlurHandler() {\r
+            public void onBlur(BlurEvent event) {\r
+                text.removeStyleName(VTextField.CLASSNAME + "-"\r
+                        + VTextField.CLASSNAME_FOCUS);\r
+            }\r
+        });\r
         add(text);\r
     }\r
 \r
@@ -135,85 +151,81 @@ public class VTextualDate extends VDateField implements Paintable, Field,
 \r
     }\r
 \r
-    public void onChange(Widget sender) {\r
-        if (sender == text) {\r
-            if (!text.getText().equals("")) {\r
-                try {\r
-                    DateTimeFormat format = DateTimeFormat\r
-                            .getFormat(getFormatString());\r
-                    date = format.parse(text.getText());\r
-                    long stamp = date.getTime();\r
-                    if (stamp == 0) {\r
-                        // If date parsing fails in firefox the stamp will be 0\r
-                        date = null;\r
-                        addStyleName(PARSE_ERROR_CLASSNAME);\r
-                    } else {\r
-                        // remove possibly added invalid value indication\r
-                        removeStyleName(PARSE_ERROR_CLASSNAME);\r
-                    }\r
-                } catch (final Exception e) {\r
-                    ClientExceptionHandler.displayError(e.getMessage());\r
-\r
-                    addStyleName(PARSE_ERROR_CLASSNAME);\r
-                    // this is a hack that may eventually be removed\r
-                    client.updateVariable(id, "lastInvalidDateString", text\r
-                            .getText(), false);\r
+    public void onChange(ChangeEvent event) {\r
+        if (!text.getText().equals("")) {\r
+            try {\r
+                DateTimeFormat format = DateTimeFormat\r
+                        .getFormat(getFormatString());\r
+                date = format.parse(text.getText());\r
+                long stamp = date.getTime();\r
+                if (stamp == 0) {\r
+                    // If date parsing fails in firefox the stamp will be 0\r
                     date = null;\r
+                    addStyleName(PARSE_ERROR_CLASSNAME);\r
+                } else {\r
+                    // remove possibly added invalid value indication\r
+                    removeStyleName(PARSE_ERROR_CLASSNAME);\r
                 }\r
-            } else {\r
+            } catch (final Exception e) {\r
+                ClientExceptionHandler.displayError(e.getMessage());\r
+\r
+                addStyleName(PARSE_ERROR_CLASSNAME);\r
+                // this is a hack that may eventually be removed\r
+                client.updateVariable(id, "lastInvalidDateString", text\r
+                        .getText(), false);\r
                 date = null;\r
-                // remove possibly added invalid value indication\r
-                removeStyleName(PARSE_ERROR_CLASSNAME);\r
             }\r
-            // always send the date string\r
-            client.updateVariable(id, "dateString", text.getText(), false);\r
+        } else {\r
+            date = null;\r
+            // remove possibly added invalid value indication\r
+            removeStyleName(PARSE_ERROR_CLASSNAME);\r
+        }\r
+        // always send the date string\r
+        client.updateVariable(id, "dateString", text.getText(), false);\r
 \r
-            if (date != null) {\r
-                showingDate = new Date(date.getTime());\r
-            }\r
+        if (date != null) {\r
+            showingDate = new Date(date.getTime());\r
+        }\r
 \r
-            // Update variables\r
-            // (only the smallest defining resolution needs to be\r
-            // immediate)\r
-            client.updateVariable(id, "year",\r
-                    date != null ? date.getYear() + 1900 : -1,\r
-                    currentResolution == VDateField.RESOLUTION_YEAR\r
+        // Update variables\r
+        // (only the smallest defining resolution needs to be\r
+        // immediate)\r
+        client.updateVariable(id, "year", date != null ? date.getYear() + 1900\r
+                : -1, currentResolution == VDateField.RESOLUTION_YEAR\r
+                && immediate);\r
+        if (currentResolution >= VDateField.RESOLUTION_MONTH) {\r
+            client.updateVariable(id, "month",\r
+                    date != null ? date.getMonth() + 1 : -1,\r
+                    currentResolution == VDateField.RESOLUTION_MONTH\r
                             && immediate);\r
-            if (currentResolution >= VDateField.RESOLUTION_MONTH) {\r
-                client.updateVariable(id, "month", date != null ? date\r
-                        .getMonth() + 1 : -1,\r
-                        currentResolution == VDateField.RESOLUTION_MONTH\r
-                                && immediate);\r
-            }\r
-            if (currentResolution >= VDateField.RESOLUTION_DAY) {\r
-                client.updateVariable(id, "day", date != null ? date.getDate()\r
-                        : -1, currentResolution == VDateField.RESOLUTION_DAY\r
-                        && immediate);\r
-            }\r
-            if (currentResolution >= VDateField.RESOLUTION_HOUR) {\r
-                client.updateVariable(id, "hour", date != null ? date\r
-                        .getHours() : -1,\r
-                        currentResolution == VDateField.RESOLUTION_HOUR\r
-                                && immediate);\r
-            }\r
-            if (currentResolution >= VDateField.RESOLUTION_MIN) {\r
-                client.updateVariable(id, "min", date != null ? date\r
-                        .getMinutes() : -1,\r
-                        currentResolution == VDateField.RESOLUTION_MIN\r
-                                && immediate);\r
-            }\r
-            if (currentResolution >= VDateField.RESOLUTION_SEC) {\r
-                client.updateVariable(id, "sec", date != null ? date\r
-                        .getSeconds() : -1,\r
-                        currentResolution == VDateField.RESOLUTION_SEC\r
-                                && immediate);\r
-            }\r
-            if (currentResolution == VDateField.RESOLUTION_MSEC) {\r
-                client.updateVariable(id, "msec",\r
-                        date != null ? getMilliseconds() : -1, immediate);\r
-            }\r
-\r
         }\r
+        if (currentResolution >= VDateField.RESOLUTION_DAY) {\r
+            client\r
+                    .updateVariable(id, "day", date != null ? date.getDate()\r
+                            : -1,\r
+                            currentResolution == VDateField.RESOLUTION_DAY\r
+                                    && immediate);\r
+        }\r
+        if (currentResolution >= VDateField.RESOLUTION_HOUR) {\r
+            client.updateVariable(id, "hour", date != null ? date.getHours()\r
+                    : -1, currentResolution == VDateField.RESOLUTION_HOUR\r
+                    && immediate);\r
+        }\r
+        if (currentResolution >= VDateField.RESOLUTION_MIN) {\r
+            client.updateVariable(id, "min", date != null ? date.getMinutes()\r
+                    : -1, currentResolution == VDateField.RESOLUTION_MIN\r
+                    && immediate);\r
+        }\r
+        if (currentResolution >= VDateField.RESOLUTION_SEC) {\r
+            client.updateVariable(id, "sec", date != null ? date.getSeconds()\r
+                    : -1, currentResolution == VDateField.RESOLUTION_SEC\r
+                    && immediate);\r
+        }\r
+        if (currentResolution == VDateField.RESOLUTION_MSEC) {\r
+            client.updateVariable(id, "msec", date != null ? getMilliseconds()\r
+                    : -1, immediate);\r
+        }\r
+\r
     }\r
 \r
     private String cleanFormat(String format) {\r