* src/RelLib.py: Person and Family now inherit from SourceNote

* src/EditPerson.py: Added source tab to apply generic sources
to a person
* src/Marriage.py: Added source tab to apply generic sources
to a person, add "complete" flag
* src/WriteXML.py: Store source information for Family and Person,
store complete flag for Family
* src/GrampsParser.py: Parse source information for Family and
Person, read complete flag for Famiy


svn: r2289
This commit is contained in:
Don Allingham 2003-10-29 05:04:43 +00:00
parent a182ecadd1
commit 71632a3953
5 changed files with 86 additions and 79 deletions

View File

@ -53,6 +53,7 @@ import sort
import AutoComp import AutoComp
import ListModel import ListModel
import RelLib import RelLib
import Sources
from DateEdit import DateEdit from DateEdit import DateEdit
from QuestionDialog import QuestionDialog, WarningDialog, ErrorDialog, SaveDialog from QuestionDialog import QuestionDialog, WarningDialog, ErrorDialog, SaveDialog
@ -102,7 +103,8 @@ class EditPerson:
self.window.set_title("%s - GRAMPS" % _('Edit Person')) self.window.set_title("%s - GRAMPS" % _('Edit Person'))
self.icon_list = self.top.get_widget("iconlist") self.icon_list = self.top.get_widget("iconlist")
self.gallery = ImageSelect.Gallery(person, self.path, self.icon_list,self.db,self,self.window) self.gallery = ImageSelect.Gallery(person, self.path, self.icon_list,
self.db,self,self.window)
self.name_delete_btn = self.top.get_widget('aka_delete') self.name_delete_btn = self.top.get_widget('aka_delete')
self.name_edit_btn = self.top.get_widget('aka_edit') self.name_edit_btn = self.top.get_widget('aka_edit')
@ -176,6 +178,7 @@ class EditPerson:
self.name_note = self.get_widget("name_note") self.name_note = self.get_widget("name_note")
self.name_source = self.get_widget("name_source") self.name_source = self.get_widget("name_source")
self.gid = self.get_widget("gid") self.gid = self.get_widget("gid")
self.slist = self.get_widget("slist")
self.death = RelLib.Event(person.getDeath()) self.death = RelLib.Event(person.getDeath())
self.birth = RelLib.Event(person.getBirth()) self.birth = RelLib.Event(person.getBirth())
@ -187,6 +190,11 @@ class EditPerson:
self.ulist = person.getUrlList()[:] self.ulist = person.getUrlList()[:]
self.plist = person.getAddressList()[:] self.plist = person.getAddressList()[:]
if person:
self.srcreflist = person.getSourceRefList()
else:
self.srcreflist = []
# event display # event display
etitles = [(_('Event'),-1,150),(_('Description'),-1,150), etitles = [(_('Event'),-1,150),(_('Description'),-1,150),
(_('Date'),-1,100),(_('Place'),-1,100)] (_('Date'),-1,100),(_('Place'),-1,100)]
@ -329,6 +337,12 @@ class EditPerson:
self.update_birth_death() self.update_birth_death()
self.sourcetab = Sources.SourceTab(self.srcreflist,self,
self.top,self.window,self.slist,
self.top.get_widget('add_src'),
self.top.get_widget('edit_src'),
self.top.get_widget('del_src'))
self.redraw_event_list() self.redraw_event_list()
self.redraw_attr_list() self.redraw_attr_list()
self.redraw_addr_list() self.redraw_addr_list()
@ -1429,6 +1443,10 @@ class EditPerson:
self.person.setLdsSeal(self.lds_sealing) self.person.setLdsSeal(self.lds_sealing)
Utils.modified() Utils.modified()
if self.lists_changed:
self.person.setSourceRefList(self.srcreflist)
Utils.modified()
self.update_lists() self.update_lists()
if self.callback: if self.callback:
self.callback(self,self.add_places) self.callback(self,self.add_places)

View File

