diff --git a/ChangeLog b/ChangeLog index e9bb04975..73948a8bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,11 @@ (event_edit, addr_edit): Remove button relief as in editPerson. 2004-09-19 Don Allingham + * src/Date.py: remove comment field + * src/DateParser.py: add parsing of Month Day1-Day2, Year + * src/RelLib.py: make date parsers/displayers global to resolve + pickle-ing problem + * src/EditPerson.py: update lists before committing to database * src/gramps.glade: remove button border for date editor button * src/DateDisplay.py: fix quality prefix display diff --git a/src/Date.py b/src/Date.py index 8f2d8ee09..75a2f66ed 100644 --- a/src/Date.py +++ b/src/Date.py @@ -110,7 +110,6 @@ class Date: self.dateval = source.dateval self.text = source.text self.sortval = source.sortval - self.comment = source.comment else: self.calendar = CAL_GREGORIAN self.modifier = MOD_TEXTONLY @@ -118,7 +117,6 @@ class Date: self.dateval = EMPTY self.text = u"" self.sortval = 0 - self.comment = u"" def copy(self,source): """ @@ -131,7 +129,6 @@ class Date: self.dateval = source.dateval self.text = source.text self.sortval = source.sortval - self.comment = source.comment def __cmp__(self,other): """ @@ -147,16 +144,12 @@ class Date: at the sorting value, and ignores the modifiers/comments. """ - if (self.calendar == other.calendar and - self.modifier == other.modifier and - self.quality == other.quality and - self.dateval == other.dateval and - self.text == other.text and - self.sortval == other.sortval and - self.comment == other.comment): - return 1 - else: - return 0 + return (self.calendar == other.calendar and + self.modifier == other.modifier and + self.quality == other.quality and + self.dateval == other.dateval and + self.text == other.text and + self.sortval == other.sortval) def __str__(self): """ @@ -219,18 +212,6 @@ class Date: """ return self.modifier - def set_comment(self,comment): - """ - Sets the comment for the date. - """ - self.comment = comment - - def get_comment(self): - """ - Returns the associated comment. - """ - return self.comment - def set_modifier(self,val): """ Sets the modifier for the date. diff --git a/src/DateParser.py b/src/DateParser.py index 8a3138a65..8602f08cf 100644 --- a/src/DateParser.py +++ b/src/DateParser.py @@ -101,12 +101,13 @@ class DateParser: ) + ')' _mon_str = '(' + '|'.join(month_to_int.keys()) + ')' - _qual = re.compile("%s\s+(.*)" % _qual_str,re.IGNORECASE) - _span = re.compile("from\s+(.*)\s+to\s+(.*)",re.IGNORECASE) - _range = re.compile("(bet.|between)\s+(.*)\s+and\s+(.*)",re.IGNORECASE) + _qual = re.compile("%s\s+(.+)" % _qual_str,re.IGNORECASE) + _span = re.compile("from\s+(.+)\s+to\s+(.+)",re.IGNORECASE) + _range = re.compile("(bet.|between)\s+(.+)\s+and\s+(.+)",re.IGNORECASE) _modifier = re.compile('%s\s+(.*)' % _mod_str,re.IGNORECASE) _text = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?' % _mon_str,re.IGNORECASE) _text2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?' % _mon_str,re.IGNORECASE) + _range2 = re.compile('%s\s+(\d+)-(\d+)\s*,?\s*((\d+)(/\d+)?)?' % _mon_str,re.IGNORECASE) _numeric = re.compile("((\d+)[/\.])?((\d+)[/\.])?(\d+)") _iso = re.compile("(\d+)-(\d+)-(\d+)") @@ -212,6 +213,24 @@ class DateParser: stop = self._parse_subdate(grps[2]) date.set(qual,Date.MOD_RANGE,Date.CAL_GREGORIAN,start + stop) return + + match = self._range2.match(text) + if match: + grps = match.groups() + m = self.month_to_int[grps[0].lower()] + + d0 = self._get_int(grps[1]) + d1 = self._get_int(grps[2]) + + if grps[3] == None: + y = 0 + s = None + else: + y = int(grps[3]) + s = grps[4] != None + date.set(qual,Date.MOD_RANGE,Date.CAL_GREGORIAN, + (d0,m,y,s,d1,m,y,s)) + return match = self._modifier.match(text) if match: diff --git a/src/EditPerson.py b/src/EditPerson.py index 7fee9ddf4..ec196bd4f 100644 --- a/src/EditPerson.py +++ b/src/EditPerson.py @@ -103,11 +103,11 @@ class EditPerson: self.callback = callback self.child_windows = {} self.path = db.get_save_path() - self.not_loaded = 1 - self.lds_not_loaded = 1 - self.lists_changed = 0 - self.update_birth = 0 - self.update_death = 0 + self.not_loaded = True + self.lds_not_loaded = True + self.lists_changed = False + self.update_birth = False + self.update_death = False self.pdmap = {} self.add_places = [] self.should_guess_gender = (person.get_gramps_id() == '' and @@ -607,7 +607,7 @@ class EditPerson: self.build_endow_menu() def on_gender_activate (self, button): - self.should_guess_gender = 0 + self.should_guess_gender = False def on_givenName_focus_out_event (self, entry, event): if not self.should_guess_gender: @@ -615,11 +615,11 @@ class EditPerson: gender = self.db.genderStats.guess_gender(unicode(entry.get_text ())) if gender == RelLib.Person.unknown: - self.is_unknown.set_active (1) + self.is_unknown.set_active(True) elif gender == RelLib.Person.male: - self.is_male.set_active (1) + self.is_male.set_active(True) else: - self.is_female.set_active (1) + self.is_female.set_active(True) def build_menu(self,list,task,opt_menu,type): menu = gtk.Menu() @@ -677,7 +677,7 @@ class EditPerson: foo.set_place_handle(place.get_handle()) self.elist.insert(row,foo) - self.lists_changed = 1 + self.lists_changed = True self.redraw_event_list() def move_element(self,list,src,dest): @@ -718,7 +718,7 @@ class EditPerson: else: foo = pickle.loads(data[2]); self.ulist.append(foo) - self.lists_changed = 1 + self.lists_changed = True self.redraw_url_list() def url_drag_begin(self, context, a): @@ -751,7 +751,7 @@ class EditPerson: newbase = self.db.get_source_from_handle(base_handle) src.set_base_handle(newbase) self.alist.append(foo) - self.lists_changed = 1 + self.lists_changed = True self.redraw_attr_list() def at_drag_begin(self, context, a): @@ -785,7 +785,7 @@ class EditPerson: src.set_base_handle(newbase) self.plist.insert(row,foo) - self.lists_changed = 1 + self.lists_changed = True self.redraw_addr_list() def ad_drag_data_get(self,widget, context, sel_data, info, time): @@ -830,11 +830,11 @@ class EditPerson: self.wmap[str(url)] = node if len(self.ulist) > 0: - self.web_go.set_sensitive(0) + self.web_go.set_sensitive(False) self.wtree.select_row(0) Utils.bold_label(self.inet_label) else: - self.web_go.set_sensitive(0) + self.web_go.set_sensitive(False) self.web_url.set_text("") self.web_description.set_text("") Utils.unbold_label(self.inet_label) @@ -923,13 +923,13 @@ class EditPerson: # Update birth with new values, make sure death values don't change if self.update_birth: - self.update_birth = 0 + self.update_birth = False self.update_birth_info() self.dplace.set_text(prev_dtext) # Update death with new values, make sure birth values don't change if self.update_death: - self.update_death = 0 + self.update_death = False self.update_death_info() self.bplace.set_text(prev_btext) @@ -982,7 +982,7 @@ class EditPerson: name cannot be changed""" import EventEdit - self.update_birth = 1 + self.update_birth = True pname = self.person.get_primary_name().get_name() event = self.birth event.set_date_object(Date.Date(self.birth_date_object)) @@ -1000,7 +1000,7 @@ class EditPerson: name cannot be changed""" import EventEdit - self.update_death = 1 + self.update_death = True pname = self.person.get_primary_name().get_name() event = self.death event.set_date_object(Date.Date(self.death_date_object)) @@ -1018,7 +1018,7 @@ class EditPerson: store,node = self.ntree.get_selected() if node: self.nlist.remove(self.ntree.get_object(node)) - self.lists_changed = 1 + self.lists_changed = True self.redraw_name_list() def on_delete_url_clicked(self,obj): @@ -1026,7 +1026,7 @@ class EditPerson: store,node = self.wtree.get_selected() if node: self.ulist.remove(self.wtree.get_object(node)) - self.lists_changed = 1 + self.lists_changed = True self.redraw_url_list() def on_delete_attr_clicked(self,obj): @@ -1034,7 +1034,7 @@ class EditPerson: store,node = self.atree.get_selected() if node: self.alist.remove(self.atree.get_object(node)) - self.lists_changed = 1 + self.lists_changed = True self.redraw_attr_list() def on_delete_addr_clicked(self,obj): @@ -1042,7 +1042,7 @@ class EditPerson: store,node = self.ptree.get_selected() if node: self.plist.remove(self.ptree.get_object(node)) - self.lists_changed = 1 + self.lists_changed = True self.redraw_addr_list() def on_web_go_clicked(self,obj): @@ -1077,10 +1077,10 @@ class EditPerson: 'have made will be lost'), self.cancel_callback, self.save) - return 1 + return True else: self.close() - return 0 + return False def cancel_callback(self): """If the user answered yes to abandoning changes, close the window""" @@ -1110,32 +1110,32 @@ class EditPerson: if idval == "": idval = None - changed = 0 + changed = False name = self.person.get_primary_name() if self.complete.get_active() != self.person.get_complete_flag(): - changed = 1 + changed = True if self.person.get_gramps_id() != idval: - changed = 1 + changed = True if suffix != name.get_suffix(): - changed = 1 + changed = True if prefix != name.get_surname_prefix(): - changed = 1 + changed = True if surname.upper() != name.get_surname().upper(): - changed = 1 + changed = True if ntype != const.NameTypesMap.find_value(name.get_type()): - changed = 1 + changed = True if given != name.get_first_name(): - changed = 1 + changed = True if nick != self.person.get_nick_name(): - changed = 1 + changed = True if title != name.get_title(): - changed = 1 + changed = True if self.pname.get_note() != name.get_note(): - changed = 1 - if self.lds_not_loaded == 0 and self.check_lds(): - changed = 1 + changed = True + if self.lds_not_loaded == False and self.check_lds(): + changed = True bplace = unicode(self.bplace.get_text().strip()) dplace = unicode(self.dplace.get_text().strip()) @@ -1145,7 +1145,7 @@ class EditPerson: else: p1 = None if bplace != "": - changed = 1 + changed = True self.birth.set_place_handle('') if self.pdmap.has_key(dplace): @@ -1153,33 +1153,33 @@ class EditPerson: else: p1 = None if dplace != "": - changed = 1 + changed = True self.death.set_place_handle('') if not self.birth.are_equal(self.orig_birth): - changed = 1 + changed = True if not self.death.are_equal(self.orig_death): - changed = 1 + changed = True if male and self.person.get_gender() != RelLib.Person.male: - changed = 1 + changed = True elif female and self.person.get_gender() != RelLib.Person.female: - changed = 1 + changed = True elif unknown and self.person.get_gender() != RelLib.Person.unknown: - changed = 1 - if text != self.person.get_note() or self.lists_changed: - changed = 1 + changed = True + if text != self.person.get_note(): + changed = True if format != self.person.get_note_format(): - changed = 1 + changed = True - if self.lds_not_loaded == 0: + if self.lds_not_loaded == False: if not self.lds_baptism.are_equal(self.person.get_lds_baptism()): - changed= 1 + changed= True if not self.lds_endowment.are_equal(self.person.get_lds_endowment()): - changed = 1 + changed = True if not self.lds_sealing.are_equal(self.person.get_lds_sealing()): - changed = 1 + changed = True return changed @@ -1212,7 +1212,7 @@ class EditPerson: def on_event_delete_clicked(self,obj): """Delete the selected event""" if Utils.delete_selected(obj,self.elist): - self.lists_changed = 1 + self.lists_changed = True self.redraw_event_list() def update_birth_death(self): @@ -1452,7 +1452,7 @@ class EditPerson: def on_apply_person_clicked(self,obj): trans = self.db.transaction_begin() - + surname = unicode(self.surname.get_text()) suffix = unicode(self.suffix.get_text()) prefix = unicode(self.prefix.get_text()) @@ -1546,13 +1546,13 @@ class EditPerson: male = self.is_male.get_active() female = self.is_female.get_active() unknown = self.is_unknown.get_active() - error = 0 + error = False if male and self.person.get_gender() != RelLib.Person.male: self.person.set_gender(RelLib.Person.male) for temp_family in self.person.get_family_handle_list(): if self.person == temp_family.get_mother_handle(): if temp_family.get_father_handle() != None: - error = 1 + error = True else: temp_family.set_mother_handle(None) temp_family.set_father_handle(self.person) @@ -1561,7 +1561,7 @@ class EditPerson: for temp_family in self.person.get_family_handle_list(): if self.person == temp_family.get_father_handle(): if temp_family.get_mother_handle() != None: - error = 1 + error = True else: temp_family.set_father_handle(None) temp_family.set_mother_handle(self.person) @@ -1570,18 +1570,18 @@ class EditPerson: for temp_family in self.person.get_family_handle_list(): if self.person == temp_family.get_father_handle(): if temp_family.get_mother_handle() != None: - error = 1 + error = True else: temp_family.set_father_handle(None) temp_family.set_mother_handle(self.person) if self.person == temp_family.get_mother_handle(): if temp_family.get_father_handle() != None: - error = 1 + error = True else: temp_family.set_mother_handle(None) temp_family.set_father_handle(self.person) - if error == 1: + if error == True: msg2 = _("Problem changing the gender") msg = _("Changing the gender caused problems " "with marriage information.\nPlease check " @@ -1601,7 +1601,7 @@ class EditPerson: if self.complete.get_active() != self.person.get_complete_flag(): self.person.set_complete_flag(self.complete.get_active()) - if self.lds_not_loaded == 0: + if self.lds_not_loaded == False: self.check_lds() lds_ord = RelLib.LdsOrd(self.person.get_lds_baptism()) if not self.lds_baptism.are_equal(lds_ord): @@ -1617,6 +1617,7 @@ class EditPerson: if self.lists_changed: self.person.set_source_reference_list(self.srcreflist) + self.update_lists() if self.person.get_handle() == None: self.db.add_person(self.person, trans) @@ -1624,7 +1625,6 @@ class EditPerson: self.db.commit_person(self.person, trans) n = self.person.get_primary_name().get_regular_name() self.db.transaction_commit(trans,_("Edit Person (%s)") % n) - self.update_lists() if self.callback: self.callback(self,1) self.close() @@ -1654,7 +1654,7 @@ class EditPerson: def update_primary_name(self,list): self.pname.set_source_reference_list(list) - self.lists_changed = 1 + self.lists_changed = True def on_name_note_clicked(self,obj): import NoteEdit @@ -1666,7 +1666,7 @@ class EditPerson: def update_ldsbap_list(self,list): self.lds_baptism.set_source_reference_list(list) - self.lists_changed = 1 + self.lists_changed = True def on_ldsbap_note_clicked(self,obj): import NoteEdit @@ -1678,7 +1678,7 @@ class EditPerson: def set_ldsendow_list(self,list): self.lds_endowment.set_source_reference_list(list) - self.lists_changed = 1 + self.lists_changed = True def on_ldsendow_note_clicked(self,obj): import NoteEdit @@ -1690,7 +1690,7 @@ class EditPerson: def lds_seal_list(self,list): self.lds_sealing.set_source_reference_list(list) - self.lists_changed = 1 + self.lists_changed = True def on_ldsseal_note_clicked(self,obj): import NoteEdit @@ -1726,9 +1726,9 @@ class EditPerson: elif page == 2: self.redraw_event_list() elif page == 7 and self.not_loaded: - self.not_loaded = 0 + self.not_loaded = False elif page == 9 and self.lds_not_loaded: - self.lds_not_loaded = 0 + self.lds_not_loaded = False self.draw_lds() note_buf = self.notes_buffer text = unicode(note_buf.get_text(note_buf.get_start_iter(), @@ -1738,7 +1738,7 @@ class EditPerson: else: Utils.unbold_label(self.notes_label) - if self.lds_not_loaded == 0: + if self.lds_not_loaded == False: self.check_lds() if self.lds_baptism.is_empty() \ and self.lds_endowment.is_empty() \ @@ -1756,7 +1756,7 @@ class EditPerson: self.nlist.append(old) self.redraw_name_list() self.pname = RelLib.Name(new) - self.lists_changed = 1 + self.lists_changed = True self.write_primary_name() def write_primary_name(self): @@ -1776,7 +1776,7 @@ class EditPerson: def birth_dates_in_order(self,list): """Check any *valid* birthdates in the list to insure that they are in numerically increasing order.""" - inorder = 1 + inorder = True prev_date = "00000000" for i in range(len(list)): child_handle = list[i] @@ -1790,7 +1790,7 @@ class EditPerson: if (prev_date <= child_date): # <= allows for twins prev_date = child_date else: - inorder = 0 + inorder = False return inorder def reorder_child_list(self, person, list): diff --git a/src/GrampsDbBase.py b/src/GrampsDbBase.py index dcc70d788..d1474fa83 100644 --- a/src/GrampsDbBase.py +++ b/src/GrampsDbBase.py @@ -141,6 +141,7 @@ class GrampsDbBase: if transaction != None: old_data = self.person_map.get(handle) transaction.add(PERSON_KEY,handle,old_data) + self.person_map[handle] = person.serialize() def commit_media_object(self,obj,transaction,change_time=None): diff --git a/src/RelLib.py b/src/RelLib.py index d7a26965f..282b8abc7 100644 --- a/src/RelLib.py +++ b/src/RelLib.py @@ -61,6 +61,15 @@ CONF_NORMAL = 2 CONF_LOW = 1 CONF_VERY_LOW = 0 + +#------------------------------------------------------------------------- +# +# Class definitions +# +#------------------------------------------------------------------------- +_display = DateHandler.create_display() +_parser = DateHandler.create_parser() + #------------------------------------------------------------------------- # # Class definitions @@ -817,8 +826,6 @@ class Event(PrimaryObject,DataObj): PrimaryObject.__init__(self,source) DataObj.__init__(self,source) - self.dd = DateHandler.create_display() - self.dp = DateHandler.create_parser() if source: self.place = source.place self.date = Date.Date(source.date) @@ -984,12 +991,12 @@ class Event(PrimaryObject,DataObj): def set_date(self, date) : """attempts to sets the date of the Event instance""" - self.date = self.dp.parse(date) + self.date = _parser.parse(date) def get_date(self) : """returns a string representation of the date of the Event instance""" if self.date: - return self.dd.display(self.date) + return _display.display(self.date) return u"" def get_preferred_date(self) : @@ -1000,7 +1007,7 @@ class Event(PrimaryObject,DataObj): """returns a string representation of the date of the Event instance, enclosing the results in quotes if it is not a valid date""" if self.date: - return self.dd.quote_display(self.date) + return _display.quote_display(self.date) return u"" def get_date_object(self): @@ -1357,8 +1364,6 @@ class LdsOrd(SourceNote): def __init__(self,source=None): """Creates a LDS Ordinance instance""" SourceNote.__init__(self,source) - self.dp = DateHandler.create_parser() - self.dd = DateHandler.create_display() if source: self.famc = source.famc @@ -1403,12 +1408,12 @@ class LdsOrd(SourceNote): """attempts to sets the date of the ordinance""" if not self.date: self.date = Date.Date() - self.dp.set_date(self.date,date) + _parser.set_date(self.date,date) def get_date(self) : """returns a string representation of the date of the ordinance""" if self.date: - return self.dd.display(self.date) + return _display.display(self.date) return u"" def get_date_object(self): @@ -1723,8 +1728,6 @@ class Address(DataObj): if provided""" DataObj.__init__(self,source) - self.dd = DateHandler.create_display() - self.dp = DateHandler.create_parser() if source: self.street = source.street self.city = source.city @@ -1745,13 +1748,13 @@ class Address(DataObj): def set_date(self,text): """attempts to sets the date that the person lived at the address from the passed string""" - self.date = self.dp.parse(text) + self.date = _parser.parse(text) def get_date(self): """returns a string representation of the date that the person lived at the address""" if self.date: - return self.dd.display(self.date) + return _display.display(self.date) return u"" def get_preferred_date(self):