commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue] r9341 - trunk/gnue-forms/src/input/displayHandlers


From: johannes
Subject: [gnue] r9341 - trunk/gnue-forms/src/input/displayHandlers
Date: Tue, 30 Jan 2007 09:02:17 -0600 (CST)

Author: johannes
Date: 2007-01-30 09:02:16 -0600 (Tue, 30 Jan 2007)
New Revision: 9341

Modified:
   trunk/gnue-forms/src/input/displayHandlers/datehandler.py
Log:
Better algorithm for guessing the century.  Improved autocompletion.


Modified: trunk/gnue-forms/src/input/displayHandlers/datehandler.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/datehandler.py   2007-01-27 
00:36:40 UTC (rev 9340)
+++ trunk/gnue-forms/src/input/displayHandlers/datehandler.py   2007-01-30 
15:02:16 UTC (rev 9341)
@@ -19,7 +19,7 @@
 # write to the Free Software Foundation, Inc., 59 Temple Place
 # - Suite 330, Boston, MA 02111-1307, USA.
 #
-# $Id: $
+# $Id$
 """
 DisplayHandler classes for input validation of date, time and datetime values
 """
@@ -47,7 +47,37 @@
 # =============================================================================
 
 class DateRelated(BaseCursor):
+    """
+    Base class for all date- and time-related displayhandler
+    """
 
+    # -------------------------------------------------------------------------
+    # Create a display string for the current value
+    # -------------------------------------------------------------------------
+
+    def build_display(self, value, editing):
+        """
+        """
+
+        if editing:
+            mask = self._input_mask
+        else:
+            mask = self._display_mask
+
+        if value in (None, ""):
+            return ""
+
+        try:
+            return value.strftime(str(mask))
+
+        except AttributeError:
+            return str(value)
+
+
+    # -------------------------------------------------------------------------
+    # Get the order of the date's components (as defined by the given mask)
+    # -------------------------------------------------------------------------
+
     def get_date_order(self, format):
 
         sample = datetime.date(1978, 3, 21)
@@ -85,8 +115,9 @@
 
 
 
-class Time(BaseCursor):
-    pass
+# =============================================================================
+# Display handler for date fields
+# =============================================================================
 
 class Date(DateRelated):
 
@@ -100,36 +131,13 @@
         DateRelated.__init__(self, entry, eventHandler, subEventHandler,
                 display_mask, input_mask)
 
-        self.__input_mask = input_mask or '%x'
-        self.__display_mask = display_mask or '%x'
+        self._input_mask = input_mask or gConfigForms('DateEditMask') or '%x'
+        self._display_mask = display_mask or gConfigForms('DateMask') or '%x'
 
-        self.__order, self.__inter = self.get_date_order(self.__input_mask)
+        self.__order, self.__inter = self.get_date_order(self._input_mask)
 
 
     # -------------------------------------------------------------------------
-    # Create a display string for the current value
-    # -------------------------------------------------------------------------
-
-    def build_display(self, value, editing):
-        """
-        """
-
-        if editing:
-            mask = self.__input_mask
-        else:
-            mask = self.__display_mask
-
-        if value in (None, ""):
-            return ""
-
-        try:
-            return value.strftime(str(mask))
-
-        except AttributeError:
-            return str(value)
-
-
-    # -------------------------------------------------------------------------
     # Try to figure out which date the user meant
     # -------------------------------------------------------------------------
 
@@ -142,7 +150,7 @@
 
         try:
             # First have a look wether the input follows the requested format 
-            temp = time.strptime(display, self.__input_mask)
+            temp = time.strptime(display, self._input_mask)
             return datetime.date(*temp[0:3])
 
         except ValueError:
@@ -195,14 +203,18 @@
             kw = {}
             for index, item in enumerate(values):
                 value = int(item)
-                if index == 2 and value < 100:
-                    # FIXME: need a better algorithm here
-                    if value > 50:
+                part = self.__order[index].lower()
+
+                # If the year is given without a century we will figure out
+                # which one to use.
+                if part == 'year' and value < 100:
+                    if value % 100 >= 50:
                         value += 1900
                     else:
                         value += 2000
-                kw[self.__order[index].lower()] = value
 
+                kw[part] = value
+
             try:
                 return datetime.date(**kw)
 
@@ -243,12 +255,18 @@
         if self.__order[0].lower() == 'year':
             return new_text, new_cursor
 
-        today = datetime.date.today().strftime(str(self.__input_mask))
+        today = datetime.date.today().strftime(str(self._input_mask))
 
         # If the text is a number it must be the first component
         if new_text.isdigit():
-            if self.__order[0] != 'month':
+            if len(new_text) > 2:
+                new_text = new_text[:2] + self.__inter[0] + new_text[2:]
+                new_cursor += 1
+                new_text += self.__inter[1] + "%s" % datetime.date.today().year
+
+            elif self.__order[0] != 'month':
                 new_text = new_text + today[today.index(self.__inter[0]):]
+
             return new_text, new_cursor
 
         else:
@@ -277,6 +295,15 @@
         return new_text, new_cursor
 
 
+
+# =============================================================================
+# Display handler for time fields
+# =============================================================================
+
+class Time(BaseCursor):
+    pass
+
+
 class DateTime(BaseCursor):
     """
     Class to handle the display and entry of date based fields.
@@ -285,19 +312,19 @@
                  inputMask):
         BaseCursor.__init__(self, entry, eventHandler, subEventHandler,
                 displayMask, inputMask)
-        self.__displayMask = displayMask
-        self.__inputMask = inputMask
+        self._displayMask = displayMask
+        self._inputMask = inputMask
 
 
     def build_display(self, value, editing):
         if editing:
-            if self.__inputMask:
-                format = self.__inputMask
+            if self._inputMask:
+                format = self._inputMask
             else:
                 format = "%m/%d/%Y"
         else:
-            if self.__displayMask:
-                format = self.__displayMask
+            if self._displayMask:
+                format = self._displayMask
             else:
                 format = "%m/%d/%y"
 
@@ -314,9 +341,9 @@
             return None
 
         # TODO: Replace with format mask
-        if self.__inputMask:
+        if self._inputMask:
             try:
-                tempVal = time.strptime (display, self.__inputMask)
+                tempVal = time.strptime (display, self._inputMask)
                 return datetime.datetime(*tempVal[0:6])
             except ValueError:
                 raise InvalidDateLiteral, display


Property changes on: trunk/gnue-forms/src/input/displayHandlers/datehandler.py
___________________________________________________________________
Name: svn:keywords
   + Id





reply via email to

[Prev in Thread] Current Thread [Next in Thread]