@ -127,7 +127,7 @@ class GrampsParser:
"description": (None, self.stop_description), "description": (None, self.stop_description),
"event" : (self.start_event, self.stop_event), "event" : (self.start_event, self.stop_event),
"families" : (None, self.stop_families), "families" : (None, self.stop_families),
"family" : (self.start_family, None), "family" : (self.start_family, self.stop_family),
"father" : (self.start_father, None), "father" : (self.start_father, None),
"first" : (None, self.stop_first), "first" : (None, self.stop_first),
"gender" : (None, self.stop_gender), "gender" : (None, self.stop_gender),
@ -139,7 +139,7 @@ class GrampsParser:
"note" : (self.start_note, self.stop_note), "note" : (self.start_note, self.stop_note),
"p" : (None, self.stop_ptag), "p" : (None, self.stop_ptag),
"parentin" : (self.start_parentin,None), "parentin" : (self.start_parentin,None),
"people" : (self.start_people, self.stop_people), "people" : (self.start_people, None),
"person" : (self.start_person, self.stop_person), "person" : (self.start_person, self.stop_person),
"img" : (self.start_photo, self.stop_photo), "img" : (self.start_photo, self.stop_photo),
"objref" : (self.start_objref, self.stop_objref), "objref" : (self.start_objref, self.stop_objref),
@ -380,6 +380,10 @@ class GrampsParser:
self.family.setRelationship(const.save_frel(attrs["type"])) self.family.setRelationship(const.save_frel(attrs["type"]))
else: else:
self.family.setRelationship("") self.family.setRelationship("")
if attrs.has_key("complete"):
self.family.setComplete(int(attrs['complete']))
else:
self.family.setComplete(0)
def start_childof(self,attrs): def start_childof(self,attrs):
family = self.db.findFamilyNoMap(attrs["ref"]) family = self.db.findFamilyNoMap(attrs["ref"])
@ -439,6 +443,10 @@ class GrampsParser:
self.attribute.addSourceRef(self.source_ref) self.attribute.addSourceRef(self.source_ref)
elif self.placeobj: elif self.placeobj:
self.placeobj.addSourceRef(self.source_ref) self.placeobj.addSourceRef(self.source_ref)
elif self.family:
self.family.addSourceRef(self.source_ref)
elif self.person:
self.person.addSourceRef(self.source_ref)
def start_source(self,attrs): def start_source(self,attrs):
if self.num_srcs > 0: if self.num_srcs > 0:
@ -623,7 +631,10 @@ class GrampsParser:
loc = self.placeobj.get_main_location() loc = self.placeobj.get_main_location()
self.placeobj.set_title(build_place_title(loc)) self.placeobj.set_title(build_place_title(loc))
self.db.buildPlaceDisplay(self.placeobj.getId()) self.db.buildPlaceDisplay(self.placeobj.getId())
self.palceobj = None self.placeobj = None
def stop_family(self,tag):
self.family = None
def stop_event(self,tag): def stop_event(self,tag):
self.event.name = self.event_type self.event.name = self.event_type
@ -664,6 +675,7 @@ class GrampsParser:
self.ord.setPlace(self.placeobj) self.ord.setPlace(self.placeobj)
else: else:
self.event.place = self.placeobj self.event.place = self.placeobj
self.placeobj = None
def stop_uid(self,tag): def stop_uid(self,tag):
self.person.setPafUid(tag) self.person.setPafUid(tag)
@ -681,11 +693,9 @@ class GrampsParser:
def stop_families(self,tag): def stop_families(self,tag):
self.family = None self.family = None
def stop_people(self,tag):
self.person = None
def stop_person(self,tag): def stop_person(self,tag):
self.db.buildPersonDisplay(self.person.getId()) self.db.buildPersonDisplay(self.person.getId())
self.person = None
def stop_description(self,tag): def stop_description(self,tag):
self.event.setDescription(tag) self.event.setDescription(tag)
@ -897,7 +907,7 @@ class GrampsImportParser(GrampsParser):
self.func_map["family"] = (self.start_family, None) self.func_map["family"] = (self.start_family, None)
self.func_map["father"] = (self.start_father, None) self.func_map["father"] = (self.start_father, None)
self.func_map["mother"] = (self.start_mother,None) self.func_map["mother"] = (self.start_mother,None)
self.func_map["people"] = (self.start_people, self.stop_people) self.func_map["people"] = (self.start_people, None)
self.func_map["person"] = (self.start_person, self.stop_person) self.func_map["person"] = (self.start_person, self.stop_person)
self.func_map["objref"] = (self.start_objref, self.stop_objref) self.func_map["objref"] = (self.start_objref, self.stop_objref)
self.func_map["object"] = (self.start_object, self.stop_object) self.func_map["object"] = (self.start_object, self.stop_object)
@ -950,23 +960,6 @@ class GrampsImportParser(GrampsParser):
if attrs.has_key("type"): if attrs.has_key("type"):
self.family.setRelationship(const.save_frel(attrs["type"])) self.family.setRelationship(const.save_frel(attrs["type"]))
def start_sourceref(self,attrs):
self.source_ref = RelLib.SourceRef()
self.source = self.db.findSourceNoConflicts(attrs["ref"],self.smap)
self.source_ref.setBase(self.source)
if self.address:
self.address.addSourceRef(self.source_ref)
elif self.name:
self.name.addSourceRef(self.source_ref)
elif self.event:
self.event.addSourceRef(self.source_ref)
elif self.attribute:
self.attribute.addSourceRef(self.source_ref)
elif self.placeobj:
self.placeobj.addSourceRef(self.source_ref)
else:
print "Sorry, I'm lost"
def start_source(self,attrs): def start_source(self,attrs):
self.source = self.db.findSourceNoConflicts(attrs["id"],self.smap) self.source = self.db.findSourceNoConflicts(attrs["id"],self.smap)
@ -994,6 +987,8 @@ class GrampsImportParser(GrampsParser):
self.attribute.addSourceRef(self.source_ref) self.attribute.addSourceRef(self.source_ref)
elif self.placeobj: elif self.placeobj:
self.placeobj.addSourceRef(self.source_ref) self.placeobj.addSourceRef(self.source_ref)
elif self.family:
self.family.addSourceRef(self.source_ref)
def start_place(self,attrs): def start_place(self,attrs):
self.placeobj = self.db.findPlaceNoConflicts(attrs['ref'],self.lmap) self.placeobj = self.db.findPlaceNoConflicts(attrs['ref'],self.lmap)

