Improved the GEDCOM import
svn: r73
This commit is contained in:
parent
6666e24f41
commit
e4f6e7482c
@ -1573,7 +1573,6 @@ def on_filter_name_changed(obj):
|
|||||||
def on_spouselist_changed(obj):
|
def on_spouselist_changed(obj):
|
||||||
if active_person == None :
|
if active_person == None :
|
||||||
return
|
return
|
||||||
|
|
||||||
display_marriage(obj.get_data("family"))
|
display_marriage(obj.get_data("family"))
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
@ -45,9 +45,6 @@ db = None
|
|||||||
callback = None
|
callback = None
|
||||||
glade_file = None
|
glade_file = None
|
||||||
clear_data = 0
|
clear_data = 0
|
||||||
in_obje = 0
|
|
||||||
|
|
||||||
InvalidGedcom = "Invalid GEDCOM file"
|
|
||||||
|
|
||||||
ged2rel = {}
|
ged2rel = {}
|
||||||
for val in const.personalConstantEvents.keys():
|
for val in const.personalConstantEvents.keys():
|
||||||
@ -61,6 +58,14 @@ for val in const.familyConstantEvents.keys():
|
|||||||
if key != "":
|
if key != "":
|
||||||
ged2fam[key] = val
|
ged2fam[key] = val
|
||||||
|
|
||||||
|
lineRE = re.compile(r"\s*(\d+)\s+(\S+)\s*(.*)$")
|
||||||
|
nameRegexp = re.compile(r"([\S\s]*\S)?\s*/([^/]+)?/\s*,?\s*([\S]+)?")
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
def find_file(fullname,altpath):
|
def find_file(fullname,altpath):
|
||||||
if os.path.isfile(fullname):
|
if os.path.isfile(fullname):
|
||||||
return fullname
|
return fullname
|
||||||
@ -70,9 +75,6 @@ def find_file(fullname,altpath):
|
|||||||
else:
|
else:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
lineRE = re.compile(r"\s*(\d+)\s+(\S+)\s*(.*)$")
|
|
||||||
nameRegexp = re.compile(r"([\S\s]*\S)?\s*/([^/]+)?/\s*,?\s*([\S]+)?")
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
@ -90,12 +92,17 @@ def importData(database, filename):
|
|||||||
if clear_data == 1:
|
if clear_data == 1:
|
||||||
database.new()
|
database.new()
|
||||||
|
|
||||||
g = GedcomParser(database,filename)
|
statusTop = GladeXML(glade_file,"status")
|
||||||
|
statusWindow = statusTop.get_widget("status")
|
||||||
|
statusTop.get_widget("close").set_sensitive(0)
|
||||||
|
statusTop.signal_autoconnect({
|
||||||
|
"destroy_passed_object" : utils.destroy_passed_object
|
||||||
|
})
|
||||||
|
|
||||||
|
g = GedcomParser(database,filename,statusTop)
|
||||||
g.parse_gedcom_file()
|
g.parse_gedcom_file()
|
||||||
|
|
||||||
# statusTop = GladeXML(glade_file,"status")
|
statusTop.get_widget("close").set_sensitive(1)
|
||||||
# statusWindow = statusTop.get_widget("status")
|
|
||||||
# progressWindow = statusTop.get_widget("progress")
|
|
||||||
|
|
||||||
utils.modified()
|
utils.modified()
|
||||||
callback(1)
|
callback(1)
|
||||||
@ -140,7 +147,7 @@ class GedcomParser:
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
def __init__(self,db, file):
|
def __init__(self, db, file, window):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.person = None
|
self.person = None
|
||||||
self.pmap = {}
|
self.pmap = {}
|
||||||
@ -150,9 +157,34 @@ class GedcomParser:
|
|||||||
f = open(file,"r")
|
f = open(file,"r")
|
||||||
self.lines = f.readlines()
|
self.lines = f.readlines()
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
|
self.file_obj = window.get_widget("file")
|
||||||
|
self.encoding_obj = window.get_widget("encoding")
|
||||||
|
self.created_obj = window.get_widget("created")
|
||||||
|
self.version_obj = window.get_widget("version")
|
||||||
|
self.families_obj = window.get_widget("families")
|
||||||
|
self.people_obj = window.get_widget("people")
|
||||||
|
self.errors_obj = window.get_widget("errors")
|
||||||
|
self.error_text_obj = window.get_widget("error_text")
|
||||||
|
self.error_count = 0
|
||||||
|
self.error_text_obj.set_point(0)
|
||||||
|
self.error_text_obj.set_word_wrap(0)
|
||||||
|
|
||||||
|
self.update(self.file_obj,file)
|
||||||
|
|
||||||
self.index = 0
|
self.index = 0
|
||||||
self.code = 0
|
self.code = 0
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
def update(self,field,text):
|
||||||
|
field.set_text(text)
|
||||||
|
while events_pending():
|
||||||
|
mainiteration()
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
@ -170,8 +202,18 @@ class GedcomParser:
|
|||||||
self.index = self.index + 1
|
self.index = self.index + 1
|
||||||
return match.groups()
|
return match.groups()
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
def barf(self,level):
|
def barf(self,level):
|
||||||
print "IGNORED (%d): %s" % (self.index, self.lines[self.index-1])
|
msg = _("Warning: line %d was not understood, so it was ignored.") % self.index
|
||||||
|
self.error_text_obj.insert_defaults(msg)
|
||||||
|
msg = "\n\t%s\n" % self.lines[self.index-1]
|
||||||
|
self.error_text_obj.insert_defaults(msg)
|
||||||
|
self.error_count = self.error_count + 1
|
||||||
|
self.update(self.errors_obj,str(self.error_count))
|
||||||
self.ignore_sub_junk(level)
|
self.ignore_sub_junk(level)
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
@ -189,10 +231,14 @@ class GedcomParser:
|
|||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
def parse_gedcom_file(self):
|
def parse_gedcom_file(self):
|
||||||
self.index = 0
|
self.index = 0
|
||||||
|
self.fam_count = 0
|
||||||
|
self.indi_count = 0
|
||||||
self.parse_header()
|
self.parse_header()
|
||||||
self.parse_submitter()
|
self.parse_submitter()
|
||||||
self.parse_record()
|
self.parse_record()
|
||||||
self.parse_trailer()
|
self.parse_trailer()
|
||||||
|
self.update(self.families_obj,str(self.fam_count))
|
||||||
|
self.update(self.people_obj,str(self.indi_count))
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -274,13 +320,20 @@ class GedcomParser:
|
|||||||
#
|
#
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
def parse_record(self):
|
def parse_record(self):
|
||||||
|
index = 0
|
||||||
while 1:
|
while 1:
|
||||||
matches = self.get_next()
|
matches = self.get_next()
|
||||||
|
|
||||||
if matches[2] == "FAM":
|
if matches[2] == "FAM":
|
||||||
|
if self.fam_count % 10 == 0:
|
||||||
|
self.update(self.families_obj,str(self.fam_count))
|
||||||
|
self.fam_count = self.fam_count + 1
|
||||||
self.family = self.db.findFamily(matches[1],self.fmap)
|
self.family = self.db.findFamily(matches[1],self.fmap)
|
||||||
self.parse_family()
|
self.parse_family()
|
||||||
elif matches[2] == "INDI":
|
elif matches[2] == "INDI":
|
||||||
|
if self.indi_count % 10 == 0:
|
||||||
|
self.update(self.people_obj,str(self.indi_count))
|
||||||
|
self.indi_count = self.indi_count + 1
|
||||||
self.person = self.db.findPerson(matches[1],self.pmap)
|
self.person = self.db.findPerson(matches[1],self.pmap)
|
||||||
self.parse_individual()
|
self.parse_individual()
|
||||||
elif matches[2] == "SUBM":
|
elif matches[2] == "SUBM":
|
||||||
@ -290,7 +343,6 @@ class GedcomParser:
|
|||||||
elif matches[2] == "SOUR":
|
elif matches[2] == "SOUR":
|
||||||
self.parse_source(matches[1],1)
|
self.parse_source(matches[1],1)
|
||||||
elif matches[2] == "REPO":
|
elif matches[2] == "REPO":
|
||||||
print "REPO",matches[1]
|
|
||||||
self.ignore_sub_junk(1)
|
self.ignore_sub_junk(1)
|
||||||
elif matches[2][0:4] == "NOTE":
|
elif matches[2][0:4] == "NOTE":
|
||||||
if self.nmap.has_key(matches[1]):
|
if self.nmap.has_key(matches[1]):
|
||||||
@ -335,32 +387,6 @@ class GedcomParser:
|
|||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.barf(level+1)
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
def parse_source_citation(self,level):
|
|
||||||
while 1:
|
|
||||||
matches = self.get_next()
|
|
||||||
if int(matches[0]) < level:
|
|
||||||
self.backup()
|
|
||||||
return
|
|
||||||
elif matches[1] == "PAGE":
|
|
||||||
pass
|
|
||||||
elif matches[1] == "EVEN":
|
|
||||||
self.ignore_sub_junk(level+1)
|
|
||||||
elif matches[1] == "DATA":
|
|
||||||
self.ignore_sub_junk(level+1)
|
|
||||||
elif matches[1] == "QUAY":
|
|
||||||
pass
|
|
||||||
elif matches[1] == "NOTE":
|
|
||||||
note = matches[1] + self.parse_continue_data(level+1)
|
|
||||||
self.ignore_change_data(level+1)
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
self.barf(level+1)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
@ -386,6 +412,8 @@ class GedcomParser:
|
|||||||
pass
|
pass
|
||||||
elif matches[1] == "REFN" or matches[1] == "CHAN":
|
elif matches[1] == "REFN" or matches[1] == "CHAN":
|
||||||
self.ignore_sub_junk(2)
|
self.ignore_sub_junk(2)
|
||||||
|
elif matches[1] == "SOUR":
|
||||||
|
self.ignore_sub_junk(2)
|
||||||
elif matches[1] == "MARR":
|
elif matches[1] == "MARR":
|
||||||
event = Event()
|
event = Event()
|
||||||
event.setName("Marriage")
|
event.setName("Marriage")
|
||||||
@ -487,7 +515,10 @@ class GedcomParser:
|
|||||||
type,note = self.parse_famc_type(2)
|
type,note = self.parse_famc_type(2)
|
||||||
family = self.db.findFamily(matches[2],self.fmap)
|
family = self.db.findFamily(matches[2],self.fmap)
|
||||||
if type == "" or type == "Birth":
|
if type == "" or type == "Birth":
|
||||||
self.person.setMainFamily(family)
|
if self.person.getMainFamily() == None:
|
||||||
|
self.person.setMainFamily(family)
|
||||||
|
else:
|
||||||
|
self.person.addAltFamily(family,"unknown")
|
||||||
else:
|
else:
|
||||||
self.person.addAltFamily(family,type)
|
self.person.addAltFamily(family,type)
|
||||||
elif matches[1] == "RESI":
|
elif matches[1] == "RESI":
|
||||||
@ -532,6 +563,11 @@ class GedcomParser:
|
|||||||
self.person.addEvent(event)
|
self.person.addEvent(event)
|
||||||
self.parse_person_event(event,2)
|
self.parse_person_event(event,2)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
def parse_optional_note(self,level):
|
def parse_optional_note(self,level):
|
||||||
note = ""
|
note = ""
|
||||||
while 1:
|
while 1:
|
||||||
@ -549,6 +585,11 @@ class GedcomParser:
|
|||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.barf(level+1)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
def parse_famc_type(self,level):
|
def parse_famc_type(self,level):
|
||||||
type = ""
|
type = ""
|
||||||
note = ""
|
note = ""
|
||||||
@ -560,6 +601,8 @@ class GedcomParser:
|
|||||||
return (string.capitalize(type),note)
|
return (string.capitalize(type),note)
|
||||||
elif matches[1] == "PEDI":
|
elif matches[1] == "PEDI":
|
||||||
type = matches[2]
|
type = matches[2]
|
||||||
|
elif matches[1] == "_PRIMARY":
|
||||||
|
type = matches[1]
|
||||||
elif matches[1] == "NOTE":
|
elif matches[1] == "NOTE":
|
||||||
if matches[2] and matches[2][0] != "@":
|
if matches[2] and matches[2][0] != "@":
|
||||||
note = matches[2] + self.parse_continue_data(level+1)
|
note = matches[2] + self.parse_continue_data(level+1)
|
||||||
@ -569,6 +612,11 @@ class GedcomParser:
|
|||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.barf(level+1)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
def parse_person_object(self,level):
|
def parse_person_object(self,level):
|
||||||
form = ""
|
form = ""
|
||||||
file = ""
|
file = ""
|
||||||
@ -642,6 +690,11 @@ class GedcomParser:
|
|||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.barf(level+1)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
def parse_address(self,address,level):
|
def parse_address(self,address,level):
|
||||||
first = 0
|
first = 0
|
||||||
while 1:
|
while 1:
|
||||||
@ -744,7 +797,9 @@ class GedcomParser:
|
|||||||
self.ignore_sub_junk(level+1)
|
self.ignore_sub_junk(level+1)
|
||||||
elif matches[1] == "STAT" or matches[1] == "TEMP":
|
elif matches[1] == "STAT" or matches[1] == "TEMP":
|
||||||
self.ignore_sub_junk(level+1)
|
self.ignore_sub_junk(level+1)
|
||||||
elif matches[1] == "OBJE":
|
elif matches[1] == "HUSB" or matches[1] == "WIFE":
|
||||||
|
self.ignore_sub_junk(level+1)
|
||||||
|
elif matches[1] == "OBJE" or matches[1] == "QUAY":
|
||||||
self.ignore_sub_junk(level+1)
|
self.ignore_sub_junk(level+1)
|
||||||
elif matches[1] == "SOUR":
|
elif matches[1] == "SOUR":
|
||||||
source_ref = SourceRef()
|
source_ref = SourceRef()
|
||||||
@ -769,6 +824,11 @@ class GedcomParser:
|
|||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.barf(level+1)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
def parse_source_reference(self,source,level):
|
def parse_source_reference(self,source,level):
|
||||||
while 1:
|
while 1:
|
||||||
matches = self.get_next()
|
matches = self.get_next()
|
||||||
@ -777,7 +837,7 @@ class GedcomParser:
|
|||||||
self.backup()
|
self.backup()
|
||||||
return
|
return
|
||||||
elif matches[1] == "PAGE":
|
elif matches[1] == "PAGE":
|
||||||
source.setPage(matches[2])
|
source.setPage(matches[2] + self.parse_continue_data(level+1))
|
||||||
elif matches[1] == "DATA":
|
elif matches[1] == "DATA":
|
||||||
date,text = self.parse_source_data(level+1)
|
date,text = self.parse_source_data(level+1)
|
||||||
d = Date()
|
d = Date()
|
||||||
@ -802,6 +862,11 @@ class GedcomParser:
|
|||||||
self.barf(level+1)
|
self.barf(level+1)
|
||||||
|
|
||||||
def parse_source_data(self,level):
|
def parse_source_data(self,level):
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
date = ""
|
date = ""
|
||||||
note = ""
|
note = ""
|
||||||
while 1:
|
while 1:
|
||||||
@ -831,19 +896,21 @@ class GedcomParser:
|
|||||||
self.backup()
|
self.backup()
|
||||||
return
|
return
|
||||||
elif matches[1] == "NPFX":
|
elif matches[1] == "NPFX":
|
||||||
name.setTitle(matches[1])
|
name.setTitle(matches[2])
|
||||||
elif matches[1] == "GIVN":
|
elif matches[1] == "GIVN":
|
||||||
name.setFirstName(matches[1])
|
name.setFirstName(matches[2])
|
||||||
elif matches[1] == "SPFX":
|
elif matches[1] == "SPFX":
|
||||||
pass
|
pass
|
||||||
elif matches[1] == "SURN":
|
elif matches[1] == "SURN":
|
||||||
name.setSurname(matches[1])
|
name.setSurname(matches[2])
|
||||||
elif matches[1] == "NSFX":
|
elif matches[1] == "NSFX":
|
||||||
name.setSuffix(matches[1])
|
name.setSuffix(matches[2])
|
||||||
elif matches[1] == "NICK":
|
elif matches[1] == "NICK":
|
||||||
self.person.setNickName(matches[1])
|
self.person.setNickName(matches[2])
|
||||||
elif matches[1] == "SOUR":
|
elif matches[1] == "SOUR":
|
||||||
self.ignore_sub_junk(level+1)
|
self.ignore_sub_junk(level+1)
|
||||||
|
elif matches[1] == "NOTE":
|
||||||
|
self.ignore_sub_junk(level+1)
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.barf(level+1)
|
||||||
|
|
||||||
@ -871,15 +938,15 @@ class GedcomParser:
|
|||||||
self.backup()
|
self.backup()
|
||||||
return
|
return
|
||||||
elif matches[1] == "SOUR":
|
elif matches[1] == "SOUR":
|
||||||
print "Source is",matches[2]
|
if self.created_obj.get_text() == "":
|
||||||
|
self.update(self.created_obj,matches[2])
|
||||||
elif matches[1] == "NAME":
|
elif matches[1] == "NAME":
|
||||||
print "Name is",matches[2]
|
self.update(self.created_obj,matches[2])
|
||||||
elif matches[1] == "VERS":
|
elif matches[1] == "VERS":
|
||||||
print "Version is",matches[2]
|
self.update(self.version_obj,matches[2])
|
||||||
elif matches[1] == "CORP":
|
elif matches[1] == "CORP":
|
||||||
self.ignore_sub_junk(2)
|
self.ignore_sub_junk(2)
|
||||||
elif matches[1] == "DATA":
|
elif matches[1] == "DATA":
|
||||||
print "Data is",matches[2]
|
|
||||||
self.parse_sub_data(3)
|
self.parse_sub_data(3)
|
||||||
elif matches[1] == "SUBM":
|
elif matches[1] == "SUBM":
|
||||||
pass
|
pass
|
||||||
@ -898,12 +965,13 @@ class GedcomParser:
|
|||||||
elif matches[2] == "ANSEL":
|
elif matches[2] == "ANSEL":
|
||||||
self.code = ANSEL
|
self.code = ANSEL
|
||||||
self.ignore_sub_junk(2)
|
self.ignore_sub_junk(2)
|
||||||
|
self.update(self.encoding_obj,matches[2])
|
||||||
elif matches[1] == "GEDC":
|
elif matches[1] == "GEDC":
|
||||||
self.ignore_sub_junk(2)
|
self.ignore_sub_junk(2)
|
||||||
elif matches[1] == "_SCHEMA":
|
elif matches[1] == "_SCHEMA":
|
||||||
self.parse_ftw_schema(2)
|
self.parse_ftw_schema(2)
|
||||||
elif matches[1] == "LANG":
|
elif matches[1] == "LANG":
|
||||||
print "Language is",matches[2]
|
pass
|
||||||
elif matches[1] == "PLAC":
|
elif matches[1] == "PLAC":
|
||||||
self.parse_place_form(2)
|
self.parse_place_form(2)
|
||||||
elif matches[1] == "DATE":
|
elif matches[1] == "DATE":
|
||||||
@ -1028,9 +1096,7 @@ class GedcomParser:
|
|||||||
if int(matches[0]) < level:
|
if int(matches[0]) < level:
|
||||||
self.backup()
|
self.backup()
|
||||||
return
|
return
|
||||||
elif matches[1] == "FORM":
|
elif matches[1] != "FORM":
|
||||||
print "FORM",matches[2]
|
|
||||||
else:
|
|
||||||
self.barf(level+1)
|
self.barf(level+1)
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
|
@ -18,21 +18,22 @@
|
|||||||
<title>GEDCOM Import Status</title>
|
<title>GEDCOM Import Status</title>
|
||||||
<type>GTK_WINDOW_TOPLEVEL</type>
|
<type>GTK_WINDOW_TOPLEVEL</type>
|
||||||
<position>GTK_WIN_POS_CENTER</position>
|
<position>GTK_WIN_POS_CENTER</position>
|
||||||
<modal>False</modal>
|
<modal>True</modal>
|
||||||
<allow_shrink>False</allow_shrink>
|
<allow_shrink>False</allow_shrink>
|
||||||
<allow_grow>True</allow_grow>
|
<allow_grow>True</allow_grow>
|
||||||
<auto_shrink>False</auto_shrink>
|
<auto_shrink>False</auto_shrink>
|
||||||
|
|
||||||
<widget>
|
<widget>
|
||||||
<class>GtkVBox</class>
|
<class>GtkVBox</class>
|
||||||
<name>vbox2</name>
|
<name>vbox5</name>
|
||||||
<homogeneous>False</homogeneous>
|
<homogeneous>False</homogeneous>
|
||||||
<spacing>0</spacing>
|
<spacing>0</spacing>
|
||||||
|
|
||||||
<widget>
|
<widget>
|
||||||
<class>GtkLabel</class>
|
<class>GtkLabel</class>
|
||||||
<name>label2</name>
|
<name>label5</name>
|
||||||
<label>GEDCOM Import Status</label>
|
<width>500</width>
|
||||||
|
<label>GEDCOM Import</label>
|
||||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
<wrap>False</wrap>
|
<wrap>False</wrap>
|
||||||
<xalign>0.5</xalign>
|
<xalign>0.5</xalign>
|
||||||
@ -40,50 +41,448 @@
|
|||||||
<xpad>0</xpad>
|
<xpad>0</xpad>
|
||||||
<ypad>0</ypad>
|
<ypad>0</ypad>
|
||||||
<child>
|
<child>
|
||||||
<padding>20</padding>
|
<padding>10</padding>
|
||||||
<expand>False</expand>
|
<expand>False</expand>
|
||||||
<fill>False</fill>
|
<fill>False</fill>
|
||||||
</child>
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
|
|
||||||
<widget>
|
<widget>
|
||||||
<class>GtkHBox</class>
|
<class>GtkHSeparator</class>
|
||||||
<name>hbox1</name>
|
<name>hseparator4</name>
|
||||||
<homogeneous>False</homogeneous>
|
|
||||||
<spacing>0</spacing>
|
|
||||||
<child>
|
<child>
|
||||||
<padding>20</padding>
|
<padding>0</padding>
|
||||||
<expand>False</expand>
|
<expand>False</expand>
|
||||||
<fill>False</fill>
|
<fill>True</fill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkTable</class>
|
||||||
|
<name>table1</name>
|
||||||
|
<rows>7</rows>
|
||||||
|
<columns>2</columns>
|
||||||
|
<homogeneous>False</homogeneous>
|
||||||
|
<row_spacing>0</row_spacing>
|
||||||
|
<column_spacing>0</column_spacing>
|
||||||
|
<child>
|
||||||
|
<padding>0</padding>
|
||||||
|
<expand>True</expand>
|
||||||
|
<fill>True</fill>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
<widget>
|
<widget>
|
||||||
<class>Placeholder</class>
|
<class>GtkLabel</class>
|
||||||
</widget>
|
<name>label6</name>
|
||||||
|
<label>File</label>
|
||||||
<widget>
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
<class>GtkProgressBar</class>
|
<wrap>False</wrap>
|
||||||
<name>progress</name>
|
<xalign>1</xalign>
|
||||||
<width>250</width>
|
<yalign>0.5</yalign>
|
||||||
<value>0</value>
|
<xpad>5</xpad>
|
||||||
<lower>0</lower>
|
<ypad>5</ypad>
|
||||||
<upper>100</upper>
|
|
||||||
<bar_style>GTK_PROGRESS_CONTINUOUS</bar_style>
|
|
||||||
<orientation>GTK_PROGRESS_LEFT_TO_RIGHT</orientation>
|
|
||||||
<activity_mode>False</activity_mode>
|
|
||||||
<show_text>True</show_text>
|
|
||||||
<format>%P %%</format>
|
|
||||||
<text_xalign>0.5</text_xalign>
|
|
||||||
<text_yalign>0.5</text_yalign>
|
|
||||||
<child>
|
<child>
|
||||||
<padding>20</padding>
|
<left_attach>0</left_attach>
|
||||||
<expand>True</expand>
|
<right_attach>1</right_attach>
|
||||||
<fill>False</fill>
|
<top_attach>0</top_attach>
|
||||||
|
<bottom_attach>1</bottom_attach>
|
||||||
|
<xpad>0</xpad>
|
||||||
|
<ypad>0</ypad>
|
||||||
|
<xexpand>False</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
</child>
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
|
|
||||||
<widget>
|
<widget>
|
||||||
<class>Placeholder</class>
|
<class>GtkLabel</class>
|
||||||
|
<name>label7</name>
|
||||||
|
<label>Created by</label>
|
||||||
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
|
<wrap>False</wrap>
|
||||||
|
<xalign>1</xalign>
|
||||||
|
<yalign>0.5</yalign>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<child>
|
||||||
|
<left_attach>0</left_attach>
|
||||||
|
<right_attach>1</right_attach>
|
||||||
|
<top_attach>1</top_attach>
|
||||||
|
<bottom_attach>2</bottom_attach>
|
||||||
|
<xpad>0</xpad>
|
||||||
|
<ypad>0</ypad>
|
||||||
|
<xexpand>False</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkLabel</class>
|
||||||
|
<name>label8</name>
|
||||||
|
<label>Version</label>
|
||||||
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
|
<wrap>False</wrap>
|
||||||
|
<xalign>1</xalign>
|
||||||
|
<yalign>0.5</yalign>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<child>
|
||||||
|
<left_attach>0</left_attach>
|
||||||
|
<right_attach>1</right_attach>
|
||||||
|
<top_attach>2</top_attach>
|
||||||
|
<bottom_attach>3</bottom_attach>
|
||||||
|
<xpad>0</xpad>
|
||||||
|
<ypad>0</ypad>
|
||||||
|
<xexpand>False</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkLabel</class>
|
||||||
|
<name>label9</name>
|
||||||
|
<label>Number of Families</label>
|
||||||
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
|
<wrap>False</wrap>
|
||||||
|
<xalign>1</xalign>
|
||||||
|
<yalign>0.5</yalign>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<child>
|
||||||
|
<left_attach>0</left_attach>
|
||||||
|
<right_attach>1</right_attach>
|
||||||
|
<top_attach>4</top_attach>
|
||||||
|
<bottom_attach>5</bottom_attach>
|
||||||
|
<xpad>0</xpad>
|
||||||
|
<ypad>0</ypad>
|
||||||
|
<xexpand>False</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkLabel</class>
|
||||||
|
<name>label10</name>
|
||||||
|
<label>Number of People</label>
|
||||||
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
|
<wrap>False</wrap>
|
||||||
|
<xalign>1</xalign>
|
||||||
|
<yalign>0.5</yalign>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<child>
|
||||||
|
<left_attach>0</left_attach>
|
||||||
|
<right_attach>1</right_attach>
|
||||||
|
<top_attach>5</top_attach>
|
||||||
|
<bottom_attach>6</bottom_attach>
|
||||||
|
<xpad>0</xpad>
|
||||||
|
<ypad>0</ypad>
|
||||||
|
<xexpand>False</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkEntry</class>
|
||||||
|
<name>file</name>
|
||||||
|
<can_focus>True</can_focus>
|
||||||
|
<editable>False</editable>
|
||||||
|
<text_visible>True</text_visible>
|
||||||
|
<text_max_length>0</text_max_length>
|
||||||
|
<text></text>
|
||||||
|
<child>
|
||||||
|
<left_attach>1</left_attach>
|
||||||
|
<right_attach>2</right_attach>
|
||||||
|
<top_attach>0</top_attach>
|
||||||
|
<bottom_attach>1</bottom_attach>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<xexpand>True</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkEntry</class>
|
||||||
|
<name>created</name>
|
||||||
|
<can_focus>True</can_focus>
|
||||||
|
<editable>False</editable>
|
||||||
|
<text_visible>True</text_visible>
|
||||||
|
<text_max_length>0</text_max_length>
|
||||||
|
<text></text>
|
||||||
|
<child>
|
||||||
|
<left_attach>1</left_attach>
|
||||||
|
<right_attach>2</right_attach>
|
||||||
|
<top_attach>1</top_attach>
|
||||||
|
<bottom_attach>2</bottom_attach>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<xexpand>True</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkEntry</class>
|
||||||
|
<name>version</name>
|
||||||
|
<can_focus>True</can_focus>
|
||||||
|
<editable>False</editable>
|
||||||
|
<text_visible>True</text_visible>
|
||||||
|
<text_max_length>0</text_max_length>
|
||||||
|
<text></text>
|
||||||
|
<child>
|
||||||
|
<left_attach>1</left_attach>
|
||||||
|
<right_attach>2</right_attach>
|
||||||
|
<top_attach>2</top_attach>
|
||||||
|
<bottom_attach>3</bottom_attach>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<xexpand>True</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkEntry</class>
|
||||||
|
<name>families</name>
|
||||||
|
<can_focus>True</can_focus>
|
||||||
|
<editable>False</editable>
|
||||||
|
<text_visible>True</text_visible>
|
||||||
|
<text_max_length>0</text_max_length>
|
||||||
|
<text></text>
|
||||||
|
<child>
|
||||||
|
<left_attach>1</left_attach>
|
||||||
|
<right_attach>2</right_attach>
|
||||||
|
<top_attach>4</top_attach>
|
||||||
|
<bottom_attach>5</bottom_attach>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<xexpand>True</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkEntry</class>
|
||||||
|
<name>people</name>
|
||||||
|
<can_focus>True</can_focus>
|
||||||
|
<editable>False</editable>
|
||||||
|
<text_visible>True</text_visible>
|
||||||
|
<text_max_length>0</text_max_length>
|
||||||
|
<text></text>
|
||||||
|
<child>
|
||||||
|
<left_attach>1</left_attach>
|
||||||
|
<right_attach>2</right_attach>
|
||||||
|
<top_attach>5</top_attach>
|
||||||
|
<bottom_attach>6</bottom_attach>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<xexpand>True</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkLabel</class>
|
||||||
|
<name>label11</name>
|
||||||
|
<label>Number of Errors</label>
|
||||||
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
|
<wrap>False</wrap>
|
||||||
|
<xalign>1</xalign>
|
||||||
|
<yalign>0.5</yalign>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<child>
|
||||||
|
<left_attach>0</left_attach>
|
||||||
|
<right_attach>1</right_attach>
|
||||||
|
<top_attach>6</top_attach>
|
||||||
|
<bottom_attach>7</bottom_attach>
|
||||||
|
<xpad>0</xpad>
|
||||||
|
<ypad>0</ypad>
|
||||||
|
<xexpand>False</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkEntry</class>
|
||||||
|
<name>errors</name>
|
||||||
|
<can_focus>True</can_focus>
|
||||||
|
<editable>False</editable>
|
||||||
|
<text_visible>True</text_visible>
|
||||||
|
<text_max_length>0</text_max_length>
|
||||||
|
<text></text>
|
||||||
|
<child>
|
||||||
|
<left_attach>1</left_attach>
|
||||||
|
<right_attach>2</right_attach>
|
||||||
|
<top_attach>6</top_attach>
|
||||||
|
<bottom_attach>7</bottom_attach>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<xexpand>True</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkLabel</class>
|
||||||
|
<name>label12</name>
|
||||||
|
<label>Encoding</label>
|
||||||
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
|
<wrap>False</wrap>
|
||||||
|
<xalign>1</xalign>
|
||||||
|
<yalign>0.5</yalign>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<child>
|
||||||
|
<left_attach>0</left_attach>
|
||||||
|
<right_attach>1</right_attach>
|
||||||
|
<top_attach>3</top_attach>
|
||||||
|
<bottom_attach>4</bottom_attach>
|
||||||
|
<xpad>0</xpad>
|
||||||
|
<ypad>0</ypad>
|
||||||
|
<xexpand>False</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkEntry</class>
|
||||||
|
<name>encoding</name>
|
||||||
|
<can_focus>True</can_focus>
|
||||||
|
<editable>False</editable>
|
||||||
|
<text_visible>True</text_visible>
|
||||||
|
<text_max_length>0</text_max_length>
|
||||||
|
<text></text>
|
||||||
|
<child>
|
||||||
|
<left_attach>1</left_attach>
|
||||||
|
<right_attach>2</right_attach>
|
||||||
|
<top_attach>3</top_attach>
|
||||||
|
<bottom_attach>4</bottom_attach>
|
||||||
|
<xpad>5</xpad>
|
||||||
|
<ypad>5</ypad>
|
||||||
|
<xexpand>True</xexpand>
|
||||||
|
<yexpand>False</yexpand>
|
||||||
|
<xshrink>False</xshrink>
|
||||||
|
<yshrink>False</yshrink>
|
||||||
|
<xfill>True</xfill>
|
||||||
|
<yfill>False</yfill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkScrolledWindow</class>
|
||||||
|
<name>scrolledwindow1</name>
|
||||||
|
<hscrollbar_policy>GTK_POLICY_AUTOMATIC</hscrollbar_policy>
|
||||||
|
<vscrollbar_policy>GTK_POLICY_AUTOMATIC</vscrollbar_policy>
|
||||||
|
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
|
||||||
|
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
|
||||||
|
<child>
|
||||||
|
<padding>0</padding>
|
||||||
|
<expand>True</expand>
|
||||||
|
<fill>True</fill>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkText</class>
|
||||||
|
<name>error_text</name>
|
||||||
|
<height>146</height>
|
||||||
|
<can_focus>True</can_focus>
|
||||||
|
<editable>False</editable>
|
||||||
|
<text></text>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkHSeparator</class>
|
||||||
|
<name>hseparator5</name>
|
||||||
|
<child>
|
||||||
|
<padding>0</padding>
|
||||||
|
<expand>True</expand>
|
||||||
|
<fill>True</fill>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkHButtonBox</class>
|
||||||
|
<name>hbuttonbox2</name>
|
||||||
|
<layout_style>GTK_BUTTONBOX_END</layout_style>
|
||||||
|
<spacing>30</spacing>
|
||||||
|
<child_min_width>85</child_min_width>
|
||||||
|
<child_min_height>27</child_min_height>
|
||||||
|
<child_ipad_x>7</child_ipad_x>
|
||||||
|
<child_ipad_y>0</child_ipad_y>
|
||||||
|
<child>
|
||||||
|
<padding>0</padding>
|
||||||
|
<expand>True</expand>
|
||||||
|
<fill>True</fill>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkButton</class>
|
||||||
|
<name>close</name>
|
||||||
|
<can_default>True</can_default>
|
||||||
|
<can_focus>True</can_focus>
|
||||||
|
<signal>
|
||||||
|
<name>clicked</name>
|
||||||
|
<handler>destroy_passed_object</handler>
|
||||||
|
<object>status</object>
|
||||||
|
<last_modification_time>Thu, 31 May 2001 19:35:57 GMT</last_modification_time>
|
||||||
|
</signal>
|
||||||
|
<stock_button>GNOME_STOCK_BUTTON_CLOSE</stock_button>
|
||||||
|
<relief>GTK_RELIEF_NORMAL</relief>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
|
Loading…
Reference in New Issue
Block a user