diff --git a/ChangeLog b/ChangeLog index c6ac9cc96..b28fe18af 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-05-05 Don Allingham + * src/GrampsDb/_ReadGedcom.py: nickname changes + * src/GrampsDb/_ReadXML.py: nickname changes + * src/GrampsDb/_WriteGedcom.py: nickname changes + * src/GrampsDb/_WriteXML.py: nickname changes + * src/Editors/_EditPerson.py: nickname/call name changes + * src/Editors/_EditName.py: nickname/call name changes + * src/RelLib/_AttributeType.py: nickname changes + * src/RelLib/_Name.py: call name changes + * src/RelLib/_Person.py: nickname changes + * src/MergePeople.py: nickname elimination + 2006-05-05 Alex Roitman * src/DisplayTabs/_MediaBackRefList.py: Import model. diff --git a/src/Editors/_EditName.py b/src/Editors/_EditName.py index 64fa0c430..52b8ed044 100644 --- a/src/Editors/_EditName.py +++ b/src/Editors/_EditName.py @@ -114,20 +114,34 @@ class EditName(EditSecondary): self.db.readonly) self.given_field = MonitoredEntry( - self.top.get_widget("alt_given"), self.obj.set_first_name, - self.obj.get_first_name, self.db.readonly) + self.top.get_widget("alt_given"), + self.obj.set_first_name, + self.obj.get_first_name, + self.db.readonly) + + self.call_field = MonitoredEntry( + self.top.get_widget("call"), + self.obj.set_call_name, + self.obj.get_call_name, + self.db.readonly) self.title_field = MonitoredEntry( - self.top.get_widget("alt_title"), self.obj.set_title, - self.obj.get_title, self.db.readonly) + self.top.get_widget("alt_title"), + self.obj.set_title, + self.obj.get_title, + self.db.readonly) self.suffix_field = MonitoredEntry( - self.top.get_widget("alt_suffix"), self.obj.set_suffix, - self.obj.get_suffix, self.db.readonly) + self.top.get_widget("alt_suffix"), + self.obj.set_suffix, + self.obj.get_suffix, + self.db.readonly) self.patronymic_field = MonitoredEntry( - self.top.get_widget("patronymic"), self.obj.set_patronymic, - self.obj.get_patronymic, self.db.readonly) + self.top.get_widget("patronymic"), + self.obj.set_patronymic, + self.obj.get_patronymic, + self.db.readonly) self.surname_field = MonitoredEntry( self.top.get_widget("alt_surname"), @@ -137,8 +151,10 @@ class EditName(EditSecondary): changed=self.update_group_as) self.prefix_field = MonitoredEntry( - self.top.get_widget("alt_prefix"), self.obj.set_surname_prefix, - self.obj.get_surname_prefix, self.db.readonly) + self.top.get_widget("alt_prefix"), + self.obj.set_surname_prefix, + self.obj.get_surname_prefix, + self.db.readonly) self.date = MonitoredDate( self.top.get_widget("date"), diff --git a/src/Editors/_EditPerson.py b/src/Editors/_EditPerson.py index 519b31ca1..bfec2e89e 100644 --- a/src/Editors/_EditPerson.py +++ b/src/Editors/_EditPerson.py @@ -207,6 +207,12 @@ class EditPerson(EditPrimary): self.pname.get_suffix, self.db.readonly) + self.call = GrampsWidgets.MonitoredEntry( + self.top.get_widget("call"), + self.pname.set_call_name, + self.pname.get_call_name, + self.db.readonly) + self.given = GrampsWidgets.MonitoredEntry( self.top.get_widget("given_name"), self.pname.set_first_name, @@ -559,7 +565,7 @@ class EditPerson(EditPrimary): any changes. """ for obj in (self.suffix, self.prefix, self.given, self.title, - self.ntype_field, self.surname_field): + self.ntype_field, self.surname_field, self.call): obj.update() def load_person_image(self): diff --git a/src/GrampsDb/_ReadGedcom.py b/src/GrampsDb/_ReadGedcom.py index d41b619e8..791e1e176 100644 --- a/src/GrampsDb/_ReadGedcom.py +++ b/src/GrampsDb/_ReadGedcom.py @@ -2379,13 +2379,19 @@ class GedcomParser: state.name.set_suffix(matches[2]) def func_name_nick(self,matches,state): - state.person.set_nick_name(matches[2]) + attr = RelLib.Attribute() + attr.set_type(RelLib.AttributeType.NICKNAME) + attr.set_value(matches[2]) + state.person.add_attribute(attr) def func_name_aka(self,matches,state): lname = matches[2].split() l = len(lname) if l == 1: - state.person.set_nick_name(matches[2]) + attr = RelLib.Attribute() + attr.set_type(RelLib.AttributeType.NICKNAME) + attr.set_value(matches[2]) + state.person.add_attribute(attr) else: name = RelLib.Name() name.set_surname(lname[-1]) diff --git a/src/GrampsDb/_ReadXML.py b/src/GrampsDb/_ReadXML.py index fccc9b044..a892fe78c 100644 --- a/src/GrampsDb/_ReadXML.py +++ b/src/GrampsDb/_ReadXML.py @@ -1601,7 +1601,10 @@ class GrampsParser: def stop_nick(self,tag): if self.person: - self.person.set_nick_name(tag) + attr = RelLib.Attribute() + attr.set_type(RelLib.AttributeType.NICKNAME) + attr.set_value(tag) + self.person.add_attribute(attr) def stop_note(self,tag): self.in_note = 0 diff --git a/src/GrampsDb/_WriteGedcom.py b/src/GrampsDb/_WriteGedcom.py index 46a38f3a8..240b18cfa 100644 --- a/src/GrampsDb/_WriteGedcom.py +++ b/src/GrampsDb/_WriteGedcom.py @@ -885,13 +885,14 @@ class GedcomWriter: restricted = self.restrict and Utils.probably_alive (person,self.db) self.prefn(person) primaryname = person.get_primary_name () + nickname = "" if restricted and self.living: primaryname = RelLib.Name (primaryname) primaryname.set_first_name ("Living") - nickname = "" + #nickname = "" else: primaryname = person.get_primary_name () - nickname = person.get_nick_name () + #nickname = person.get_nick_name () if restricted and self.exclnotes: primaryname = RelLib.Name (primaryname) diff --git a/src/GrampsDb/_WriteXML.py b/src/GrampsDb/_WriteXML.py index 73d6a46d4..49f241828 100644 --- a/src/GrampsDb/_WriteXML.py +++ b/src/GrampsDb/_WriteXML.py @@ -397,7 +397,6 @@ class XmlWriter: for name in person.get_alternate_names(): self.dump_name(name,True,index+1) - self.write_line("nick",person.get_nick_name(),index+1) self.dump_event_ref(person.birth_ref,index+1) self.dump_event_ref(person.death_ref,index+1) for event_ref in person.get_event_ref_list(): diff --git a/src/MergePeople.py b/src/MergePeople.py index a0b3a5a1c..91a2f4c8f 100644 --- a/src/MergePeople.py +++ b/src/MergePeople.py @@ -456,11 +456,6 @@ class MergePeople: The other person's name is stored as an alternate name if it is not entirely identical to the destination person's primary name. - In the current implementation, If only one person has a - nickname, it is assigned as the merged person's nickname. If - both people have nicknames, then the nickname of the second - person is lost. - Remaining alternate names are then added to the merged person's alternate names. """ @@ -471,11 +466,6 @@ class MergePeople: if not p2_name.is_equal(p1_name): new.add_alternate_name(p2_name) - if self.p1.get_nick_name() == "": - new.set_nick_name(self.p2.get_nick_name()) - else: - new.set_nick_name(self.p1.get_nick_name()) - for name in self.p1.get_alternate_names(): new.add_alternate_name(name) for name in self.p2.get_alternate_names(): diff --git a/src/RelLib/_AttributeType.py b/src/RelLib/_AttributeType.py index 38651584e..44ebb0dbb 100644 --- a/src/RelLib/_AttributeType.py +++ b/src/RelLib/_AttributeType.py @@ -33,6 +33,7 @@ class AttributeType(GrampsType): NATIONAL = 4 NUM_CHILD = 5 SSN = 6 + NICKNAME = 7 _CUSTOM = CUSTOM _DEFAULT = ID @@ -47,6 +48,7 @@ class AttributeType(GrampsType): (NUM_CHILD , _("Number of Children"), "Number of Children"), (SSN , _("Social Security Number"), "Social Security Number"), (NUM_CHILD , _("Number of Children"), "Number of Children"), + (NICKNAME , _("Nickname"), "Nickname"), ] _I2SMAP = init_map(_DATAMAP, 0, 1) diff --git a/src/RelLib/_Name.py b/src/RelLib/_Name.py index 9272dcef0..97554540f 100644 --- a/src/RelLib/_Name.py +++ b/src/RelLib/_Name.py @@ -68,7 +68,7 @@ class Name(BaseObject,PrivacyBase,SourceBase,NoteBase,DateBase): (privacy,source_list,note,date, self.first_name,self.surname,self.suffix,self.title, name_type,self.prefix,self.patronymic,self.sname, - self.group_as,self.sort_as,self.display_as) = data + self.group_as,self.sort_as,self.display_as,self.call) = data self.type = NameType(name_type) PrivacyBase.unserialize(self,privacy) SourceBase.unserialize(self,source_list) @@ -90,6 +90,7 @@ class Name(BaseObject,PrivacyBase,SourceBase,NoteBase,DateBase): self.group_as = source.group_as self.sort_as = source.sort_as self.display_as = source.display_as + self.call = source.call else: PrivacyBase.__init__(self,source) SourceBase.__init__(self,source) @@ -106,6 +107,7 @@ class Name(BaseObject,PrivacyBase,SourceBase,NoteBase,DateBase): self.group_as = "" self.sort_as = self.DEF self.display_as = self.DEF + self.call = '' def serialize(self): return (PrivacyBase.serialize(self), @@ -114,13 +116,13 @@ class Name(BaseObject,PrivacyBase,SourceBase,NoteBase,DateBase): DateBase.serialize(self), self.first_name,self.surname,self.suffix,self.title, self.type.serialize(),self.prefix,self.patronymic,self.sname, - self.group_as,self.sort_as,self.display_as) + self.group_as,self.sort_as,self.display_as,self.call) def unserialize(self,data): (privacy,source_list,note,date, self.first_name,self.surname,self.suffix,self.title, name_type,self.prefix,self.patronymic,self.sname, - self.group_as,self.sort_as,self.display_as) = data + self.group_as,self.sort_as,self.display_as,self.call) = data self.type.unserialize(name_type) PrivacyBase.unserialize(self,privacy) SourceBase.unserialize(self,source_list) @@ -136,7 +138,7 @@ class Name(BaseObject,PrivacyBase,SourceBase,NoteBase,DateBase): @rtype: list """ return [self.first_name,self.surname,self.suffix,self.title, - str(self.type),self.prefix,self.patronymic] + str(self.type),self.prefix,self.patronymic, self.call] def get_text_data_child_list(self): """ @@ -218,6 +220,20 @@ class Name(BaseObject,PrivacyBase,SourceBase,NoteBase,DateBase): """ return self.display_as + def get_call_name(self): + """ + Returns the call name. The call name's exact definition is not predetermined, + and may be locale specific. + """ + return self.call + + def set_call_name(self,val): + """ + Returns the call name. The call name's exact definition is not predetermined, + and may be locale specific. + """ + self.call = val + def get_surname_prefix(self): """ Returns the prefix (or article) of a surname. The prefix is not diff --git a/src/RelLib/_Person.py b/src/RelLib/_Person.py index 625e748a8..a4e83bdbd 100644 --- a/src/RelLib/_Person.py +++ b/src/RelLib/_Person.py @@ -49,6 +49,7 @@ from _EventRef import EventRef from _LdsOrd import LdsOrd from _PersonRef import PersonRef from _MarkerType import MarkerType +from _AttributeType import AttributeType #------------------------------------------------------------------------- # @@ -102,7 +103,6 @@ class Person(PrimaryObject,SourceBase,NoteBase,MediaBase, self.event_ref_list = [] self.family_list = [] self.parent_family_list = [] - self.nickname = "" self.alternate_names = [] self.person_ref_list = [] self.gender = Person.UNKNOWN @@ -147,23 +147,22 @@ class Person(PrimaryObject,SourceBase,NoteBase,MediaBase, self.gender, # 2 self.primary_name.serialize(), # 3 [name.serialize() for name in self.alternate_names], # 4 - unicode(self.nickname), # 5 - death_ref, # 6 - birth_ref, # 7 - [er.serialize() for er in self.event_ref_list], # 8 - self.family_list, # 9 - self.parent_family_list, # 10 - MediaBase.serialize(self), # 11 - AddressBase.serialize(self), # 12 - AttributeBase.serialize(self), # 13 - UrlBase.serialize(self), # 14 - LdsOrdBase.serialize(self), # 15 - SourceBase.serialize(self), # 16 - NoteBase.serialize(self), # 17 - self.change, # 18 - self.marker.serialize(), # 19 - self.private, # 20 - [pr.serialize() for pr in self.person_ref_list] # 21 + death_ref, # 5 + birth_ref, # 6 + [er.serialize() for er in self.event_ref_list], # 7 + self.family_list, # 8 + self.parent_family_list, # 9 + MediaBase.serialize(self), # 10 + AddressBase.serialize(self), # 11 + AttributeBase.serialize(self), # 12 + UrlBase.serialize(self), # 13 + LdsOrdBase.serialize(self), # 14 + SourceBase.serialize(self), # 15 + NoteBase.serialize(self), # 16 + self.change, # 17 + self.marker.serialize(), # 18 + self.private, # 19 + [pr.serialize() for pr in self.person_ref_list] # 20 ) def unserialize(self, data): @@ -181,23 +180,22 @@ class Person(PrimaryObject,SourceBase,NoteBase,MediaBase, self.gender, # 2 primary_name, # 3 alternate_names, # 4 - self.nickname, # 5 - death_ref, # 6 - birth_ref, # 7 - event_ref_list, # 8 - self.family_list, # 9 - self.parent_family_list, # 10 - media_list, # 11 - address_list, # 12 - attribute_list, # 13 - urls, # 14 - lds_ord_list, # 15 - source_list, # 16 - note, # 17 - self.change, # 18 - marker, # 19 - self.private, # 20 - person_ref_list, # 21 + death_ref, # 5 + birth_ref, # 6 + event_ref_list, # 7 + self.family_list, # 8 + self.parent_family_list, # 9 + media_list, # 10 + address_list, # 11 + attribute_list, # 12 + urls, # 13 + lds_ord_list, # 14 + source_list, # 15 + note, # 16 + self.change, # 17 + marker, # 18 + self.private, # 19 + person_ref_list, # 20 ) = data self.marker.unserialize(marker) @@ -299,7 +297,7 @@ class Person(PrimaryObject,SourceBase,NoteBase,MediaBase, @return: Returns the list of all textual attributes of the object. @rtype: list """ - return [self.nickname, self.gramps_id] + return [self.gramps_id] def get_text_data_child_list(self): """ @@ -402,23 +400,13 @@ class Person(PrimaryObject,SourceBase,NoteBase,MediaBase, """ self.alternate_names.append(name) - def set_nick_name(self, name): - """ - Sets the nickname field for the Person - - @param name: Nickname to be assigned - @type name: str - """ - self.nickname = name - - def get_nick_name(self) : - """ - Returns the nickname for the Person - - @returns: Returns the nickname associated with the Person - @rtype str - """ - return self.nickname + def get_nick_name(self): + nicks = [ attr for attr in self.attribute_list \ + if int(attr.type) == AttributeType.NICKNAME ] + if len(nicks) == 0: + return u'' + else: + return nicks[0].get_value() def set_gender(self, gender) : """