View File

@ -42,6 +42,7 @@ import ListModel
import RelLib import RelLib
import ImageSelect import ImageSelect
import Date import Date
import Sources
from QuestionDialog import QuestionDialog, WarningDialog, SaveDialog from QuestionDialog import QuestionDialog, WarningDialog, SaveDialog
from gettext import gettext as _ from gettext import gettext as _
@ -73,6 +74,11 @@ class Marriage:
self.update_fv = update self.update_fv = update
self.pmap = {} self.pmap = {}
if family:
self.srcreflist = family.getSourceRefList()
else:
self.srcreflist = []
for key in db.getPlaceKeys(): for key in db.getPlaceKeys():
p = db.getPlaceDisplay(key) p = db.getPlaceDisplay(key)
self.pmap[p[0]] = key self.pmap[p[0]] = key
@ -116,6 +122,7 @@ class Marriage:
self.event_list = self.get_widget("marriageEventList") self.event_list = self.get_widget("marriageEventList")
# widgets # widgets
self.complete = self.get_widget('complete')
self.date_field = self.get_widget("marriageDate") self.date_field = self.get_widget("marriageDate")
self.place_field = self.get_widget("marriagePlace") self.place_field = self.get_widget("marriagePlace")
self.cause_field = self.get_widget("marriageCause") self.cause_field = self.get_widget("marriageCause")
@ -135,6 +142,7 @@ class Marriage:
self.lds_temple = self.get_widget("lds_temple") self.lds_temple = self.get_widget("lds_temple")
self.lds_status = self.get_widget("lds_status") self.lds_status = self.get_widget("lds_status")
self.lds_place = self.get_widget("lds_place") self.lds_place = self.get_widget("lds_place")
self.slist = self.get_widget("slist")
self.elist = family.getEventList()[:] self.elist = family.getEventList()[:]
self.alist = family.getAttributeList()[:] self.alist = family.getAttributeList()[:]
@ -176,6 +184,9 @@ class Marriage:
self.lds_temple.entry.set_text("") self.lds_temple.entry.set_text("")
self.seal_stat = 0 self.seal_stat = 0
if self.family.getComplete():
self.complete.set_active(1)
place_list = self.pmap.keys() place_list = self.pmap.keys()
place_list.sort() place_list.sort()
self.autoplace = AutoComp.AutoCombo(self.lds_place, place_list) self.autoplace = AutoComp.AutoCombo(self.lds_place, place_list)
@ -198,6 +209,12 @@ class Marriage:
self.notes_buffer = self.notes_field.get_buffer() self.notes_buffer = self.notes_field.get_buffer()
self.notes_buffer.set_text(family.getNote()) self.notes_buffer.set_text(family.getNote())
self.sourcetab = Sources.SourceTab(self.srcreflist,self,
self.top,self.window,self.slist,
self.top.get_widget('add_src'),
self.top.get_widget('edit_src'),
self.top.get_widget('del_src'))
self.redraw_event_list() self.redraw_event_list()
self.redraw_attr_list() self.redraw_attr_list()
self.window.show() self.window.show()
@ -371,6 +388,9 @@ class Marriage:
if const.save_frel(relation) != self.family.getRelationship(): if const.save_frel(relation) != self.family.getRelationship():
changed = 1 changed = 1
if self.complete.get_active() != self.family.getComplete():
changed = 1
text = self.notes_buffer.get_text(self.notes_buffer.get_start_iter(), text = self.notes_buffer.get_text(self.notes_buffer.get_start_iter(),
self.notes_buffer.get_end_iter(),gtk.FALSE) self.notes_buffer.get_end_iter(),gtk.FALSE)
if text != self.family.getNote(): if text != self.family.getNote():
@ -469,6 +489,10 @@ class Marriage:
self.family.setNote(text) self.family.setNote(text)
Utils.modified() Utils.modified()
if self.complete.get_active() != self.family.getComplete():
self.family.setComplete(self.complete.get_active())
Utils.modified()
date = self.lds_date.get_text() date = self.lds_date.get_text()
temple = self.lds_temple.entry.get_text() temple = self.lds_temple.entry.get_text()
if const.lds_temple_codes.has_key(temple): if const.lds_temple_codes.has_key(temple):
@ -505,6 +529,10 @@ class Marriage:
Utils.destroy_passed_object(self.get_widget("marriageEditor")) Utils.destroy_passed_object(self.get_widget("marriageEditor"))
if self.lists_changed:
self.family.setSourceRefList(self.srcreflist)
Utils.modified()
self.update_lists() self.update_lists()
if self.lists_changed: if self.lists_changed:
Utils.modified() Utils.modified()

