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
-
- 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
+
+ Sat, 01 Dec 2001 04:25:20 GMT
+
+ True
+ True
+ 0
+
+
+
-
- GtkEntry
- GtkCombo:entry
- entry3
- True
-
- insert_text
- on_combo_insert_text
-
- 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
+
+ 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
+
+ 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
-
- 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
+
+ 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
+
+ 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
+
+ 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
+
+ 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
+
+ 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
+
+ Sat, 01 Dec 2001 04:26:04 GMT
+
+ True
+ True
+ 0
+
+
+
+
+
+ GtkButton
+ button133
+ True
+
+ clicked
+ on_ldsseal_src_clicked
+
+ 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
+
+ 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
+
+ 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