commit-gnue
[Top][All Lists]
Advanced

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

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


From: johannes
Subject: [gnue] r9371 - trunk/gnue-forms/src/input/displayHandlers
Date: Mon, 12 Feb 2007 07:03:48 -0600 (CST)

Author: johannes
Date: 2007-02-12 07:03:48 -0600 (Mon, 12 Feb 2007)
New Revision: 9371

Modified:
   trunk/gnue-forms/src/input/displayHandlers/datehandler.py
Log:
Use more generic aproach to autocompletion for datetime fields as well


Modified: trunk/gnue-forms/src/input/displayHandlers/datehandler.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/datehandler.py   2007-02-09 
17:54:42 UTC (rev 9370)
+++ trunk/gnue-forms/src/input/displayHandlers/datehandler.py   2007-02-12 
13:03:48 UTC (rev 9371)
@@ -145,8 +145,54 @@
     def _get_ordering_(self):
         pass
 
+    # -------------------------------------------------------------------------
+    # Split a given text into the date components
+    # -------------------------------------------------------------------------
 
+    def _split_apart(self, text):
+        """
+        Split the given string into the components according to the order as
+        given by @L{self._order}.
 
+        @param text: the string to be split into it's components
+        @returns: dictionary with the components using the item of self._order
+            as keys and the splitted part as value
+        """
+
+        result = {}
+
+        if text.isdigit():
+            components = []
+            while text:
+                if len(text) > 2:
+                    components.append(text[:2])
+                    text = text[2:]
+                else:
+                    components.append(text)
+                    text = ''
+
+            for index, value in enumerate(components):
+                result[self._order[index]] = value
+        else:
+            for index in range(len(self._order)):
+                if index < len(self._inter):
+                    parts = text.split(self._inter[index], 1)
+                    if len(parts) == 2:
+                        cut = parts[0] + self._inter[index]
+                    else:
+                        cut = parts[0]
+                else:
+                    parts = [text]
+                    cut = text
+
+                result[self._order[index]] = parts[0]
+                text = text[len(cut):]
+                if not text:
+                    break
+
+        return result
+
+
 # =============================================================================
 # Display handler for date fields
 # =============================================================================
@@ -319,7 +365,7 @@
 
         today = datetime.date.today()
 
-        parts = self.__split_apart(new_text)
+        parts = self._split_apart(new_text)
         result = ''
         ncursor = None
         for index, item in enumerate(self._order):
@@ -352,46 +398,6 @@
         return result, new_cursor
 
 
-    # -------------------------------------------------------------------------
-    # Split a given text into the date components
-    # -------------------------------------------------------------------------
-
-    def __split_apart(self, text):
-
-        result = {}
-
-        if text.isdigit():
-            components = []
-            while text:
-                if len(text) > 2:
-                    components.append(text[:2])
-                    text = text[2:]
-                else:
-                    components.append(text)
-                    text = ''
-
-            for index, value in enumerate(components):
-                result[self._order[index]] = value
-        else:
-            for index in range(len(self._order)):
-                if index < len(self._inter):
-                    parts = text.split(self._inter[index], 1)
-                    if len(parts) == 2:
-                        cut = parts[0] + self._inter[index]
-                    else:
-                        cut = parts[0]
-                else:
-                    parts = [text]
-                    cut = text
-
-                result[self._order[index]] = parts[0]
-                text = text[len(cut):]
-                if not text:
-                    break
-
-        return result
-
-
 # =============================================================================
 # Display handler for time fields
 # =============================================================================
@@ -780,41 +786,37 @@
         if self._order[0] == 'year':
             return new_text, new_cursor
 
-        today = datetime.date.today().strftime(str(self._input_mask))
+        today = datetime.datetime.today().replace(hour=0, minute=0, second=0,
+                microsecond=0)
 
-        # If the text is a number it must be the first component
-        if new_text.isdigit():
-            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
+        parts = self._split_apart(new_text)
+        result = ''
+        ncursor = None
+        for index, item in enumerate(self._order):
+            if item in parts:
+                value = parts[item]
+                if item in ['day', 'month'] and len(value) > 2:
+                    parts[item] = value[:2]
+                    parts[self._order[index+1]] = value[2:]
 
-            elif self._order[0] != 'month':
-                new_text = new_text + today[today.index(self._inter[0]):]
+                if not value.isdigit():
+                    return new_text, new_cursor
 
-            return new_text, new_cursor
+                if (index > 0):
+                    result += self._inter[index-1]
 
-        else:
-            parts = new_text.split(self._inter[0], 1)
-            if len(parts) <> 2:
-                return new_text, new_cursor
+                result += parts[item]
+            else:
+                if ncursor is None:
+                    ncursor = len(result)
+                    if new_text.endswith(self._inter[index-1]):
+                        ncursor += len(self._inter[index-1])
 
-            lead = parts[0] + self._inter[0]
-            rest = parts[1]
-            # If we have nothing after the first intersection symbol, we have
-            # to complete the rest
-            if not rest:
-                if self._order[0] <> 'month':
-                    new_text = parts[0] + today[today.index(self._inter[0]):]
-                return new_text, new_cursor
+                result += self._inter[index-1]
 
-            parts = rest.split(self._inter[1], 1)
-            # If we have the first and the second component, stick it together
-            if len(parts) == 1:
-                lead += parts[0]
-                new_cursor = len(lead)
-                new_text = lead + today[today.rindex(self._inter[1]):]
+                result += "%s" % getattr(today, item)
 
-                return new_text, new_cursor
+        if ncursor is not None:
+            new_cursor = ncursor
 
-        return new_text, new_cursor
+        return result, new_cursor





reply via email to

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