Improved Edit Person window, support for private records and confidence levels

svn: r264
This commit is contained in:
Don Allingham 2001-07-29 06:06:16 +00:00
parent c543528477
commit 8e8a3d3fb0
7 changed files with 3809 additions and 1091 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -150,6 +150,10 @@ class GrampsParser(handler.ContentHandler):
def start_event(self,attrs): def start_event(self,attrs):
self.event = Event() self.event = Event()
self.event_type = u2l(string.capwords(attrs["type"])) self.event_type = u2l(string.capwords(attrs["type"]))
if attrs.has_key("conf"):
self.event.confidence = string.atoi(attrs["conf"])
if attrs.has_key("priv"):
self.event.private = string.atoi(attrs["priv"])
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
@ -158,6 +162,10 @@ class GrampsParser(handler.ContentHandler):
#--------------------------------------------------------------------- #---------------------------------------------------------------------
def start_attribute(self,attrs): def start_attribute(self,attrs):
self.attribute = Attribute() self.attribute = Attribute()
if attrs.has_key("conf"):
self.attribute.confidence = string.atoi(attrs["conf"])
if attrs.has_key("priv"):
self.attribute.privacy = string.atoi(attrs["priv"])
if attrs.has_key('type'): if attrs.has_key('type'):
self.in_old_attr = 1 self.in_old_attr = 1
self.attribute.setType(u2l(string.capwords(attrs["type"]))) self.attribute.setType(u2l(string.capwords(attrs["type"])))
@ -176,6 +184,10 @@ class GrampsParser(handler.ContentHandler):
def start_address(self,attrs): def start_address(self,attrs):
self.address = Address() self.address = Address()
self.person.addAddress(self.address) self.person.addAddress(self.address)
if attrs.has_key("conf"):
self.address.confidence = string.atoi(attrs["conf"])
if attrs.has_key("priv"):
self.address.private = string.atoi(attrs["priv"])
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
@ -245,7 +257,11 @@ class GrampsParser(handler.ContentHandler):
desc = "" desc = ""
try: try:
url = Url(u2l(attrs["href"]),desc) url = Url()
url.set_path(u2l(attrs["href"]))
url.set_description(desc)
if attrs.has_key("priv"):
url.setPrivacy(string.atoi(attrs['priv']))
self.person.addUrl(url) self.person.addUrl(url)
except KeyError: except KeyError:
return return
@ -295,6 +311,10 @@ class GrampsParser(handler.ContentHandler):
#--------------------------------------------------------------------- #---------------------------------------------------------------------
def start_name(self,attrs): def start_name(self,attrs):
self.name = Name() self.name = Name()
if attrs.has_key("conf"):
self.name.confidence = string.atoi(attrs["conf"])
if attrs.has_key("priv"):
self.name.private = string.atoi(attrs["priv"])
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #

View File

