Reviewers: ,


Please review this at http://codereview.tryton.org/532002/

Affected files:
  M tryton/common/date_widget.py


Index: tryton/common/date_widget.py
===================================================================

--- a/tryton/common/date_widget.py
+++ b/tryton/common/date_widget.py
@@ -13,7 +13,11 @@
 from dateutil.relativedelta import relativedelta

 from datetime_strftime import datetime_strftime
-from common import TRYTON_ICON
+#from common import TRYTON_ICON
+import os
+PIXMAPS_DIR = 'share/pixmaps/tryton'
+TRYTON_ICON = gtk.gdk.pixbuf_new_from_file(os.path.join(PIXMAPS_DIR,
+        'tryton-icon.png').encode('utf-8'))

 _ = gettext.gettext

@@ -75,10 +79,17 @@
     def set_format(self, format):
         self.format = format
         self.regex = self.initial_value = format
+        pos2pattern = []
         for key, val in MAPPING.items():
+            if key in format:
+                pos2pattern.append((key, format.find(key), len(val[0])))
             self.regex = self.regex.replace(key, val[1])
             self.initial_value = self.initial_value.replace(key, val[0])

+        self._pos2pattern = [None] * len(self.initial_value)
+        for key, start, length in pos2pattern:
+            self._pos2pattern[start:start + length] = [key] * length
+
         self.regex = re.compile(self.regex)

         assert self.regex.match(self.initial_value), \
@@ -116,7 +127,20 @@
                 text = text[:pos] + char + text[pos + 1:]
             pos += 1

-        if self.regex.match(text) and self.test_date(text):
+        if self.regex.match(text):
+            if not self.test_date(text):
+                error_in = self._pos2pattern[pos - 1]
+                to_replace = {
+                    '%d': ['%m'],
+                    '%m': ['%d'],
+                    '%y': ['%d', '%m'],
+                    '%Y': ['%d', '%m'],
+                    }[error_in]
+                for pattern in to_replace:
+                    start = self._pos2pattern.index(pattern)
+                    init_value = MAPPING[pattern][0]
+                    text = (text[:start] + init_value
+                        + text[start + len(init_value):])
             self.set_text(text)
             self.idle_set_position(pos)
         self.stop_emission('insert-text')



--
[email protected] mailing list

Reply via email to