View File

@ -1032,7 +1032,7 @@ class Url(Persistent):
return 1 return 1
class Person(Persistent): class Person(SourceNote):
"""Represents an individual person in the gramps database""" """Represents an individual person in the gramps database"""
unknown = 2 unknown = 2
@ -1041,7 +1041,7 @@ class Person(Persistent):
def __init__(self,id=""): def __init__(self,id=""):
"""creates a new Person instance""" """creates a new Person instance"""
SourceNote.__init__(self)
self.id = id self.id = id
self.PrimaryName = None self.PrimaryName = None
self.EventList = [] self.EventList = []
@ -1056,7 +1056,6 @@ class Person(Persistent):
self.addressList = [] self.addressList = []
self.attributeList = [] self.attributeList = []
self.urls = [] self.urls = []
self.note = None
self.paf_uid = "" self.paf_uid = ""
self.position = None self.position = None
self.ancestor = None self.ancestor = None
@ -1363,33 +1362,6 @@ class Person(Persistent):
else: else:
return self.AltFamilyList[0] return self.AltFamilyList[0]
def setNote(self,text):
"""sets the note attached to the Person to the passed text"""
if self.note == None:
self.note = Note()
self.note.set(text)
def getNote(self) :
"""returns the text of the note attached to the Person"""
if self.note == None:
return ""
else:
return self.note.get()
def setNoteObj(self,note):
"""sets the Note instance attached to the Person"""
self.note = note
def getNoteObj(self):
"""returns the Note instance attached to the Person"""
if self.note == None:
self.note = Note()
return self.note
def unique_note(self):
"""Creates a unique instance of the current note"""
self.note = Note(self.note.get())
def setPosition(self,pos): def setPosition(self,pos):
"""sets a graphical location pointer for graphic display (x,y)""" """sets a graphical location pointer for graphic display (x,y)"""
self.position = pos self.position = pos
@ -1706,11 +1678,12 @@ class Witness(Persistent):
def get_comment(self): def get_comment(self):
return self.comment return self.comment
class Family(Persistent): class Family(SourceNote):
"""Represents a family unit in the gramps database""" """Represents a family unit in the gramps database"""
def __init__(self): def __init__(self):
"""creates a new Family instance""" """creates a new Family instance"""
SourceNote.__init__(self)
self.Father = None self.Father = None
self.Mother = None self.Mother = None
self.Children = [] self.Children = []
@ -1720,10 +1693,16 @@ class Family(Persistent):
self.EventList = [] self.EventList = []
self.id = "" self.id = ""
self.photoList = [] self.photoList = []
self.note = Note()
self.attributeList = [] self.attributeList = []
self.position = None self.position = None
self.lds_seal = None self.lds_seal = None
self.complete = 0
def setComplete(self,val):
self.complete = val
def getComplete(self):
return self.complete
def setLdsSeal(self,ord): def setLdsSeal(self,ord):
self.lds_seal = ord self.lds_seal = ord
@ -1758,26 +1737,6 @@ class Family(Persistent):
"""sets the attribute list to the specified list""" """sets the attribute list to the specified list"""
self.attributeList = list self.attributeList = list
def getNote(self):
"""returns the text of the note attached to the Family"""
return self.note.get()
def setNote(self,text):
"""sets the note attached to the Family to the passed text"""
self.note.set(text)
def getNoteObj(self):
"""returns the Note instance attached to the Family"""
return self.note
def unique_note(self):
"""Creates a unique instance of the current note"""
self.note = Note(self.note.get())
def setNoteObj(self,obj):
"""sets the Note instance attached to the Family"""
self.note = obj
def setId(self,id) : def setId(self,id) :
"""sets the gramps ID for the Family""" """sets the gramps ID for the Family"""
self.id = str(id) self.id = str(id)