@ -81,11 +81,39 @@ class Photo:
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class Attribute: class Attribute:
def __init__(self): def __init__(self,source=None):
if source:
self.type = source.type
self.value = source.value
if source.source_ref:
self.source_ref = SourceRef(source.source_ref)
else:
self.source_ref = None
if source.note:
self.note = Note(source.note)
else:
self.note = None
self.confidence = 2
self.private = 0
else:
self.type = "" self.type = ""
self.value = "" self.value = ""
self.source_ref = SourceRef() self.source_ref = None
self.note = Note() self.note = Note()
self.confidence = 2
self.private = 0
def setPrivacy(self,val):
self.private = val
def getPrivacy(self):
return self.private
def setConfidence(self,val):
self.confidence = val
def getConfidence(self):
return self.confidence
def setNote(self,text): def setNote(self,text):
self.note.set(text) self.note.set(text)
@ -103,6 +131,8 @@ class Attribute:
self.source_ref = id self.source_ref = id
def getSourceRef(self) : def getSourceRef(self) :
if not self.source_ref:
self.source_ref = SourceRef()
return self.source_ref return self.source_ref
def setType(self,val): def setType(self,val):
@ -123,26 +153,65 @@ class Attribute:
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class Address: class Address:
def __init__(self): def __init__(self,source=None):
if source:
self.street = source.street
self.city = source.city
self.state = source.state
self.country = source.country
self.postal = source.postal
self.date = Date(source.date)
if source.source_ref:
self.source_ref = SourceRef(source.source_ref)
else:
self.source_ref = None
if source.note:
self.note = Note(source.note)
else:
self.note = None
self.confidence = source.confidence
self.private = source.private
else:
self.street = "" self.street = ""
self.city = "" self.city = ""
self.state = "" self.state = ""
self.country = "" self.country = ""
self.postal = "" self.postal = ""
self.date = Date() self.date = Date()
self.note = Note() self.note = None
self.source_ref = SourceRef() self.source_ref = None
self.confidence = 2
self.private = 0
def setPrivacy(self,val):
self.private = val
def getPrivacy(self):
return self.private
def setConfidence(self,val):
self.confidence = val
def getConfidence(self):
return self.confidence
def setSourceRef(self,id) : def setSourceRef(self,id) :
self.source_ref = id self.source_ref = id
def getSourceRef(self) : def getSourceRef(self) :
if not self.source_ref:
self.source_ref = SourceRef()
return self.source_ref return self.source_ref
def setNote(self,text): def setNote(self,text):
if self.note == None:
self.note = Note()
self.note.set(text) self.note.set(text)
def getNote(self): def getNote(self):
if self.note == None:
return ""
else:
return self.note.get() return self.note.get()
def setNoteObj(self,obj): def setNoteObj(self,obj):
@ -197,13 +266,43 @@ class Address:
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class Name: class Name:
def __init__(self): def __init__(self,source=None):
if source:
self.FirstName = source.FirstName
self.Surname = source.Surname
self.Suffix = source.Suffix
self.Title = source.Title
if source.source_ref:
self.source_ref = SourceRef(source.source_ref)
else:
self.source_ref = None
if source.note:
self.note = Note(source.note)
else:
self.note = None
self.private = 0
self.confidence = 2
else:
self.FirstName = "" self.FirstName = ""
self.Surname = "" self.Surname = ""
self.Suffix = "" self.Suffix = ""
self.Title = "" self.Title = ""
self.source_ref = None self.source_ref = None
self.note = None self.note = None
self.private = 0
self.confidence = 2
def setPrivacy(self,val):
self.private = val
def getPrivacy(self):
return self.private
def setConfidence(self,val):
self.confidence = val
def getConfidence(self):
return self.confidence
def setName(self,first,last,suffix): def setName(self,first,last,suffix):
self.FirstName = first self.FirstName = first
@ -280,9 +379,21 @@ class Name:
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class Url: class Url:
def __init__(self,path="",desc=""): def __init__(self,source=None):
self.path = path if source:
self.desc = desc self.path = source.path
self.desc = source.desc
self.private = source.private
else:
self.path = ""
self.desc = ""
self.private = 0
def setPrivacy(self,val):
self.private = val
def getPrivacy(self):
return self.private
def set_path(self,path): def set_path(self,path):
self.path = path self.path = path
@ -342,12 +453,18 @@ class Person:
def getAlternateNames(self): def getAlternateNames(self):
return self.alternateNames return self.alternateNames
def setAlternateNames(self,list):
self.alternateNames = list
def addAlternateName(self,name): def addAlternateName(self,name):
self.alternateNames.append(name) self.alternateNames.append(name)
def getUrlList(self): def getUrlList(self):
return self.urls return self.urls
def setUrlList(self,list):
self.urls = list
def addUrl(self,url): def addUrl(self,url):
self.urls.append(url) self.urls.append(url)
@ -430,6 +547,9 @@ class Person:
def getAddressList(self) : def getAddressList(self) :
return self.addressList return self.addressList
def setAddressList(self,list) :
self.addressList = list
def addAttribute(self,attribute) : def addAttribute(self,attribute) :
self.attributeList.append(attribute) self.attributeList.append(attribute)
@ -444,6 +564,9 @@ class Person:
def getAttributeList(self) : def getAttributeList(self) :
return self.attributeList return self.attributeList
def setAttributeList(self,list) :
self.attributeList = list
def getAltFamilyList(self) : def getAltFamilyList(self) :
return self.AltFamilyList return self.AltFamilyList
@ -506,7 +629,9 @@ class Event:
if source.note: if source.note:
self.note = Note(source.note) self.note = Note(source.note)
else: else:
self.source_ref = None self.note = None
self.confidence = source.confidence
self.private = source.private
else: else:
self.place = "" self.place = ""
self.date = Date() self.date = Date()
@ -514,6 +639,20 @@ class Event:
self.name = "" self.name = ""
self.source_ref = None self.source_ref = None
self.note = None self.note = None
self.confidence = 2
self.private = 0
def setPrivacy(self,val):
self.private = val
def getPrivacy(self):
return self.private
def setConfidence(self,val):
self.confidence = val
def getConfidence(self):
return self.confidence
def set(self,name,date,place,description): def set(self,name,date,place,description):
self.name = name self.name = name

View File

