diff --git a/ChangeLog b/ChangeLog index 0c755410d..223238da1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-11-26 Don Allingham + * src/DisplayModels.py: fix Source column display + * src/GrampsDbBase.py: change default display columns + * src/ReadGedcom.py: Add default source for a GEDCOM import, + attach it to a person that has no attached sources. + 2004-11-25 Alex Roitman * src/RecentFiles.py: Make robust to parse/save problems. * src/DbPrompter.py: Support for recent-files on new db creation. diff --git a/src/DisplayModels.py b/src/DisplayModels.py index 90e0a0282..f7c755240 100644 --- a/src/DisplayModels.py +++ b/src/DisplayModels.py @@ -244,13 +244,13 @@ class SourceModel(BaseModel): return unicode(data[3]) def column_abbrev(self,data): - return unicode(data[4]) + return unicode(data[7]) def column_id(self,data): return unicode(data[1]) def column_pubinfo(self,data): - return unicode(data[5]) + return unicode(data[4]) def column_change(self,data): return unicode(time.asctime(time.localtime(data[8]))) diff --git a/src/GrampsDbBase.py b/src/GrampsDbBase.py index ca34ed838..6174be85e 100644 --- a/src/GrampsDbBase.py +++ b/src/GrampsDbBase.py @@ -1103,7 +1103,7 @@ class GrampsDbBase: Returns the Source display common information stored in the database's metadata. """ - default = [(1,1),(1,2),(1,3),(0,4),(0,5)] + default = [(1,1),(1,2),(0,3),(1,4),(0,5)] if self.metadata == None: return default else: diff --git a/src/ReadGedcom.py b/src/ReadGedcom.py index e4d3cf90b..1780403c4 100644 --- a/src/ReadGedcom.py +++ b/src/ReadGedcom.py @@ -244,6 +244,7 @@ class GedcomParser: self.added = {} self.gedmap = GedcomInfoDB() self.gedsource = None + self.def_src = RelLib.Source() self.dir_path = os.path.dirname(file) self.localref = 0 self.placemap = {} @@ -449,6 +450,7 @@ class GedcomParser: try: self.parse_header() self.parse_submitter() + self.db.add_source(self.def_src,self.trans) self.parse_record() self.parse_trailer() except Errors.GedcomError, err: @@ -479,7 +481,6 @@ class GedcomParser: def parse_trailer(self): matches = self.get_next() - if matches[1] != "TRLR": self.barf(0) self.f.close() @@ -490,12 +491,22 @@ class GedcomParser: def parse_submitter(self): matches = self.get_next() - if matches[2] != "SUBM": self.backup() return else: - self.ignore_sub_junk(1) + self.parse_submitter_data(1) + + def parse_submitter_data(self,level): + while(1): + matches = self.get_next() + if int(matches[0]) < level: + self.backup() + return + elif matches[1] == "NAME": + self.def_src.set_author(unicode(matches[2])) + elif matches[1] == ["ADDR"]: + self.ignore_sub_junk(level+1) def parse_source(self,name,level): self.source = self.find_or_create_source(name[1:-1]) @@ -580,6 +591,10 @@ class GedcomParser: self.person = self.find_or_create_person(self.map_gid(gid)) self.added[self.person.get_handle()] = 1 self.parse_individual() + if len(self.person.get_source_references()) == 0: + sref = RelLib.SourceRef() + sref.set_base_handle(self.def_src.get_handle()) + self.person.add_source_reference(sref) self.db.commit_person(self.person, self.trans) del self.person elif matches[2] in ["SUBM","SUBN","REPO"]: @@ -1621,9 +1636,16 @@ class GedcomParser: elif matches[1] == "NAME" and self.window: self.update(self.created_obj,matches[2]) elif matches[1] == "VERS" and self.window: + self.def_src.set_data_item('Generated by',"%s %s" % + (genby,matches[2])) self.update(self.version_obj,matches[2]) pass - elif matches[1] in ["CORP","DATA","SUBM","SUBN","COPR","FILE","LANG"]: + elif matches[1] == "FILE": + filename = os.path.basename(matches[2]).split('\\')[-1] + self.def_src.set_title(unicode(filename)) + elif matches[1] == "COPR": + self.def_src.set_publication_info(unicode(matches[2])) + elif matches[1] in ["CORP","DATA","SUBM","SUBN","LANG"]: self.ignore_sub_junk(2) elif matches[1] == "DEST": if genby == "GRAMPS": @@ -1650,6 +1672,7 @@ class GedcomParser: elif matches[1] == "DATE": date = self.parse_date(2) date.date = matches[2] + self.def_src.set_data_item('Creation date',unicode(matches[2])) elif matches[1] == "NOTE": note = matches[2] + self.parse_continue_data(2) elif matches[1][0] == "_":