From e50e33cba6e6ff5ac12fcb53a80e81a1e0b133c9 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Fri, 20 Aug 2004 02:20:06 +0000 Subject: [PATCH] * src/AutoComp.py: remove double display of data * src/FamilyView.py: remove unused check * src/GrampsBSDDB.py: search by gramps_id * src/GrampsDbBase.py: search by gramps_id, unicode/str conversions * src/Marriage.py: handle gramps_id editing * src/ReadXML.py: fix handle/gramps_id on import * src/plugins/RelCalc.py: display date instead of event handle * src/Relationship.py: family handles working * src/PeopleModel.py: comment out unused functions * src/PeopleModel.py: simplify model interface * src/AddSpouse.py: get_family_from_handle fixes * src/EditPerson.py: get_family_from_handle fixes * src/EditSource.py: get_family_from_handle fixes * src/GraphLayout.py: get_family_from_handle fixes * src/ImageSelect.py: get_family_from_handle fixes * src/MediaView.py: get_family_from_handle fixes * src/MergeData.py: get_family_from_handle fixes * src/PlaceView.py: get_family_from_handle fixes * src/ReadXML.py: get_family_from_handle fixes * src/RelLib.py: get_family_from_handle fixes * src/Relationship.py: get_family_from_handle fixes * src/SelectChild.py: get_family_from_handle fixes * src/SourceView.py: get_family_from_handle fixes * src/SubstKeywords.py: get_family_from_handle fixes * src/WriteXML.py: get_family_from_handle fixes * src/gramps_main.py: get_family_from_handle fixes svn: r3446 --- gramps2/ChangeLog | 43 ++++++----- gramps2/src/AutoComp.py | 19 +++-- gramps2/src/FamilyView.py | 2 - gramps2/src/GrampsBSDDB.py | 32 +++++++++ gramps2/src/GrampsDbBase.py | 90 ++++++++++++----------- gramps2/src/Marriage.py | 13 ++-- gramps2/src/PeopleModel.py | 126 ++++++++++++++++----------------- gramps2/src/ReadXML.py | 45 +++++++++--- gramps2/src/RelLib.py | 8 --- gramps2/src/Relationship.py | 4 +- gramps2/src/plugins/RelCalc.py | 3 +- 11 files changed, 219 insertions(+), 166 deletions(-) diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index e44728604..5b87c0ae5 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,21 +1,30 @@ 2004-08-19 Don Allingham - * PeopleModel.py: simplify model interface - * AddSpouse.py: get_family_from_handle fixes - * EditPerson.py: get_family_from_handle fixes - * EditSource.py: get_family_from_handle fixes - * GraphLayout.py: get_family_from_handle fixes - * ImageSelect.py: get_family_from_handle fixes - * MediaView.py: get_family_from_handle fixes - * MergeData.py: get_family_from_handle fixes - * PlaceView.py: get_family_from_handle fixes - * ReadXML.py: get_family_from_handle fixes - * RelLib.py: get_family_from_handle fixes - * Relationship.py: get_family_from_handle fixes - * SelectChild.py: get_family_from_handle fixes - * SourceView.py: get_family_from_handle fixes - * SubstKeywords.py: get_family_from_handle fixes - * WriteXML.py: get_family_from_handle fixes - * gramps_main.py: get_family_from_handle fixes + * src/AutoComp.py: remove double display of data + * src/FamilyView.py: remove unused check + * src/GrampsBSDDB.py: search by gramps_id + * src/GrampsDbBase.py: search by gramps_id, unicode/str conversions + * src/Marriage.py: handle gramps_id editing + * src/ReadXML.py: fix handle/gramps_id on import + * src/plugins/RelCalc.py: display date instead of event handle + * src/Relationship.py: family handles working + * src/PeopleModel.py: comment out unused functions + * src/PeopleModel.py: simplify model interface + * src/AddSpouse.py: get_family_from_handle fixes + * src/EditPerson.py: get_family_from_handle fixes + * src/EditSource.py: get_family_from_handle fixes + * src/GraphLayout.py: get_family_from_handle fixes + * src/ImageSelect.py: get_family_from_handle fixes + * src/MediaView.py: get_family_from_handle fixes + * src/MergeData.py: get_family_from_handle fixes + * src/PlaceView.py: get_family_from_handle fixes + * src/ReadXML.py: get_family_from_handle fixes + * src/RelLib.py: get_family_from_handle fixes + * src/Relationship.py: get_family_from_handle fixes + * src/SelectChild.py: get_family_from_handle fixes + * src/SourceView.py: get_family_from_handle fixes + * src/SubstKeywords.py: get_family_from_handle fixes + * src/WriteXML.py: get_family_from_handle fixes + * src/gramps_main.py: get_family_from_handle fixes * plugins/AncestorChart.py: get_family_from_handle fixes * plugins/AncestorChart2.py: get_family_from_handle fixes * plugins/AncestorReport.py: get_family_from_handle fixes diff --git a/gramps2/src/AutoComp.py b/gramps2/src/AutoComp.py index 284f32b55..9ca54a452 100644 --- a/gramps2/src/AutoComp.py +++ b/gramps2/src/AutoComp.py @@ -44,7 +44,6 @@ def fill_combo(combo,data_list): def fill_entry(entry,data_list): store = gtk.ListStore(gobject.TYPE_STRING) - for data in data_list: store.append(row=[data]) @@ -55,15 +54,13 @@ def fill_entry(entry,data_list): entry.set_completion(completion) def fill_option_text(combobox,data): - store = gtk.ListStore(gobject.TYPE_STRING) - cell = gtk.CellRendererText() - combobox.pack_start(cell,gtk.TRUE) - combobox.add_attribute(cell,'text',0) - for item in data: - store.append(row=[item]) - combobox.set_model(store) - combobox.set_active(0) + store = gtk.ListStore(gobject.TYPE_STRING) + cell = gtk.CellRendererText() + for item in data: + store.append(row=[item]) + combobox.set_model(store) + combobox.set_active(0) def get_option(combobox): - store = combobox.get_model() - return store.get_value(combobox.get_active_iter(),0) + store = combobox.get_model() + return store.get_value(combobox.get_active_iter(),0) diff --git a/gramps2/src/FamilyView.py b/gramps2/src/FamilyView.py index 2874a089f..3505e2795 100644 --- a/gramps2/src/FamilyView.py +++ b/gramps2/src/FamilyView.py @@ -907,8 +907,6 @@ class FamilyView: flist = {} for f in splist: - if not f: - continue fm = self.parent.db.get_family_from_handle(f) if fm.get_father_handle() == self.person.get_handle(): diff --git a/gramps2/src/GrampsBSDDB.py b/gramps2/src/GrampsBSDDB.py index 211a40024..a61d1318e 100644 --- a/gramps2/src/GrampsBSDDB.py +++ b/gramps2/src/GrampsBSDDB.py @@ -32,6 +32,9 @@ def find_surname(key,data): def find_idmap(key,data): return str(data[1]) +def find_fidmap(key,data): + return str(data[1]) + def find_eventname(key,data): return str(data[1]) @@ -76,11 +79,16 @@ class GrampsBSDDB(GrampsDbBase): self.id_trans.set_flags(db.DB_DUP) self.id_trans.open(name, "idtrans", db.DB_HASH, flags=db.DB_CREATE) + self.fid_trans = db.DB(self.env) + self.fid_trans.set_flags(db.DB_DUP) + self.fid_trans.open(name, "fidtrans", db.DB_HASH, flags=db.DB_CREATE) + self.eventnames = db.DB(self.env) self.eventnames.set_flags(db.DB_DUP) self.eventnames.open(name, "eventnames", db.DB_HASH, flags=db.DB_CREATE) self.person_map.associate(self.surnames, find_surname, db.DB_CREATE) self.person_map.associate(self.id_trans, find_idmap, db.DB_CREATE) + self.person_map.associate(self.fid_trans, find_fidmap, db.DB_CREATE) self.event_map.associate(self.eventnames, find_eventname, db.DB_CREATE) self.undodb = db.DB() @@ -106,6 +114,7 @@ class GrampsBSDDB(GrampsDbBase): self.surnames.close() self.eventnames.close() self.id_trans.close() + self.fid_trans.close() self.env.close() self.undodb.close() @@ -167,3 +176,26 @@ class GrampsBSDDB(GrampsDbBase): transaction.add(EVENT_KEY,handle,old_data) self.event_map.delete(str(handle)) + def get_person_from_gramps_id(self,val): + """finds a Person in the database from the passed gramps' ID. + If no such Person exists, a new Person is added to the database.""" + + data = self.id_trans.get(str(val)) + if data: + person = Person() + person.unserialize(cPickle.loads(data)) + return person + else: + return None + + def get_family_from_gramps_id(self,val): + """finds a Person in the database from the passed gramps' ID. + If no such Person exists, a new Person is added to the database.""" + + data = self.fid_trans.get(str(val)) + if data: + family = Family() + family.unserialize(cPickle.loads(data)) + return family + else: + return None diff --git a/gramps2/src/GrampsDbBase.py b/gramps2/src/GrampsDbBase.py index 7bcca3546..b7f8259c1 100644 --- a/gramps2/src/GrampsDbBase.py +++ b/gramps2/src/GrampsDbBase.py @@ -106,14 +106,14 @@ class GrampsDbBase: Opens the specified database. The method needs to be overridden in the derived class. """ - assert(0,"Needs to be overridden in the derived class") + assert(False,"Needs to be overridden in the derived class") def close(self): """ Closes the specified database. The method needs to be overridden in the derived class. """ - assert(0,"Needs to be overridden in the derived class") + assert(False,"Needs to be overridden in the derived class") def is_open(self): """ @@ -126,7 +126,7 @@ class GrampsDbBase: Commits the specified Person to the database, storing the changes as part of the transaction. """ - handle = person.get_handle() + handle = str(person.get_handle()) if transaction != None: old_data = self.person_map.get(handle) transaction.add(PERSON_KEY,handle,old_data) @@ -141,7 +141,7 @@ class GrampsDbBase: if transaction != None: old_data = self.media_map.get(handle) transaction.add(MEDIA_KEY,handle,old_data) - self.media_map[str(obj.get_handle())] = obj.serialize() + self.media_map[handle] = obj.serialize() def commit_source(self,source,transaction): """ @@ -152,7 +152,7 @@ class GrampsDbBase: if transaction != None: old_data = self.source_map.get(handle) transaction.add(SOURCE_KEY,handle,old_data) - self.source_map[str(source.get_handle())] = source.serialize() + self.source_map[handle] = source.serialize() def commit_place(self,place,transaction): """ @@ -163,7 +163,7 @@ class GrampsDbBase: if transaction != None: old_data = self.place_map.get(handle) transaction.add(PLACE_KEY,handle,old_data) - self.place_map[str(place.get_handle())] = place.serialize() + self.place_map[handle] = place.serialize() def commit_event(self,event,transaction): """ @@ -174,7 +174,7 @@ class GrampsDbBase: if transaction != None: old_data = self.event_map.get(handle) transaction.add(EVENT_KEY,handle,old_data) - self.event_map[str(event.get_handle())] = event.serialize() + self.event_map[handle] = event.serialize() def commit_family(self,family,transaction): """ @@ -185,7 +185,7 @@ class GrampsDbBase: if transaction != None: old_data = self.family_map.get(handle) transaction.add(FAMILY_KEY,handle,old_data) - self.family_map[str(family.get_handle())] = family.serialize() + self.family_map[handle] = family.serialize() def find_next_person_gramps_id(self): """ @@ -263,7 +263,7 @@ class GrampsDbBase: """finds a Person in the database from the passed gramps' ID. If no such Person exists, a new Person is added to the database.""" - data = self.person_map.get(val) + data = self.person_map.get(str(val)) if data: person = Person() person.unserialize(data) @@ -336,7 +336,7 @@ class GrampsDbBase: person.set_handle(val) if transaction != None: transaction.add(PERSON_KEY, val, None) - self.person_map[val] = person.serialize() + self.person_map[str(val)] = person.serialize() self.genderStats.count_person (person, self) return person @@ -390,7 +390,7 @@ class GrampsDbBase: data = self.place_map.get(str(handle)) place = Place() if not data: - place.handle = handle + place.set_handle(handle) if transaction != None: transaction.add(PLACE_KEY,handle,None) self.place_map[str(handle)] = place.serialize() @@ -408,13 +408,37 @@ class GrampsDbBase: if data: family.unserialize(data) else: - family.handle = val + family.set_handle(val) if transaction: transaction.add(FAMILY_KEY,val,None) self.family_map[str(val)] = family.serialize() self.fmap_index = self.fmap_index + 1 return family + def get_person_from_gramps_id(self,val): + """ + Finds a Person in the database from the passed GRAMPS ID. + If no such Person exists, None is returned. + + Needs to be overridden by the derrived class. + """ + data = self.id_trans.get(str(val)) + if data: + person = Person() + person.unserialize(cPickle.loads(data)) + return person + else: + return None + + def get_family_from_gramps_id(self,val): + """ + Finds a Family in the database from the passed GRAMPS ID. + If no such Family exists, None is returned. + + Needs to be overridden by the derrived class. + """ + assert(False,"Needs to be overridden in the derived class") + def add_person(self,person,transaction): """ Adds a Person to the database, assigning internal IDs if they have @@ -906,49 +930,23 @@ class GrampsDbBase: """ return self.media_map.has_key(str(handle)) != None - def get_person_from_gramps_id(self,val): - """finds a Person in the database from the passed gramps' ID. - If no such Person exists, a new Person is added to the database.""" - - data = self.id_trans.get(str(val)) - if data: - person = Person() - person.unserialize(cPickle.loads(data)) - return person - else: - return None - - def find_person_from_gramps_id(self,val,transaction): - """finds a Person in the database from the passed gramps' ID. - If no such Person exists, a new Person is added to the database.""" - - person = Person() - data = self.id_trans.get(str(val)) - if data: - person.unserialize(cPickle.loads(data)) - else: - intid = Utils.create_id() - person.set_handle(intid) - person.set_gramps_id(val) - self.add_person(person,transaction) - return person - def _sortbyname(self,f,s): - n1 = self.person_map.get(f)[2].sname - n2 = self.person_map.get(s)[2].sname + n1 = self.person_map.get(str(f))[2].sname + n2 = self.person_map.get(str(s))[2].sname return cmp(n1,n2) def _sortbyplace(self,f,s): - return cmp(self.place_map.get(f)[2].upper(), self.place_map.get(s)[2].upper()) + return cmp(self.place_map.get(str(f))[2].upper(), + self.place_map.get(str(s))[2].upper()) def _sortbysource(self,f,s): - fp = self.source_map[f][2].upper() - sp = self.source_map[s][2].upper() + fp = self.source_map[str(f)][2].upper() + sp = self.source_map[str(s)][2].upper() return cmp(fp,sp) def _sortbymedia(self,f,s): - fp = self.media_map[f][4].upper() - sp = self.media_map[s][4].upper() + fp = self.media_map[str(f)][4].upper() + sp = self.media_map[str(s)][4].upper() return cmp(fp,sp) def set_person_column_order(self,list): diff --git a/gramps2/src/Marriage.py b/gramps2/src/Marriage.py index c5c4fa521..dbfb8171a 100644 --- a/gramps2/src/Marriage.py +++ b/gramps2/src/Marriage.py @@ -199,7 +199,7 @@ class Marriage: frel = family.get_relationship() self.type_field.set_active(frel) - self.gid.set_text(family.get_handle()) + self.gid.set_text(family.get_gramps_id()) self.gid.set_editable(1) AutoComp.fill_combo(self.lds_temple,_temple_names) @@ -556,6 +556,9 @@ class Marriage: else: self.close(0) + def save(self): + self.on_close_marriage_editor(None) + def on_delete_event(self,obj,b): self.on_cancel_edit(obj) @@ -565,11 +568,9 @@ class Marriage: idval = unicode(self.gid.get_text()) family = self.family - if idval != family.get_handle(): - if not self.db.has_family_handle(idval): - if self.db.has_family_handle(family.get_handle()): - self.db.remove_family_handle(family.get_handle(),trans) - family.set_handle(idval) + if idval != family.get_gramps_id(): + if not self.db.get_family_from_gramps_id(idval): + family.set_gramps_id(idval) else: WarningDialog(_("GRAMPS ID value was not changed."), _('The GRAMPS ID that you chose for this ' diff --git a/gramps2/src/PeopleModel.py b/gramps2/src/PeopleModel.py index 6f0841d64..4403300a8 100644 --- a/gramps2/src/PeopleModel.py +++ b/gramps2/src/PeopleModel.py @@ -97,31 +97,8 @@ class PeopleModel(gtk.GenericTreeModel): else: self.rebuild_data() - self.connect('row-deleted',self.on_row_deleted) - self.connect('row-inserted',self.on_row_inserted) - - def on_row_inserted(self,model,path,iter): - pass - - def on_row_deleted(self,model,path): - surname = self.top_path2iter[path[0]] - pid = self.path2iter[(surname,path[1])] - - for idval in self.sname_sub[surname]: - key = self.iter2path[idval] - del self.iter2path[idval] - del self.path2iter[key] - self.sname_sub[surname].remove(pid) - - val = 0 - entries = self.sname_sub[surname] - entries.sort(self.byname) - for person_handle in entries: - tpl = (surname,val) - self.iter2path[person_handle] = tpl - self.path2iter[tpl] = person_handle - val += 1 - return 0 +# self.connect('row-deleted',self.on_row_deleted) +# self.connect('row-inserted',self.on_row_inserted) def rebuild_data(self): self.top_path2iter = [] @@ -165,44 +142,6 @@ class PeopleModel(gtk.GenericTreeModel): self.path2iter, self.sname_sub) - def add_person(self,person): - pid = person.get_handle() - need = 0 - surname = person.get_primary_name().get_surname() - if self.sname_sub.has_key(surname): - self.sname_sub[surname].append(pid) - else: - self.sname_sub[surname] = [pid] - - inscol = 0 - sval = 0 - name_list = self.db.get_surname_list() - for name in name_list: - if self.sname_sub.has_key(name): - self.top_path2iter[sval] = name - if name == surname: - inscol = (sval,) - need = 1 - sval += 1 - - column = 0 - val = 0 - entries = self.sname_sub[surname] - entries.sort(self.byname) - for person_handle in entries: - tpl = (surname,val) - self.iter2path[person_handle] = tpl - self.path2iter[tpl] = person_handle - if person_handle == pid: - column = val - val += 1 - - col = self.top_path2iter.index(surname) - mypath = (col[0],column) - if need: - self.row_inserted(inscol,self.get_iter(inscol)) - self.row_inserted(mypath,self.get_iter(mypath)) - def byname(self,f,s): n1 = self.db.person_map.get(str(f))[_NAME_COL].get_sort_name() n2 = self.db.person_map.get(str(s))[_NAME_COL].get_sort_name() @@ -384,4 +323,65 @@ class PeopleModel(gtk.GenericTreeModel): return self.db.get_place_from_handle(place_handle).get_title() return u"" +# def add_person(self,person): +# pid = person.get_handle() +# need = 0 +# surname = person.get_primary_name().get_surname() +# if self.sname_sub.has_key(surname): +# self.sname_sub[surname].append(pid) +# else: +# self.sname_sub[surname] = [pid] + +# inscol = 0 +# sval = 0 +# name_list = self.db.get_surname_list() +# for name in name_list: +# if self.sname_sub.has_key(name): +# self.top_path2iter[sval] = name +# if name == surname: +# inscol = (sval,) +# need = 1 +# sval += 1 + +# column = 0 +# val = 0 +# entries = self.sname_sub[surname] +# entries.sort(self.byname) +# for person_handle in entries: +# tpl = (surname,val) +# self.iter2path[person_handle] = tpl +# self.path2iter[tpl] = person_handle +# if person_handle == pid: +# column = val +# val += 1 + +# col = self.top_path2iter.index(surname) +# mypath = (col[0],column) +# if need: +# self.row_inserted(inscol,self.get_iter(inscol)) +# self.row_inserted(mypath,self.get_iter(mypath)) + +# def on_row_inserted(self,model,path,iter): +# pass + +# def on_row_deleted(self,model,path): +# surname = self.top_path2iter[path[0]] +# pid = self.path2iter[(surname,path[1])] + +# for idval in self.sname_sub[surname]: +# key = self.iter2path[idval] +# del self.iter2path[idval] +# del self.path2iter[key] +# self.sname_sub[surname].remove(pid) + +# val = 0 +# entries = self.sname_sub[surname] +# entries.sort(self.byname) +# for person_handle in entries: +# tpl = (surname,val) +# self.iter2path[person_handle] = tpl +# self.path2iter[tpl] = person_handle +# val += 1 +# return 0 + _GENDER = [ _(u'female'), _(u'male'), _(u'unknown') ] diff --git a/gramps2/src/ReadXML.py b/gramps2/src/ReadXML.py index 84cba8af2..966c6e9fa 100644 --- a/gramps2/src/ReadXML.py +++ b/gramps2/src/ReadXML.py @@ -278,6 +278,7 @@ class GrampsParser: self.tlist = [] self.conf = 2 self.gid2id = {} + self.gid2fid = {} self.ord = None self.objref = None @@ -329,6 +330,7 @@ class GrampsParser: self.func = None self.witness_comment = "" self.idswap = {} + self.fidswap = {} self.func_map = { "address" : (self.start_address, self.stop_address), @@ -414,26 +416,47 @@ class GrampsParser: } def find_person_by_gramps_id(self,gramps_id): - person = RelLib.Person() intid = self.gid2id.get(gramps_id) if intid: - person.unserialize(self.db.person_map.get(intid)) + person = self.db.get_person_from_handle(intid) else: intid = Utils.create_id() + person = RelLib.Person() person.set_handle(intid) person.set_gramps_id(gramps_id) self.db.add_person(person,self.trans) self.gid2id[gramps_id] = intid return person + def find_family_by_gramps_id(self,gramps_id): + intid = self.gid2fid.get(gramps_id) + if intid: + family = self.db.get_family_from_handle(intid) + else: + intid = Utils.create_id() + family = RelLib.Family() + family.set_handle(intid) + family.set_gramps_id(gramps_id) + self.db.add_family(family,self.trans) + self.gid2fid[gramps_id] = intid + return family + def map_gid(self,id): if not self.idswap.get(id): - if self.db.id_trans.get(str(id)): + if self.db.get_person_from_gramps_id(id): self.idswap[id] = self.db.find_next_person_gramps_id() else: self.idswap[id] = id return self.idswap[id] + def map_fid(self,id): + if not self.fidswap.get(id): + if self.db.get_family_from_gramps_id(id): + self.fidswap[id] = self.db.find_next_family_gramps_id() + else: + self.fidswap[id] = id + return self.fidswap[id] + def parse(self,file): self.trans = self.db.transaction_begin() p = xml.parsers.expat.ParserCreate() @@ -444,7 +467,7 @@ class GrampsParser: self.db.set_researcher(self.owner) if self.tempDefault != None: - id = self.tempDefault + id = self.map_gid(self.tempDefault) person = self.find_person_by_gramps_id(id) if person: self.db.set_default_person_handle(person.get_handle()) @@ -477,8 +500,8 @@ class GrampsParser: self.ord.set_status(int(attrs['val'])) def start_sealed_to(self,attrs): - id = self.map_gid(attrs['ref']) - self.ord.set_family_handle(self.db.find_family_from_handle(id,self.trans)) + id = self.map_fid(attrs['ref']) + self.ord.set_family_handle(self.find_family_by_gramps_id(id)) def start_place(self,attrs): self.placeobj = self.db.find_place_from_handle(attrs['ref'],self.trans) @@ -578,7 +601,8 @@ class GrampsParser: self.address.private = int(attrs["priv"]) def start_bmark(self,attrs): - person = self.find_person_by_gramps_id(self.map_gid(attrs["ref"])) + id = self.map_gid(attrs["ref"]) + person = self.find_person_by_gramps_id(id) self.db.bookmarks.append(person.get_handle()) def start_person(self,attrs): @@ -635,7 +659,7 @@ class GrampsParser: if self.callback != None and self.count % self.increment == 0: self.callback(float(self.count)/float(self.entries)) self.count = self.count + 1 - self.family = self.db.find_family_from_handle(attrs["id"],self.trans) + self.family = self.find_family_by_gramps_id(self.map_fid(attrs["id"])) if attrs.has_key("type"): self.family.set_relationship(_FAMILY_TRANS.get(attrs["type"], @@ -646,7 +670,7 @@ class GrampsParser: self.family.set_complete_flag(0) def start_childof(self,attrs): - family = self.db.find_family_from_handle(attrs["ref"],self.trans) + family = self.find_family_by_gramps_id(self.map_fid(attrs["ref"])) if attrs.has_key("mrel"): mrel = attrs["mrel"] else: @@ -658,7 +682,8 @@ class GrampsParser: self.person.add_parent_family_handle(family.get_handle(),mrel,frel) def start_parentin(self,attrs): - self.person.add_family_handle(attrs["ref"]) + family = self.find_family_by_gramps_id(self.map_fid(attrs["ref"])) + self.person.add_family_handle(family.get_handle()) def start_name(self,attrs): if not self.in_witness: diff --git a/gramps2/src/RelLib.py b/gramps2/src/RelLib.py index c184f087a..b98feb44b 100644 --- a/gramps2/src/RelLib.py +++ b/gramps2/src/RelLib.py @@ -502,14 +502,6 @@ class Person(PrimaryObject,SourceNote): else: return self.parent_family_list[0][0] - def get_main_parents_family_handle(self): - """returns the main Family of the Person, the Family in which the - Person is a natural born child""" - if len(self.parent_family_list) == 0: - return (None,None,None) - else: - return self.parent_family_list[0] - def set_lds_baptism(self,ord): """Sets the LDS Baptism ordinance""" self.lds_bapt = ord diff --git a/gramps2/src/Relationship.py b/gramps2/src/Relationship.py index a10638d1b..bfde4869f 100644 --- a/gramps2/src/Relationship.py +++ b/gramps2/src/Relationship.py @@ -170,8 +170,8 @@ class RelationshipCalculator: pmap[person.get_handle()] = index family_handle = person.get_main_parents_family_handle() - family = self.db.get_family_from_handle(family_handle) - if family != None: + if family_handle != None: + family = self.db.get_family_from_handle(family_handle) father = self.db.get_person_from_handle(family.get_father_handle()) mother = self.db.get_person_from_handle(family.get_mother_handle()) self.apply_filter(father,index+1,plist,pmap) diff --git a/gramps2/src/plugins/RelCalc.py b/gramps2/src/plugins/RelCalc.py index 1c25da924..cc12f6c7b 100644 --- a/gramps2/src/plugins/RelCalc.py +++ b/gramps2/src/plugins/RelCalc.py @@ -98,7 +98,8 @@ class RelCalc: if p == self.person: continue val = self.db.get_person_from_handle(key).get_display_info() - self.clist.add([val[0],val[1],val[3],val[5],val[6]],p.get_handle()) + event = self.db.find_event_from_handle(val[3]) + self.clist.add([val[0],val[1],event.get_date(),val[5],val[6]],p.get_handle()) self.clist.connect_model()