From ecdccaf3519c513fcfd91f48ae5beb571f59f82b Mon Sep 17 00:00:00 2001 From: Vassilii Khachaturov Date: Sun, 19 Jan 2014 18:36:25 +0200 Subject: [PATCH] 7360: Calendar conversion broken in date editor 1) using a new field self.validated_date instead of self.date that collided with the switch_calendar callback 2) provide for the Date.set failure possibility in switch_calendar, and do no field conversion if it throws, just switch the calendar (thanks to Nick for finding) --- src/DateEdit.py | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/DateEdit.py b/src/DateEdit.py index de6b4c75c..c7aa2056c 100644 --- a/src/DateEdit.py +++ b/src/DateEdit.py @@ -276,7 +276,7 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): # want to have several open dialogs, since then the user will # loose track of which is which. Much like opening files. - self.return_date = None + self.validated_date = self.return_date = None for o in self.top.get_objects(): try: @@ -303,7 +303,7 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): if not self.revalidate(): continue self.return_date = Date() - self.return_date.copy(self.date) + self.return_date.copy(self.validated_date) self.close() break @@ -327,8 +327,9 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): value=the_value, text=the_text, newyear=the_newyear) - self.date.copy(d) - LOG.debug("return_date set to: {0}".format(d.dateval)) + # didn't throw yet? + self.validated_date = d + LOG.debug("validated_date set to: {0}".format(d.dateval)) self.ok_button.set_sensitive(1) return True except DateError as e: @@ -435,19 +436,24 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): old_cal = self.date.get_calendar() new_cal = self.calendar_box.get_active() + LOG.debug(">>>switch_calendar: {0} changed, {1} -> {2}".format( + obj, old_cal, new_cal)) (the_quality, the_modifier, the_calendar, the_value, the_text, the_newyear) = self.build_date_from_ui() - self.date.set( - quality=the_quality, - modifier=the_modifier, - calendar=old_cal, - value=the_value, - text=the_text, - newyear=the_newyear) - - if not self.date.is_empty(): - self.date.convert_calendar(new_cal) + try: + self.date.set( + quality=the_quality, + modifier=the_modifier, + calendar=old_cal, + value=the_value, + text=the_text, + newyear=the_newyear) + except DateError: + pass + else: + if not self.date.is_empty(): + self.date.convert_calendar(new_cal) self.start_month_box.get_model().clear() self.stop_month_box.get_model().clear() @@ -462,3 +468,5 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): self.stop_day.set_value(self.date.get_stop_day()) self.stop_month_box.set_active(self.date.get_stop_month()) self.stop_year.set_value(self.date.get_stop_year()) + LOG.debug("<< {2}".format( + obj, old_cal, new_cal))