@ -59,9 +59,12 @@ def fix(line):
# #
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def writeNote(g,val,note): def writeNote(g,val,note,indent=0):
if not note: if not note:
return return
if indent != 0:
g.write(" " * indent)
g.write("<" + val + ">") g.write("<" + val + ">")
g.write(fix(note)) g.write(fix(note))
g.write("</" + val + ">\n") g.write("</" + val + ">\n")
@ -87,15 +90,17 @@ def dump_my_event(g,name,event):
date = event.getSaveDate() date = event.getSaveDate()
place = event.getPlace() place = event.getPlace()
description = event.getDescription() description = event.getDescription()
if not name and not date and not place and not description: if (not name or name == "Birth" or name == "Death") and \
not date and not place and not description:
return return
g.write("<event type=\"" + fix(name) + "\">\n") g.write(' <event type="%s" conf="%d" priv="%d">\n' % \
write_line(g,"date",date) (fix(name),event.getConfidence(),event.getPrivacy()))
write_line(g,"place",place) write_line(g,"date",date,3)
write_line(g,"description",description) write_line(g,"place",place,3)
write_line(g,"description",description,3)
if event.getNote() != "": if event.getNote() != "":
writeNote(g,"note",event.getNote()) writeNote(g,"note",event.getNote(),3)
dump_source_ref(g,event.getSourceRef()) dump_source_ref(g,event.getSourceRef())
g.write(" </event>\n") g.write(" </event>\n")
@ -159,9 +164,9 @@ def write_family_id(g,family):
# #
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def write_line(g,label,value): def write_line(g,label,value,indent=1):
if value: if value:
g.write('<%s>%s</%s>\n' % (label,fix(value),label)) g.write('%s<%s>%s</%s>\n' % (' '*indent,label,fix(value),label))
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -169,11 +174,12 @@ def write_line(g,label,value):
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def dump_name(g,label,name): def dump_name(g,label,name):
g.write('<%s>\n' % label) g.write(' <%s conf="%s" priv="%s">\n' % \
write_line(g,"first",name.getFirstName()) (label,name.getConfidence(),name.getPrivacy()))
write_line(g,"last",name.getSurname()) write_line(g,"first",name.getFirstName(),3)
write_line(g,"suffix",name.getSuffix()) write_line(g,"last",name.getSurname(),3)
write_line(g,"title",name.getTitle()) write_line(g,"suffix",name.getSuffix(),3)
write_line(g,"title",name.getTitle(),3)
if name.getNote() != "": if name.getNote() != "":
writeNote(g,"note",name.getNote()) writeNote(g,"note",name.getNote())
dump_source_ref(g,name.getSourceRef()) dump_source_ref(g,name.getSourceRef())
@ -215,21 +221,21 @@ def exportData(database, filename, callback):
g.write(" people=\"%d\"" % (len(database.getPersonMap().values()))) g.write(" people=\"%d\"" % (len(database.getPersonMap().values())))
g.write(" families=\"%d\"/>\n" % len(database.getFamilyMap().values())) g.write(" families=\"%d\"/>\n" % len(database.getFamilyMap().values()))
g.write(" <researcher>\n") g.write(" <researcher>\n")
write_line(g,"resname",owner.getName()) write_line(g,"resname",owner.getName(),3)
write_line(g,"resaddr",owner.getAddress()) write_line(g,"resaddr",owner.getAddress(),3)
write_line(g,"rescity",owner.getCity()) write_line(g,"rescity",owner.getCity(),3)
write_line(g,"resstate",owner.getState()) write_line(g,"resstate",owner.getState(),3)
write_line(g,"rescountry",owner.getCountry()) write_line(g,"rescountry",owner.getCountry(),3)
write_line(g,"respostal",owner.getPostalCode()) write_line(g,"respostal",owner.getPostalCode(),3)
write_line(g,"resphone",owner.getPhone()) write_line(g,"resphone",owner.getPhone(),3)
write_line(g,"resemail",owner.getEmail()) write_line(g,"resemail",owner.getEmail(),3)
g.write(" </researcher>\n") g.write(" </researcher>\n")
g.write(" </header>\n") g.write(" </header>\n")
g.write(" <people") g.write(" <people")
person = database.getDefaultPerson() person = database.getDefaultPerson()
if person: if person:
g.write(" default=\"" + person.getId() + "\"") g.write(' default="%s"' % person.getId())
g.write(">\n") g.write(">\n")
total = len(personList) + len(familyList) total = len(personList) + len(familyList)
@ -243,9 +249,9 @@ def exportData(database, filename, callback):
write_id(g,"person",person) write_id(g,"person",person)
if person.getGender() == Person.male: if person.getGender() == Person.male:
write_line(g,"gender","M") write_line(g,"gender","M",2)
else: else:
write_line(g,"gender","F") write_line(g,"gender","F",2)
dump_name(g,"name",person.getPrimaryName()) dump_name(g,"name",person.getPrimaryName())
for name in person.getAlternateNames(): for name in person.getAlternateNames():
dump_name(g,"aka",name) dump_name(g,"aka",name)
@ -272,7 +278,8 @@ def exportData(database, filename, callback):
if len(person.getAddressList()) > 0: if len(person.getAddressList()) > 0:
g.write("<addresses>\n") g.write("<addresses>\n")
for address in person.getAddressList(): for address in person.getAddressList():
g.write('<address>\n') g.write('<address conf="%d" priv="%d">\n' % \
(address.getConfidence(), address.getPrivacy()))
write_line(g,"date",address.getDateObj().getSaveDate()) write_line(g,"date",address.getDateObj().getSaveDate())
write_line(g,"street",address.getStreet()) write_line(g,"street",address.getStreet())
write_line(g,"city",address.getCity()) write_line(g,"city",address.getCity())
@ -289,7 +296,9 @@ def exportData(database, filename, callback):
g.write("<attributes>\n") g.write("<attributes>\n")
for attr in person.getAttributeList(): for attr in person.getAttributeList():
if attr.getSourceRef() or attr.getNote(): if attr.getSourceRef() or attr.getNote():
g.write('<attribute>\n') g.write('<attribute conf="%d" priv="%d">\n' % \
(attr.getConfidence(),attr.getPrivacy()))
write_line(g,"attr_type",attr.getType()) write_line(g,"attr_type",attr.getType())
write_line(g,"attr_value",attr.getValue()) write_line(g,"attr_value",attr.getValue())
dump_source_ref(g,attr.getSourceRef()) dump_source_ref(g,attr.getSourceRef())
@ -304,7 +313,7 @@ def exportData(database, filename, callback):
if len(person.getUrlList()) > 0: if len(person.getUrlList()) > 0:
g.write("<urls>\n") g.write("<urls>\n")
for url in person.getUrlList(): for url in person.getUrlList():
g.write('<url href="' + url.get_path() + '"') g.write('<url priv="%d" href="%s"' % (url.getPrivacy(),url.get_path()))
if url.get_description() != "": if url.get_description() != "":
g.write(' description="' + url.get_description() + '"') g.write(' description="' + url.get_description() + '"')
g.write('/>\n') g.write('/>\n')

