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
