diff --git a/ChangeLog b/ChangeLog index 638b40a81..803e17e8a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-01-12 Don Allingham + * src/DateDisplay.py: Make DateDisplayEn inherit from DateDisplay, make + DateDisplay handle only ISO dates + * src/DateHandler.py: use DateDisplayEn for English languages, use + DateDisplay for CJK + * src/GrampsCfg.py: Don't do initial redisplay of Person List when + dialog comes up, update dates dynamically when date format changes + 2005-01-12 Martin Hawlisch * src/DisplayModels.py: Add Date and Place columns to Media model; Zip to Place model. diff --git a/src/DateDisplay.py b/src/DateDisplay.py index af90dc96e..93d8a9e3c 100644 --- a/src/DateDisplay.py +++ b/src/DateDisplay.py @@ -31,24 +31,8 @@ __version__ = "$Revision$" import Date import locale + class DateDisplay: - """ - U.S English date display class. - """ - - formats = ( - "YYYY-MM-DD (ISO)", "Numerical", "Month Day, Year", - "MON DAY, YEAR", "Day Month Year", "DAY MON YEAR" - ) - - calendar = ( - ""," (Julian)"," (Hebrew)"," (French Republican)", - " (Persian)"," (Islamic)" - ) - - _mod_str = ("","before ","after ","about ","","","") - - _qual_str = ("","estimated ","calculated ") # determine the code set returned by nl_langinfo _codeset = locale.nl_langinfo(locale.CODESET) @@ -117,6 +101,104 @@ class DateDisplay: "Ramadan", "Shawwal", "Dhu l-Qa`da", "Dhu l-Hijja" ) + formats = ("YYYY-MM-DD (ISO)",) + + calendar = ( + ""," (Julian)"," (Hebrew)"," (French Republican)", + " (Persian)"," (Islamic)" + ) + + _mod_str = ("","before ","after ","about ","","","") + + _qual_str = ("","estimated ","calculated ") + + def __init__(self,format=None): + pass + + def set_format(self,format): + pass + + def verify_format(self,format): + pass + + def quote_display(self,date): + """ + Similar to the display task, except that if the value is a text only + value, it is enclosed in quotes. + """ + if date.get_modifier() == Date.MOD_TEXTONLY: + return '"%s"' % self.display(date) + else: + return self.display(date) + + def display(self,date): + """ + Returns a text string representing the date. + """ + mod = date.get_modifier() + cal = date.get_calendar() + qual = date.get_quality() + start = date.get_start_date() + + qual_str = self._qual_str[qual] + + if mod == Date.MOD_TEXTONLY: + return date.get_text() + elif start == Date.EMPTY: + return "" + elif mod == Date.MOD_SPAN or mod == Date.MOD_RANGE: + d1 = self.display_iso(start) + d2 = self.display_iso(date.get_stop_date()) + return "%s %s - %s%s" % (qual_str,d1,d2,self.calendar[cal]) + elif mod == Date.MOD_RANGE: + d1 = self.display_iso(start) + d2 = self.display_cal[cal](date.get_stop_date()) + return "%s %s - %s%s" % (qual_str,d1,d2,self.calendar[cal]) + else: + text = self.display_iso(start) + return "%s%s%s%s" % (qual_str,self._mod_str[mod],text,self.calendar[cal]) + + def _slash_year(self,val,slash): + bc = "" + if val < 0: + val = - val + bc = " B.C.E" + + if slash: + return "%d/%d%s" % (val,(val%10)+1,bc) + else: + return "%d%s" % (val,bc) + + def display_iso(self,date_val): + # YYYY-MM-DD (ISO) + year = self._slash_year(date_val[2],date_val[3]) + if date_val[0] == 0: + if date_val[1] == 0: + value = year + else: + value = "%s-%02d" % (year,date_val[1]) + else: + value = "%s-%02d-%02d" % (year,date_val[1],date_val[0]) + return value + + def text_display(self,date): + """ + Similar to the display task, except that if the value is a text only + value, it is enclosed in quotes. + """ + return date.get_text() + + +class DateDisplayEn(DateDisplay): + """ + English language date display class. + """ + + formats = ( + "YYYY-MM-DD (ISO)", "Numerical", "Month Day, Year", + "MON DAY, YEAR", "Day Month Year", "DAY MON YEAR" + ) + def __init__(self,format=None): """ Creates a DateDisplay class that converts a Date object to a string @@ -142,30 +224,6 @@ class DateDisplay: def set_format(self,format): self.format = format - def verify_format(self,format): - """ - Verifies that the format value is within the correct range. - """ - pass - #assert(format < len(self.formats)-1) - - def quote_display(self,date): - """ - Similar to the display task, except that if the value is a text only - value, it is enclosed in quotes. - """ - if date.get_modifier() == Date.MOD_TEXTONLY: - return '"%s"' % self.display(date) - else: - return self.display(date) - - def text_display(self,date): - """ - Similar to the display task, except that if the value is a text only - value, it is enclosed in quotes. - """ - return date.get_text() - def display(self,date): """ Returns a text string representing the date. @@ -193,28 +251,10 @@ class DateDisplay: text = self.display_cal[date.get_calendar()](start) return "%s%s%s%s" % (qual_str,self._mod_str[mod],text,self.calendar[cal]) - def _slash_year(self,val,slash): - bc = "" - if val < 0: - val = - val - bc = " B.C.E" - - if slash: - return "%d/%d%s" % (val,(val%10)+1,bc) - else: - return "%d%s" % (val,bc) - def _display_gregorian(self,date_val): year = self._slash_year(date_val[2],date_val[3]) if self.format == 0: - # YYYY-MM-DD (ISO) - if date_val[0] == 0: - if date_val[1] == 0: - value = year - else: - value = "%s-%02d" % (year,date_val[1]) - else: - value = "%s-%02d-%02d" % (year,date_val[1],date_val[0]) + value = self.display_iso(date_val) elif self.format == 1: if date_val[0] == 0 and date_val[1] == 0: value = str(date_val[2]) @@ -267,14 +307,7 @@ class DateDisplay: def _display_calendar(self,date_val,month_list): year = date_val[2] if self.format == 0 or self.format == 1: - # YYYY-MM-DD (ISO) - if date_val[0] == 0: - if date_val[1] == 0: - return year - else: - return "%d-%d" % (year,date_val[1]) - else: - return "%d-%d-%d" % (year,date_val[1],date_val[0]) + return self.display_iso(date_val) else: if date_val[0] == 0: if date_val[1] == 0: diff --git a/src/DateHandler.py b/src/DateHandler.py index 7a36843bd..4cfe0ce06 100644 --- a/src/DateHandler.py +++ b/src/DateHandler.py @@ -58,13 +58,19 @@ _lang_to_parser = { } _lang_to_display = { - 'C' : DateDisplay.DateDisplay, - 'en_US' : DateDisplay.DateDisplay, - 'en_GB' : DateDisplay.DateDisplay, - 'en_AU' : DateDisplay.DateDisplay, - 'en_CA' : DateDisplay.DateDisplay, - 'en_SE' : DateDisplay.DateDisplay, - 'en' : DateDisplay.DateDisplay, + 'C' : DateDisplay.DateDisplayEn, + 'en_US' : DateDisplay.DateDisplayEn, + 'en_GB' : DateDisplay.DateDisplayEn, + 'en_AU' : DateDisplay.DateDisplayEn, + 'en_CA' : DateDisplay.DateDisplayEn, + 'en_SE' : DateDisplay.DateDisplayEn, + 'en' : DateDisplay.DateDisplayEn, + 'zh_CN' : DateDisplay.DateDisplay, + 'zh_TW' : DateDisplay.DateDisplay, + 'zh_SG' : DateDisplay.DateDisplay, + 'zh_HK' : DateDisplay.DateDisplay, + 'ja_JP' : DateDisplay.DateDisplay, + 'ko_KR' : DateDisplay.DateDisplay, } def get_date_formats(): @@ -78,7 +84,7 @@ def get_date_formats(): def set_format(value): try: - _lang_to_display[_lang].set_format(value) + displayer.set_format(value) except: pass diff --git a/src/GrampsCfg.py b/src/GrampsCfg.py index e35345f89..fe30ca3e3 100644 --- a/src/GrampsCfg.py +++ b/src/GrampsCfg.py @@ -85,6 +85,11 @@ def set_calendar_date_format(): format_list = DateHandler.get_date_formats() DateHandler.set_format(GrampsKeys.get_date_format(format_list)) +def _update_calendar_date_format(active,dlist): + GrampsKeys.save_date_format(active,dlist) + format_list = DateHandler.get_date_formats() + DateHandler.set_format(active) + #------------------------------------------------------------------------- # # make_path - @@ -273,11 +278,6 @@ class GrampsPreferences: store.append(row=[item]) date_option.set_model(store) - date_option.connect("changed", - lambda obj: - GrampsKeys.save_date_format(obj.get_active(),dlist) - ) - try: # Technically, a selected format might be out of range # for this locale's format list. @@ -285,6 +285,10 @@ class GrampsPreferences: except: date_option.set_active(0) + date_option.connect("changed", + lambda obj: + _update_calendar_date_format(obj.get_active(),dlist) + ) resname = self.top.get_widget("resname") resname.set_text(GrampsKeys.get_researcher_name())