View File

@ -112,6 +112,18 @@ childRelations = {
_("Unknown") : "Unknown", _("Unknown") : "Unknown",
} }
#-------------------------------------------------------------------------
#
# Confidence
#
#-------------------------------------------------------------------------
confidence = [ _("Very Low"),
_("Low"),
_("Normal"),
_("High"),
_("Very High")
]
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Family event string mappings # Family event string mappings
@ -453,3 +465,4 @@ marriageEvents = initialize_marriage_event_list()
familyAttributes = initialize_family_attribute_list() familyAttributes = initialize_family_attribute_list()
familyRelations = initialize_family_relation_list() familyRelations = initialize_family_relation_list()
places = [] places = []
surnames = []

View File

@ -94,8 +94,6 @@ bookmarks = None
id2col = {} id2col = {}
surnameList = []
topWindow = None topWindow = None
statusbar = None statusbar = None
gtop = None gtop = None
@ -817,8 +815,8 @@ def read_file(filename):
for person in database.getPersonMap().values(): for person in database.getPersonMap().values():
lastname = person.getPrimaryName().getSurname() lastname = person.getPrimaryName().getSurname()
if lastname and lastname not in surnameList: if lastname and lastname not in const.surnames:
surnameList.append(lastname) const.surnames.append(lastname)
full_update() full_update()
statusbar.set_progress(0.0) statusbar.set_progress(0.0)
@ -1736,11 +1734,9 @@ def update_after_edit(person):
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def load_person(person): def load_person(person):
if person == None: if person == None:
EditPerson.EditPerson(Person(),database,surnameList,\ EditPerson.EditPerson(Person(),database,new_after_edit)
new_after_edit)
else: else:
EditPerson.EditPerson(person,database,surnameList,\ EditPerson.EditPerson(person,database,update_after_edit)
update_after_edit)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -2175,6 +2171,7 @@ def apply_filter():
name = name_tuple[0] name = name_tuple[0]
if datacomp(person): if datacomp(person):
if not alt:
id2col[person] = i id2col[person] = i
if person.getGender(): if person.getGender():
gender = const.male gender = const.male