diff --git a/gramps/src/EditPerson.glade b/gramps/src/EditPerson.glade index e0c6860f8..bc4ac745c 100644 --- a/gramps/src/EditPerson.glade +++ b/gramps/src/EditPerson.glade @@ -4340,472 +4340,928 @@ - GtkTable - table28 - 6 - 3 + GtkVBox + vbox38 False - 0 - 0 + 0 - GtkLabel - label249 + GtkFrame + frame11 + 5 - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 5 + 0 + GTK_SHADOW_ETCHED_IN - 0 - 1 - 2 - 3 - 0 - 0 - False - False - False - False - True - False - - - - - GtkEntry - ldsbapdate - True - True - True - 0 - - - 1 - 2 - 2 - 3 - 5 - 5 - True - False - False - False - True - False - - - - - GtkCombo - ldsbaptemple - True - True - False - True - False - - - 2 - 3 - 2 - 3 - 5 - 5 - True - False - False - False - True - False + 0 + True + True - GtkEntry - GtkCombo:entry - combo-entry1 - True - - insert_text - on_combo_insert_text - ldsbaptemple - Sat, 01 Dec 2001 04:25:20 GMT - - True - True - 0 - - - + GtkTable + table29 + 5 + 3 + 3 + False + 0 + 0 - - GtkLabel - label251 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 1 - 2 - 0 - 1 - 5 - 5 - False - False - False - False - True - False - - + + GtkLabel + label256 + + GTK_JUSTIFY_CENTER + False + 1 + 0.5 + 0 + 0 + + 0 + 1 + 0 + 1 + 0 + 0 + False + False + False + False + True + False + + - - GtkLabel - label252 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 2 - 3 - 0 - 1 - 5 - 5 - False - False - False - False - True - False - - + + GtkLabel + label257 + + GTK_JUSTIFY_CENTER + False + 1 + 0.5 + 0 + 0 + + 0 + 1 + 1 + 2 + 0 + 0 + False + False + False + False + True + False + + - - GtkLabel - label253 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 0 - 0 - - 0 - 1 - 3 - 4 - 5 - 5 - False - False - False - False - True - False - - + + GtkLabel + label262 + + GTK_JUSTIFY_CENTER + False + 1 + 0.5 + 0 + 0 + + 0 + 1 + 2 + 3 + 0 + 0 + False + False + False + False + True + False + + - - GtkEntry - endowdate - True - True - True - 0 - - - 1 - 2 - 3 - 4 - 5 - 5 - True - False - False - False - True - False - - + + GtkCombo + ldsbaptemple + True + True + False + True + False + + + 1 + 2 + 1 + 2 + 5 + 3 + True + False + False + False + True + False + - - GtkCombo - endowtemple - True - True - False - True - False - - - 2 - 3 - 3 - 4 - 5 - 5 - True - False - False - False - True - False - + + GtkEntry + GtkCombo:entry + combo-entry1 + True + + insert_text + on_combo_insert_text + ldsbaptemple + Sat, 01 Dec 2001 04:25:20 GMT + + True + True + 0 + + + - - GtkEntry - GtkCombo:entry - entry3 - True - - insert_text - on_combo_insert_text - endowtemple - Sat, 01 Dec 2001 04:25:44 GMT - - True - True - 0 - - - + + GtkEntry + ldsbapdate + True + True + True + 0 + + + 1 + 2 + 0 + 1 + 5 + 3 + True + False + False + False + True + False + + - - GtkHSeparator - hseparator8 - - 2 - 3 - 1 - 2 - 5 - 2 - False - False - False - False - True - False - - + + GtkButton + button131 + True + + clicked + on_ldsbap_src_clicked + editPerson + Mon, 17 Dec 2001 00:27:40 GMT + + + GTK_RELIEF_NORMAL + + 2 + 3 + 1 + 2 + 5 + 3 + False + False + False + False + True + False + + - - GtkHSeparator - hseparator7 - - 1 - 2 - 1 - 2 - 5 - 2 - False - False - False - False - True - False - - + + GtkButton + button128 + True + + clicked + on_ldsbap_note_clicked + editPerson + Mon, 17 Dec 2001 00:27:46 GMT + + + GTK_RELIEF_NORMAL + + 2 + 3 + 2 + 3 + 5 + 3 + False + False + False + False + True + False + + - - GtkHSeparator - hseparator6 - - 0 - 1 - 1 - 2 - 5 - 2 - False - False - False - False - True - False - - - - - GtkEntry - sealdate - True - True - True - 0 - - - 1 - 2 - 4 - 5 - 5 - 5 - True - False - False - False - True - False - - - - - GtkCombo - sealtemple - True - True - False - True - False - - - 2 - 3 - 4 - 5 - 5 - 5 - True - False - False - False - True - False - - - - GtkEntry - GtkCombo:entry - entry5 - True - - insert_text - on_combo_insert_text - sealtemple - Sat, 01 Dec 2001 04:26:04 GMT - - True - True - 0 - - - - - - GtkLabel - label254 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 0 - 0 - - 0 - 1 - 4 - 5 - 5 - 5 - False - False - False - False - True - False - - - - - GtkLabel - label250 - - GTK_JUSTIFY_LEFT - False - 0.5 - 0.5 - 5 - 5 - - 0 - 1 - 0 - 1 - 5 - 5 - False - False - True - False - True - False - - - - - GtkOptionMenu - sealparents - True - + + GtkOptionMenu + ldsbapstat + True + - 0 - - 2 - 3 - 5 - 6 - 5 - 5 - False - False - False - False - True - False - + 0 + + 2 + 3 + 0 + 1 + 5 + 3 + False + False + False + False + True + False + + + + + GtkCombo + ldsbapplace + False + True + False + True + False + + + 1 + 2 + 2 + 3 + 5 + 3 + True + False + False + False + True + False + + + + GtkEntry + GtkCombo:entry + entry6 + True + + insert_text + on_combo_insert_text + bpcombo + Thu, 18 Oct 2001 01:13:13 GMT + + True + True + 0 + + + + - GtkLabel - label255 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 0 - 0 + GtkFrame + frame12 + 5 + + 0 + GTK_SHADOW_ETCHED_IN - 1 - 2 - 5 - 6 - 5 - 5 - False - False - False - False - True - False + 0 + True + True + + + GtkTable + table30 + 5 + 3 + 3 + False + 0 + 0 + + + GtkLabel + label258 + + GTK_JUSTIFY_CENTER + False + 1 + 0.5 + 0 + 0 + + 0 + 1 + 0 + 1 + 0 + 0 + False + False + False + False + True + False + + + + + GtkLabel + label260 + + GTK_JUSTIFY_CENTER + False + 1 + 0.5 + 0 + 0 + + 0 + 1 + 1 + 2 + 0 + 0 + False + False + False + False + True + False + + + + + GtkLabel + label264 + + GTK_JUSTIFY_CENTER + False + 1 + 0.5 + 0 + 0 + + 0 + 1 + 2 + 3 + 0 + 0 + False + False + False + False + True + False + + + + + GtkCombo + endowtemple + True + True + False + True + False + + + 1 + 2 + 1 + 2 + 5 + 3 + True + False + False + False + True + False + + + + GtkEntry + GtkCombo:entry + entry3 + True + + insert_text + on_combo_insert_text + endowtemple + Sat, 01 Dec 2001 04:25:44 GMT + + True + True + 0 + + + + + + GtkEntry + endowdate + True + True + True + 0 + + + 1 + 2 + 0 + 1 + 5 + 3 + True + False + False + False + True + False + + + + + GtkOptionMenu + endowstat + True + + + 0 + + 2 + 3 + 0 + 1 + 5 + 3 + False + False + False + False + True + False + + + + + GtkButton + button132 + True + + clicked + on_ldsendow_src_clicked + editPerson + Mon, 17 Dec 2001 00:28:12 GMT + + + GTK_RELIEF_NORMAL + + 2 + 3 + 1 + 2 + 5 + 3 + False + False + False + False + True + False + + + + + GtkButton + button129 + True + + clicked + on_ldsendow_note_clicked + editPerson + Mon, 17 Dec 2001 00:27:55 GMT + + + GTK_RELIEF_NORMAL + + 2 + 3 + 2 + 3 + 5 + 3 + False + False + False + False + True + False + + + + + GtkCombo + endowplace + False + True + False + True + False + + + 1 + 2 + 2 + 3 + 5 + 3 + True + False + False + False + True + False + + + + GtkEntry + GtkCombo:entry + endowp + True + + insert_text + on_combo_insert_text + bpcombo + Thu, 18 Oct 2001 01:13:13 GMT + + True + True + 0 + + + + + + + + GtkFrame + frame13 + 5 + + 0 + GTK_SHADOW_ETCHED_IN + + 0 + True + True + + + + GtkTable + table31 + 5 + 4 + 3 + False + 0 + 0 + + + GtkLabel + label259 + + GTK_JUSTIFY_CENTER + False + 1 + 0.5 + 0 + 0 + + 0 + 1 + 0 + 1 + 0 + 0 + False + False + False + False + True + False + + + + + GtkLabel + label261 + + GTK_JUSTIFY_CENTER + False + 1 + 0.5 + 0 + 0 + + 0 + 1 + 1 + 2 + 0 + 0 + False + False + False + False + True + False + + + + + GtkLabel + label255 + + GTK_JUSTIFY_CENTER + False + 1 + 0.5 + 0 + 0 + + 0 + 1 + 3 + 4 + 0 + 0 + False + False + False + False + True + False + + + + + GtkLabel + label265 + + GTK_JUSTIFY_CENTER + False + 1 + 0.5 + 0 + 0 + + 0 + 1 + 2 + 3 + 0 + 0 + False + False + False + False + True + False + + + + + GtkEntry + sealdate + True + True + True + 0 + + + 1 + 2 + 0 + 1 + 5 + 3 + True + False + False + False + True + False + + + + + GtkOptionMenu + sealstat + True + + + 0 + + 2 + 3 + 0 + 1 + 5 + 3 + False + False + False + False + True + False + + + + + GtkCombo + sealtemple + True + True + False + True + False + + + 1 + 2 + 1 + 2 + 5 + 3 + False + False + False + False + True + False + + + + GtkEntry + GtkCombo:entry + entry5 + True + + insert_text + on_combo_insert_text + sealtemple + Sat, 01 Dec 2001 04:26:04 GMT + + True + True + 0 + + + + + + GtkButton + button133 + True + + clicked + on_ldsseal_src_clicked + editPerson + Mon, 17 Dec 2001 00:28:47 GMT + + + GTK_RELIEF_NORMAL + + 2 + 3 + 1 + 2 + 5 + 3 + False + False + False + False + True + False + + + + + GtkButton + button130 + True + + clicked + on_ldsseal_note_clicked + editPerson + Mon, 17 Dec 2001 00:28:30 GMT + + + GTK_RELIEF_NORMAL + + 2 + 3 + 2 + 3 + 5 + 3 + False + False + False + False + True + False + + + + + GtkOptionMenu + sealparents + True + + + 0 + + 1 + 2 + 3 + 4 + 5 + 3 + False + False + False + False + True + False + + + + + GtkCombo + sealplace + False + True + False + True + False + + + 1 + 2 + 2 + 3 + 5 + 3 + True + False + False + False + True + False + + + + GtkEntry + GtkCombo:entry + entry8 + True + + insert_text + on_combo_insert_text + bpcombo + Thu, 18 Oct 2001 01:13:13 GMT + + True + True + 0 + + + + diff --git a/gramps/src/EditPerson.py b/gramps/src/EditPerson.py index ee243f594..cca9eede8 100644 --- a/gramps/src/EditPerson.py +++ b/gramps/src/EditPerson.py @@ -81,6 +81,7 @@ class EditPerson: self.callback = callback self.path = db.getSavePath() self.not_loaded = 1 + self.lds_not_loaded = 1 self.lists_changed = 0 self.update_birth = 0 self.update_death = 0 @@ -124,6 +125,12 @@ class EditPerson: "on_name_button_press" : self.aka_double_click, "on_name_list_select_row" : self.on_name_list_select_row, "on_name_note_clicked" : self.on_name_note_clicked, + "on_ldsbap_note_clicked" : self.on_ldsbap_note_clicked, + "on_ldsendow_note_clicked" : self.on_ldsendow_note_clicked, + "on_ldsseal_note_clicked" : self.on_ldsseal_note_clicked, + "on_ldsbap_src_clicked" : self.on_ldsbap_source_clicked, + "on_ldsendow_src_clicked" : self.on_ldsendow_source_clicked, + "on_ldsseal_src_clicked" : self.on_ldsseal_source_clicked, "on_name_source_clicked" : self.on_primary_name_source_clicked, "on_photolist_button_press_event" : self.gallery.on_photolist_button_press_event, "on_photolist_select_icon" : self.gallery.on_photo_select_icon, @@ -195,6 +202,12 @@ class EditPerson: self.ldsseal_date = self.get_widget("sealdate") self.ldsseal_temple = self.get_widget("sealtemple") self.ldsseal_fam = self.get_widget("sealparents") + self.ldsbapstat = self.get_widget("ldsbapstat") + self.ldssealstat = self.get_widget("sealstat") + self.ldsendowstat = self.get_widget("endowstat") + self.ldsbapplace = self.get_widget("ldsbapplace") + self.ldssealplace = self.get_widget("sealplace") + self.ldsendowplace = self.get_widget("endowplace") self.elist = person.getEventList()[:] self.nlist = person.getAlternateNames()[:] @@ -273,6 +286,7 @@ class EditPerson: ord = person.getLdsBaptism() self.ldsbap_temple.set_popdown_strings(_temple_names) if ord: + self.bap_stat = ord.getStatus() self.ldsbap_date.set_text(ord.getDate()) if ord.getTemple() != "": name = const.lds_temple_to_abrev[ord.getTemple()] @@ -280,11 +294,13 @@ class EditPerson: name = "" self.ldsbap_temple.entry.set_text(name) else: + self.bap_stat = 0 self.ldsbap_temple.entry.set_text("") ord = person.getLdsEndowment() self.ldsend_temple.set_popdown_strings(_temple_names) if ord: + self.end_stat = ord.getStatus() self.ldsend_date.set_text(ord.getDate()) if ord.getTemple() != "": name = const.lds_temple_to_abrev[ord.getTemple()] @@ -292,11 +308,13 @@ class EditPerson: name = "" self.ldsend_temple.entry.set_text(name) else: + self.end_stat = 0 self.ldsend_temple.entry.set_text("") ord = person.getLdsSeal() self.ldsseal_temple.set_popdown_strings(_temple_names) if ord: + self.seal_stat = ord.getStatus() self.ldsseal_date.set_text(ord.getDate()) self.ldsfam = ord.getFamily() if ord.getTemple() != "": @@ -305,6 +323,7 @@ class EditPerson: name = "" self.ldsseal_temple.entry.set_text(name) else: + self.seal_stat = 0 self.ldsseal_temple.entry.set_text("") self.ldsfam = None @@ -364,6 +383,10 @@ class EditPerson: self.addr_list.connect('drag_data_get', self.ad_drag_data_get) self.addr_list.connect('drag_data_received', self.ad_drag_data_received) + self.build_bap_menu() + self.build_seal_menu() + self.build_endow_menu() + # draw lists self.redraw_event_list() self.redraw_attr_list() @@ -372,6 +395,55 @@ class EditPerson: self.redraw_url_list() self.window.show() + + def build_bap_menu(self): + menu = gtk.GtkMenu() + index = 0 + for val in const.lds_baptism_index: + menuitem = gtk.GtkMenuItem(val) + menuitem.set_data("val",index) + menuitem.connect('activate',self.set_lds_bap) + menuitem.show() + menu.append(menuitem) + index = index + 1 + self.ldsbapstat.set_menu(menu) + self.ldsbapstat.set_history(self.bap_stat) + + def build_endow_menu(self): + menu = gtk.GtkMenu() + index = 0 + for val in const.lds_baptism_index: + menuitem = gtk.GtkMenuItem(val) + menuitem.set_data("val",index) + menuitem.connect('activate',self.set_lds_endow) + menuitem.show() + menu.append(menuitem) + index = index + 1 + self.ldsendowstat.set_menu(menu) + self.ldsendowstat.set_history(self.end_stat) + + def build_seal_menu(self): + menu = gtk.GtkMenu() + index = 0 + for val in const.lds_csealing_index: + menuitem = gtk.GtkMenuItem(val) + menuitem.set_data("val",index) + menuitem.connect('activate',self.set_lds_seal) + menuitem.show() + menu.append(menuitem) + index = index + 1 + self.ldssealstat.set_menu(menu) + self.ldssealstat.set_history(self.seal_stat) + + def set_lds_bap(self,obj): + self.bap_stat = obj.get_data("val") + + def set_lds_endow(self,obj): + self.end_stat = obj.get_data("val") + + def set_lds_seal(self,obj): + self.seal_stat = obj.get_data("val") + def ev_drag_data_received(self,widget,context,x,y,selection_data,info,time): if selection_data and selection_data.data: exec 'data = %s' % selection_data.data @@ -706,6 +778,8 @@ class EditPerson: d.set(date) if compare_dates(d,ord.getDateObj()) != 0: changed = 1 + elif ord.getStatus() != self.bap_stat: + changed = 1 elif ord.getTemple() != temple: changed = 1 @@ -724,6 +798,8 @@ class EditPerson: d.set(date) if compare_dates(d,ord.getDateObj()) != 0: changed = 1 + elif ord.getStatus() != self.end_stat: + changed = 1 elif ord.getTemple() != temple: changed = 1 @@ -745,6 +821,8 @@ class EditPerson: changed = 1 elif ord.getTemple() != temple: changed = 1 + elif ord.getStatus() != self.seal_stat: + changed = 1 elif ord.getFamily() != self.ldsfam: changed = 1 @@ -1070,7 +1148,7 @@ class EditPerson: else: temple = "" ord = self.person.getLdsBaptism() - update_ord(self.person.setLdsBaptism,ord,date,temple) + update_ord(self.person.setLdsBaptism,ord,date,temple,self.bap_stat) date = self.ldsend_date.get_text() temple = self.ldsend_temple.entry.get_text() @@ -1079,7 +1157,7 @@ class EditPerson: else: temple = "" ord = self.person.getLdsEndowment() - update_ord(self.person.setLdsEndowment,ord,date,temple) + update_ord(self.person.setLdsEndowment,ord,date,temple,self.end_stat) date = self.ldsseal_date.get_text() temple = self.ldsseal_temple.entry.get_text() @@ -1105,6 +1183,9 @@ class EditPerson: if ord.getTemple() != temple: ord.setTemple(temple) utils.modified() + if ord.getStatus() != self.seal_stat: + ord.setStatus(self.seal_stat) + utils.modified() if ord.getFamily() != self.ldsfam: ord.setFamily(self.ldsfam) utils.modified() @@ -1122,6 +1203,54 @@ class EditPerson: import NoteEdit NoteEdit.NoteEditor(self.pname) + def on_ldsbap_source_clicked(self,obj): + import Sources + ord = self.person.getLdsBaptism() + if ord == None: + ord = LdsOrd() + self.person.setLdsBaptism(ord) + Sources.SourceSelector(self.pname.getSourceRefList(),self,src_changed) + + def on_ldsbap_note_clicked(self,obj): + import NoteEdit + ord = self.person.getLdsBaptism() + if ord == None: + ord = LdsOrd() + self.person.setLdsBaptism(ord) + NoteEdit.NoteEditor(ord) + + def on_ldsendow_source_clicked(self,obj): + import Sources + ord = self.person.getLdsEndowment() + if ord == None: + ord = LdsOrd() + self.person.setLdsEndowment(ord) + Sources.SourceSelector(self.pname.getSourceRefList(),self,src_changed) + + def on_ldsendow_note_clicked(self,obj): + import NoteEdit + ord = self.person.getLdsEndowment() + if ord == None: + ord = LdsOrd() + self.person.setLdsEndowment(ord) + NoteEdit.NoteEditor(ord) + + def on_ldsseal_source_clicked(self,obj): + import Sources + ord = self.person.getLdsSeal() + if ord == None: + ord = LdsOrd() + self.person.setLdsSeal(ord) + Sources.SourceSelector(self.pname.getSourceRefList(),self,src_changed) + + def on_ldsseal_note_clicked(self,obj): + import NoteEdit + ord = self.person.getLdsSeal() + if ord == None: + ord = LdsOrd() + self.person.setLdsSeal(ord) + NoteEdit.NoteEditor(ord) + def load_person_image(self): photo_list = self.person.getPhotoList() if len(photo_list) != 0: @@ -1141,9 +1270,29 @@ class EditPerson: elif page == 6 and self.not_loaded: self.not_loaded = 0 self.gallery.load_images() + elif page == 8 and self.lds_not_loaded: + self.lds_not_loaded = 0 + plist = self.db.getPlaceMap().values() + ord = self.person.getLdsBaptism() + if ord : + place = ord.getPlace() + else: + place = None + utils.attach_places(plist,self.ldsbapplace,place) + ord = self.person.getLdsSeal() + if ord : + place = ord.getPlace() + else: + place = None + utils.attach_places(plist,self.ldssealplace,place) + ord = self.person.getLdsEndowment() + if ord : + place = ord.getPlace() + else: + place = None + utils.attach_places(plist,self.ldsendowplace,place) - -def update_ord(func,ord,date,temple): +def update_ord(func,ord,date,temple,stat): if not ord: if (date or temple): ord = LdsOrd() @@ -1160,6 +1309,9 @@ def update_ord(func,ord,date,temple): elif ord.getTemple() != temple: ord.setTemple(temple) utils.modified() + elif ord.getStatus() != stat: + ord.setStatus(stat) + utils.modified() #------------------------------------------------------------------------- # diff --git a/gramps/src/GrampsParser.py b/gramps/src/GrampsParser.py index cac0ba3d1..5c59ded0f 100644 --- a/gramps/src/GrampsParser.py +++ b/gramps/src/GrampsParser.py @@ -136,6 +136,9 @@ class GrampsParser: def start_temple(self,attrs): self.ord.setTemple(u2l(attrs['val'])) + def start_status(self,attrs): + self.ord.setStatus(int(u2l(attrs['val']))) + def start_sealed_to(self,attrs): id = u2l(attrs['ref']) self.ord.setFamily(self.db.findFamilyNoMap(id)) @@ -318,6 +321,8 @@ class GrampsParser: self.source_ref.setBase(source) if self.photo: self.photo.addSourceRef(self.source_ref) + elif self.ord: + self.ord.addSourceRef(self.source_ref) elif self.object: self.object.addSourceRef(self.source_ref) elif self.event: @@ -628,6 +633,8 @@ class GrampsParser: if self.address: self.address.setNote(note) + elif self.ord: + self.ord.setNote(note) elif self.attribute: self.attribute.setNote(note) elif self.object: @@ -738,6 +745,7 @@ class GrampsParser: "location" : (start_location,None), "lds_ord" : (start_lds_ord, stop_lds_ord), "temple" : (start_temple, None), + "status" : (start_status, None), "sealed_to" : (start_sealed_to, None), "coord" : (start_coord,None), "pos" : (start_pos, None), diff --git a/gramps/src/RelLib.py b/gramps/src/RelLib.py index d4f9ba69f..f10ed9f06 100644 --- a/gramps/src/RelLib.py +++ b/gramps/src/RelLib.py @@ -87,17 +87,30 @@ class SourceNote: """Return in note instance, not just the text""" return self.note -class LdsOrd: +class LdsOrd(SourceNote): """LDS Ordinance support""" def __init__(self,source=None): + SourceNote.__init__(self,source) if source: self.famc = source.famc self.date = Date(source.date) self.temple = source.temple + self.status = source.status + self.place = source.place else: self.famc = None self.date = None self.temple = "" + self.status = 0 + self.place = None + + def setPlace(self,place): + """sets the Place instance of the Event""" + self.place = place + + def getPlace(self): + """returns the Place instance of the Event""" + return self.place def setFamily(self,family): self.famc = family @@ -105,6 +118,12 @@ class LdsOrd: def getFamily(self): return self.famc + def setStatus(self,val): + self.status = val + + def getStatus(self): + return self.status + def setDate(self, date) : """attempts to sets the date of the LdsOrd instance""" if not self.date: diff --git a/gramps/src/WriteXML.py b/gramps/src/WriteXML.py index e454dc663..36664d057 100644 --- a/gramps/src/WriteXML.py +++ b/gramps/src/WriteXML.py @@ -145,8 +145,14 @@ def dump_ordinance(g,name,ord,index=1): write_date(g,dateobj,index+1) if ord.getTemple(): g.write('%s\n' % (sp2,fix(ord.getTemple()))) + if ord.getStatus() != 0: + g.write('%s\n' % (sp2,ord.getStatus())) if ord.getFamily(): g.write('%s\n' % (sp2,fix(ord.getFamily().getId()))) + if ord.getNote() != "": + write_note(g,"note",ord.getNote(),index+1) + for s in ord.getSourceRefList(): + dump_source_ref(g,s,index+1) g.write('%s\n' % sp) #------------------------------------------------------------------------- diff --git a/gramps/src/const.py b/gramps/src/const.py index 5f9d2915b..d877b4f66 100644 --- a/gramps/src/const.py +++ b/gramps/src/const.py @@ -213,7 +213,7 @@ personalConstantEvents = { "Blessing" : "BLES", "Burial" : "BURI", "Cause Of Death" : "CAUS", - "Ordination" : "ORID", + "Ordination" : "ORDI", "Census" : "CENS", "Christening" : "CHR" , "Confirmation" : "CONF", @@ -697,3 +697,43 @@ lds_temple_to_abrev = { "WASHI": "Washington, D.C.", "WA" : "Washington, D.C.", } + +lds_baptism_status = { + "" : 0, + "Child" : 1, + "Cleared" : 2, + "Completed" : 3, + "Infant" : 4, + "Pre-1970" : 5, + "Qualified" : 6, + "Stillborn" : 7, + "Submitted" : 8, + "Uncleared" : 9, + } + +lds_baptism_index = [ + "", + "Child", + "Cleared", + "Completed", + "Infant", + "Pre-1970", + "Qualified", + "Stillborn", + "Submitted", + "Uncleared", + ] + +lds_csealing_index = [ + "", + "BIC", + "Cleared", + "Completed", + "DNS", + "Pre-1970", + "Qualified", + "Stillborn", + "Submitted", + "Uncleared", + ] + diff --git a/gramps/src/plugins/ReadGedcom.py b/gramps/src/plugins/ReadGedcom.py index e1f6df448..6660cd688 100644 --- a/gramps/src/plugins/ReadGedcom.py +++ b/gramps/src/plugins/ReadGedcom.py @@ -69,7 +69,8 @@ for val in const.familyConstantEvents.keys(): lineRE = re.compile(r"\s*(\d+)\s+(\S+)\s*(.*)$") headRE = re.compile(r"\s*(\d+)\s+HEAD") -nameRegexp = re.compile(r"([\S\s]*\S)?\s*/([^/]+)?/\s*,?\s*([\S]+)?") +nameRegexp= re.compile(r"/?([^/]*)(/([^/]*)(/([^/]*))?)?") +#nameRegexp = re.compile(r"([\S\s]*\S)?\s*/([^/]+)?/\s*,?\s*([\S]+)?") calRegexp = re.compile(r"\s*@#D([^@]+)@\s*(.*)$") fromtoRegexp = re.compile(r"\s*FROM\s+@#D([^@]+)@\s*(.*)\s+TO\s+@#D([^@]+)@\s*(.*)$") @@ -298,18 +299,18 @@ class GedcomParser: elif matches[1] == "DATA" or matches[1] == "TEXT": self.ignore_sub_junk(2) elif matches[1] == "TITL": - title = matches[2] + self.parse_continue_data() + title = matches[2] + self.parse_continue_data(level+1) title = string.replace(title,'\n',' ') self.source.setTitle(title) elif matches[1] == "AUTH": - self.source.setAuthor(matches[2] + self.parse_continue_data()) + self.source.setAuthor(matches[2] + self.parse_continue_data(level+1)) elif matches[1] == "PUBL": - self.source.setPubInfo(matches[2] + self.parse_continue_data()) + self.source.setPubInfo(matches[2] + self.parse_continue_data(level+1)) elif matches[1] == "OBJE": self.ignore_sub_junk(2) elif matches[1] == "NOTE": if matches[2] and matches[2][0] != "@": - note = matches[1] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) self.source.setNote(note) self.ignore_sub_junk(2) else: @@ -352,7 +353,7 @@ class GedcomParser: self.parse_source(matches[1],1) elif matches[2] == "REPO": self.ignore_sub_junk(1) - elif matches[2][0:4] == "NOTE": + elif matches[2] == "NOTE": if self.nmap.has_key(matches[1]): noteobj = self.nmap[matches[1]] else: @@ -360,9 +361,9 @@ class GedcomParser: self.nmap[matches[1]] = noteobj text = matches[2][4:] if text == "": - noteobj.set(self.parse_continue_data()) + noteobj.set(self.parse_continue_data(1)) else: - noteobj.set(text + self.parse_continue_data()) + noteobj.set(text + self.parse_continue_data(1)) self.parse_note_data(1) elif matches[2] == "OBJE": self.ignore_sub_junk(1) @@ -386,7 +387,7 @@ class GedcomParser: s = self.db.findSource(ref,self.smap) source_ref.setBase(s) s.setTitle('Imported Source #%d' % self.localref) - s.setNote(matches[2] + self.parse_continue_data()) + s.setNote(matches[2] + self.parse_continue_data(level+1)) self.ignore_sub_junk(2) else: source_ref.setBase(self.db.findSource(matches[2],self.smap)) @@ -458,7 +459,7 @@ class GedcomParser: self.parse_ord(ord,2) elif matches[1] == "ADDR": self.addr = Address() - self.addr.setStreet(matches[2] + self.parse_continue_data()) + self.addr.setStreet(matches[2] + self.parse_continue_data(1)) self.parse_address(self.addr,2) elif matches[1] == "CHIL": mrel,frel = self.parse_ftw_relations(2) @@ -487,9 +488,13 @@ class GedcomParser: self.barf(2) else: self.parse_family_object(2) + elif matches[1] == "_COMM": + note = string.strip(matches[2]) + self.parse_continue_data(1) + self.family.setNote(note) + self.ignore_sub_junk(2) elif matches[1] == "NOTE": if matches[2] and matches[2][0] != "@": - note = matches[1] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(1) self.family.setNote(note) self.ignore_sub_junk(2) else: @@ -524,13 +529,13 @@ class GedcomParser: try: names = nameRegexp.match(matches[2]).groups() except: - names = (matches[2],"","") + names = (matches[2],"","","","") if names[0]: name.setFirstName(names[0]) - if names[1]: - name.setSurname(names[1]) if names[2]: - name.setSuffix(names[2]) + name.setSurname(names[2]) + if names[4]: + name.setSuffix(names[4]) if name_cnt == 0: self.person.setPrimaryName(name) else: @@ -539,32 +544,31 @@ class GedcomParser: self.parse_name(name,2) elif matches[1] == "_UID": self.person.setPafUid(matches[2]) - elif matches[1] == "ALIA": + elif matches[1] in ["ALIA","_ALIA"]: aka = Name() - match = nameRegexp.match(matches[2]) - if match: - names = match.groups() - if names[0]: - aka.setFirstName(names[0]) - if names[1]: - aka.setSurname(names[1]) - if names[2]: - aka.setSuffix(names[2]) - else: - aka.setFirstName(matches[2]) + try: + names = nameRegexp.match(matches[2]).groups() + except: + names = (matches[2],"","","","") + if names[0]: + aka.setFirstName(names[0]) + if names[2]: + aka.setSurname(names[2]) + if names[4]: + aka.setSuffix(names[4]) self.person.addAlternateName(aka) elif matches[1] == "OBJE": if matches[2] and matches[2][0] == '@': self.barf(2) else: self.parse_person_object(2) - elif matches[1] == "NOTE": + elif matches[1] in ["NOTE","_COMM"]: if not string.strip(matches[2]) or matches[2] and matches[2][0] != "@": note = self.person.getNote() if note == "": - note = matches[2] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(1) else: - note = "%s\n\n%s%s" % (note,matches[2],self.parse_continue_data()) + note = "%s\n\n%s%s" % (note,matches[2],self.parse_continue_data(1)) self.person.setNote(note) self.ignore_sub_junk(2) else: @@ -620,7 +624,7 @@ class GedcomParser: self.parse_residence(addr,2) elif matches[1] == "ADDR": addr = Address() - addr.setStreet(matches[2] + self.parse_continue_data()) + addr.setStreet(matches[2] + self.parse_continue_data(1)) self.parse_address(addr,2) self.person.addAddress(addr) elif matches[1] == "BIRT": @@ -697,7 +701,7 @@ class GedcomParser: return note elif matches[1] == "NOTE": if not string.strip(matches[2]) or matches[2] and matches[2][0] != "@": - note = matches[2] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) self.parse_note_data(level+1) else: self.ignore_sub_junk(level+1) @@ -719,7 +723,7 @@ class GedcomParser: type = matches[1] elif matches[1] == "NOTE": if not string.strip(matches[2]) or matches[2] and matches[2][0] != "@": - note = matches[2] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) self.parse_note_data(level+1) else: self.ignore_sub_junk(level+1) @@ -740,7 +744,7 @@ class GedcomParser: elif matches[1] == "FILE": file = matches[2] elif matches[1] == "NOTE": - note = matches[2] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) elif matches[1][0] == "_": self.ignore_sub_junk(level+1) elif int(matches[0]) < level: @@ -782,7 +786,7 @@ class GedcomParser: elif matches[1] == "FILE": file = matches[2] elif matches[1] == "NOTE": - note = matches[2] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) elif int(matches[0]) < level: self.backup() break @@ -817,7 +821,7 @@ class GedcomParser: elif matches[1] == "FILE": file = matches[2] elif matches[1] == "NOTE": - note = matches[2] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) elif int(matches[0]) < level: self.backup() break @@ -848,7 +852,7 @@ class GedcomParser: elif matches[1] == "DATE": address.setDateObj(self.extract_date(matches[2])) elif matches[1] == "ADDR": - address.setStreet(matches[2] + self.parse_continue_data()) + address.setStreet(matches[2] + self.parse_continue_data(level+1)) self.parse_address(address,level+1) elif matches[1] in ["AGE","AGNC","CAUS","STAT","TEMP","OBJE","TYPE"]: self.ignore_sub_junk(level+1) @@ -864,7 +868,7 @@ class GedcomParser: pass elif matches[1] == "NOTE": if not string.strip(matches[2]) or matches[2] and matches[2][0] != "@": - note = matches[1] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) address.setNote(note) self.ignore_sub_junk(2) else: @@ -886,7 +890,7 @@ class GedcomParser: return elif matches[1] in [ "ADDR", "ADR1", "ADR2" ]: val = address.getStreet() - data = self.parse_continue_data() + data = self.parse_continue_data(level+1) if first == 0: val = "%s %s" % (matches[2],data) first = 1 @@ -953,7 +957,7 @@ class GedcomParser: s = self.db.findSource(ref,self.smap) source_ref.setBase(s) s.setTitle('Imported Source #%d' % self.localref) - s.setNote(matches[2] + self.parse_continue_data()) + s.setNote(matches[2] + self.parse_continue_data(level+1)) self.ignore_sub_junk(2) else: source_ref.setBase(self.db.findSource(matches[2],self.smap)) @@ -976,11 +980,11 @@ class GedcomParser: event.setPlace(place) self.ignore_sub_junk(level+1) elif matches[1] == "CAUS": - info = matches[2] + self.parse_continue_data() + info = matches[2] + self.parse_continue_data(level+1) event.setCause(info) self.parse_cause(event,level+1) elif matches[1] == "NOTE": - info = matches[2] + self.parse_continue_data() + info = matches[2] + self.parse_continue_data(level+1) if note == "": note = info else: @@ -993,6 +997,8 @@ class GedcomParser: event.setDescription("%s%s" % (d, matches[2])) elif matches[1] == "CONT": event.setDescription("%s\n%s" % (event.getDescription(),matches[2])) + elif matches[1] == "RELI": + self.ignore_sub_junk(level+1) else: self.barf(level+1) @@ -1017,7 +1023,7 @@ class GedcomParser: s = self.db.findSource(ref,self.smap) source_ref.setBase(s) s.setTitle('Imported Source #%d' % self.localref) - s.setNote(matches[2] + self.parse_continue_data()) + s.setNote(matches[2] + self.parse_continue_data(1)) self.ignore_sub_junk(2) else: source_ref.setBase(self.db.findSource(matches[2],self.smap)) @@ -1049,11 +1055,11 @@ class GedcomParser: # eventually do something intelligent here pass elif matches[1] == "CAUS": - info = matches[2] + self.parse_continue_data() + info = matches[2] + self.parse_continue_data(level+1) event.setCause(info) self.parse_cause(event,level+1) elif matches[1] == "NOTE": - info = matches[2] + self.parse_continue_data() + info = matches[2] + self.parse_continue_data(level+1) if note == "": note = info else: @@ -1114,7 +1120,7 @@ class GedcomParser: s = self.db.findSource(ref,self.smap) source_ref.setBase(s) s.setTitle('Imported Source #%d' % self.localref) - s.setNote(matches[2] + self.parse_continue_data()) + s.setNote(matches[2] + self.parse_continue_data(level+1)) self.ignore_sub_junk(2) else: source_ref.setBase(self.db.findSource(matches[2],self.smap)) @@ -1128,7 +1134,7 @@ class GedcomParser: elif matches[1] == "DATE": note = "%s\n\n" % ("Date : %s" % matches[2]) elif matches[1] == "NOTE": - info = matches[2] + self.parse_continue_data() + info = matches[2] + self.parse_continue_data(level+1) if note == "": note = info else: @@ -1160,10 +1166,10 @@ class GedcomParser: elif matches[1] == "DATE": event.setDateObj(self.extract_date(matches[2])) elif matches[1] == "CAUS": - info = matches[2] + self.parse_continue_data() + info = matches[2] + self.parse_continue_data(level+1) event.setCause(info) self.parse_cause(event,level+1) - elif matches[1] in ["TIME","AGE","AGNC","ADDR","STAT","TEMP","HUSB","WIFE","OBJE"]: + elif matches[1] in ["TIME","AGE","AGNC","ADDR","STAT","TEMP","HUSB","WIFE","OBJE","_CHUR"]: self.ignore_sub_junk(level+1) elif matches[1] == "SOUR": source_ref = SourceRef() @@ -1172,7 +1178,7 @@ class GedcomParser: ref = "gsr%d" % self.localref s = self.db.findSource(ref,self.smap) source_ref.setBase(s) - note = matches[2] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) s.setTitle('Imported Source #%d' % self.localref) s.setNote(note) self.ignore_sub_junk(2) @@ -1193,7 +1199,7 @@ class GedcomParser: self.ignore_sub_junk(level+1) elif matches[1] == "NOTE": if not string.strip(matches[2]) or matches[2] and matches[2][0] != "@": - note = matches[1] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) event.setNote(note) self.ignore_sub_junk(2) else: @@ -1215,14 +1221,14 @@ class GedcomParser: self.backup() return elif matches[1] == "PAGE": - source.setPage(matches[2] + self.parse_continue_data()) + source.setPage(matches[2] + self.parse_continue_data(level+1)) elif matches[1] == "DATA": date,text = self.parse_source_data(level+1) d = Date.Date() d.set(date) source.setDate(d) source.setText(text) - elif matches[1] == "OBJE": + elif matches[1] in ["OBJE","REFN","TEXT"]: self.ignore_sub_junk(level+1) elif matches[1] == "QUAY": val = int(matches[2]) @@ -1232,7 +1238,7 @@ class GedcomParser: source.setConfidence(val) elif matches[1] == "NOTE": if not string.strip(matches[2]) or matches[2] and matches[2][0] != "@": - note = matches[1] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) source.setComments(note) self.ignore_sub_junk(2) else: @@ -1259,7 +1265,7 @@ class GedcomParser: date = matches[2] elif matches[1] == "TEXT": - note = matches[2] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) else: self.barf(level+1) @@ -1271,15 +1277,18 @@ class GedcomParser: if int(matches[0]) < level: self.backup() return - elif matches[1] == "ALIA": + elif matches[1] in ["ALIA","_ALIA"]: aka = Name() - names = nameRegexp.match(matches[2]).groups() + try: + names = nameRegexp.match(matches[2]).groups() + except: + names = (matches[2],"","","","") if names[0]: aka.setFirstName(names[0]) - if names[1]: - aka.setSurname(names[1]) if names[2]: - aka.setSuffix(names[2]) + aka.setSurname(names[2]) + if names[4]: + aka.setSuffix(names[4]) self.person.addAlternateName(aka) elif matches[1] == "NPFX": name.setTitle(matches[2]) @@ -1313,7 +1322,7 @@ class GedcomParser: self.parse_source_reference(source_ref,level+1) elif matches[1][0:4] == "NOTE": if matches[2] and matches[2][0] != "@": - note = matches[2] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(level+1) name.setNote(note) self.ignore_sub_junk(2) else: @@ -1380,7 +1389,7 @@ class GedcomParser: date = self.parse_date(2) date.date = matches[2] elif matches[1] == "NOTE": - note = matches[2] + self.parse_continue_data() + note = matches[2] + self.parse_continue_data(2) elif matches[1][0] == "_": self.ignore_sub_junk(2) else: @@ -1460,12 +1469,15 @@ class GedcomParser: elif matches[1] != "FORM": self.barf(level+1) - def parse_continue_data(self): + def parse_continue_data(self,level): data = "" while 1: matches = self.get_next() - if matches[1] == "CONC": + if int(matches[0]) < level: + self.backup() + return data + elif matches[1] == "CONC": if self.broken_conc: data = "%s %s" % (data,matches[2]) else: diff --git a/gramps/src/plugins/RelCalc.py b/gramps/src/plugins/RelCalc.py index 5717e2eec..838f19517 100644 --- a/gramps/src/plugins/RelCalc.py +++ b/gramps/src/plugins/RelCalc.py @@ -222,6 +222,9 @@ def runTool(database,person,callback): # #------------------------------------------------------------------------- class RelCalc: + """ + Relationship calculator class. + """ def __init__(self,database,person): self.person = person