View File

@ -272,6 +272,8 @@ class XmlWriter:
self.write_ref("parentin",family,3) self.write_ref("parentin",family,3)
self.write_note("note",person.getNote(),3) self.write_note("note",person.getNote(),3)
for s in person.getSourceRefList():
self.dump_source_ref(s,4)
self.g.write(" </person>\n") self.g.write(" </person>\n")
self.g.write(" </people>\n") self.g.write(" </people>\n")
@ -304,6 +306,8 @@ class XmlWriter:
self.write_ref("child",person,3) self.write_ref("child",person,3)
self.write_attribute_list(family.getAttributeList()) self.write_attribute_list(family.getAttributeList())
self.write_note("note",family.getNote(),3) self.write_note("note",family.getNote(),3)
for s in family.getSourceRefList():
self.dump_source_ref(s,3)
self.g.write(" </family>\n") self.g.write(" </family>\n")
self.g.write(" </families>\n") self.g.write(" </families>\n")
@ -475,8 +479,11 @@ class XmlWriter:
def write_family_id(self,family,index=1): def write_family_id(self,family,index=1):
if family: if family:
rel = family.getRelationship() rel = family.getRelationship()
comp = family.getComplete()
sp = " " * index sp = " " * index
self.g.write('%s<family id="%s"' % (sp,family.getId())) self.g.write('%s<family id="%s"' % (sp,family.getId()))
if comp:
self.g.write(' complete="1"')
if rel != "": if rel != "":
self.g.write(' type="%s">\n' % const.save_frel(rel)) self.g.write(' type="%s">\n' % const.save_frel(rel))
else: else: