From 2fa5470b347c0ecfbda1b6e4ddfdb00395119160 Mon Sep 17 00:00:00 2001 From: Benny Malengier Date: Sun, 24 Oct 2010 20:21:37 +0000 Subject: [PATCH] allow adding people from family editor and relview svn: r16042 --- src/Utils.py | 30 +++++++++ src/gui/editors/editfamily.py | 104 ++++++++++++++++++----------- src/plugins/view/personlistview.py | 1 - src/plugins/view/persontreeview.py | 13 +--- src/plugins/view/relview.py | 10 ++- 5 files changed, 106 insertions(+), 52 deletions(-) diff --git a/src/Utils.py b/src/Utils.py index cdaef4f0f..37d4ee4da 100644 --- a/src/Utils.py +++ b/src/Utils.py @@ -167,6 +167,36 @@ def clearHistory_broken(): def wasHistory_broken(): return _history_brokenFlag +#------------------------------------------------------------------------- +# +# Preset a name with a name of family member +# +#------------------------------------------------------------------------- + +def preset_name(basepers, name, sibling=False): + """Fill up name with all family common names of basepers. + If sibling=True, pa/matronymics are retained. + """ + surnlist = [] + primname = basepers.get_primary_name() + prim = False + for surn in primname.get_surname_list(): + if (not sibling) and (surn.get_origintype().value in + [gen.lib.NameOriginType.PATRONYMIC, + gen.lib.NameOriginType.MATRONYMIC]): + continue + surnlist.append(gen.lib.Surname(source=surn)) + if surn.primary: + prim=True + if not surnlist: + surnlist = [gen.lib.Surname()] + name.set_surname_list(surnlist) + if not prim: + name.set_primary_surname(0) + name.set_family_nick_name(primname.get_family_nick_name()) + name.set_group_as(primname.get_group_as()) + name.set_sort_as(primname.get_sort_as()) + #------------------------------------------------------------------------- # # Short hand function to return either the person's name, or an empty diff --git a/src/gui/editors/editfamily.py b/src/gui/editors/editfamily.py index c2fff573e..643a2ba56 100644 --- a/src/gui/editors/editfamily.py +++ b/src/gui/editors/editfamily.py @@ -75,6 +75,7 @@ from QuestionDialog import (ErrorDialog, RunDatabaseRepair, WarningDialog, MessageHideDialog) from gen.utils import get_birth_or_fallback, get_death_or_fallback from gui.selectors import SelectorFactory +from Utils import preset_name SelectPerson = SelectorFactory('Person') @@ -217,8 +218,7 @@ class ChildEmbedList(EmbeddedList): name = self.latin_american() else: name = self.no_name() - person.get_primary_name().set_surname(name[1]) - person.get_primary_name().set_surname_prefix(name[0]) + person.set_primary_name(name) EditPerson(self.dbstate, self.uistate, self.track, person, self.new_child_added) @@ -342,34 +342,54 @@ class ChildEmbedList(EmbeddedList): self.handle_extra_type(mytype, obj) def north_american(self): + """ + Child inherits name from father + """ + name = gen.lib.Name() + #the editor requires a surname + name.add_surname(gen.lib.Surname()) + name.set_primary_surname(0) father_handle = self.family.get_father_handle() if father_handle: father = self.dbstate.db.get_person_from_handle(father_handle) - pname = father.get_primary_name() - return (pname.get_surname_prefix(), pname.get_surname()) - return ("","") + preset_name(father, name) + return name def no_name(self): - return ("","") + name = gen.lib.Name() + #the editor requires a surname + name.add_surname(gen.lib.Surname()) + name.set_primary_surname(0) + return name def latin_american(self): + """ + Child inherits name from father and mother + """ + name = gen.lib.Name() + #the editor requires a surname + name.add_surname(gen.lib.Surname()) + name.set_primary_surname(0) if self.family: father_handle = self.family.get_father_handle() mother_handle = self.family.get_mother_handle() - if not father_handle or not mother_handle: - return ("","") father = self.dbstate.db.get_person_from_handle(father_handle) mother = self.dbstate.db.get_person_from_handle(mother_handle) - if not father or not mother: - return ("","") - fsn = father.get_primary_name().get_surname() - msn = mother.get_primary_name().get_surname() - try: - return ("", "%s %s" % (fsn.split()[0], msn.split()[0])) - except: - return ("", "") + if not father and not mother: + return name + if not father: + preset_name(mother, name) + if not mother: + preset_name(father, name) + #we take first surname, and keep that + mothername = gen.lib.Name() + preset_name(mother, mothername) + preset_name(father, name) + name.set_surname_list(name.get_surname_list[:1].append( + mothername.get_surname_list[:1])) + return name else: - return ("", "") + return name class FastMaleFilter(object): @@ -746,8 +766,7 @@ class EditFamily(EditPrimary): name = self.latin_american_child("mother") else: name = self.no_name() - person.get_primary_name().set_surname(name[1]) - person.get_primary_name().set_surname_prefix(name[0]) + person.set_primary_name(name) EditPerson(self.dbstate, self.uistate, self.track, person, self.new_mother_added) @@ -765,8 +784,7 @@ class EditFamily(EditPrimary): name = self.latin_american_child("father") else: name = self.no_name() - person.get_primary_name().set_surname(name[1]) - person.get_primary_name().set_surname_prefix(name[0]) + person.set_primary_name(name) EditPerson(self.dbstate, self.uistate, self.track, person, self.new_father_added) @@ -1088,7 +1106,11 @@ class EditFamily(EditPrimary): """ Default surname guess. """ - return ("","") + name = gen.lib.Name() + #the editor requires a surname + name.add_surname(gen.lib.Surname()) + name.set_primary_surname(0) + return name def north_american_child(self): """ @@ -1096,12 +1118,16 @@ class EditFamily(EditPrimary): and return their name for the father. """ # for each child, find one with a last name + name = gen.lib.Name() + #the editor requires a surname + name.add_surname(gen.lib.Surname()) + name.set_primary_surname(0) for ref in self.obj.get_child_ref_list(): child = self.db.get_person_from_handle(ref.ref) if child: - pname = child.get_primary_name() - return (pname.get_surname_prefix(), pname.get_surname()) - return ("", "") + preset_name(child, name) + return name + return name def latin_american_child(self, parent): """ @@ -1110,24 +1136,27 @@ class EditFamily(EditPrimary): parent = "mother" | "father" """ + name = gen.lib.Name() + #the editor requires a surname + name.add_surname(gen.lib.Surname()) + name.set_primary_surname(0) # for each child, find one with a last name for ref in self.obj.get_child_ref_list(): child = self.db.get_person_from_handle(ref.ref) if child: pname = child.get_primary_name() - prefix, surname = (pname.get_surname_prefix(), - pname.get_surname()) - if " " in surname: - fsn, msn = surname.split(" ", 1) + preset_name(child, name) + if len(name.get_surname_list()) < 2: + return name else: - fsn, msn = surname, surname - if parent == "father": - return prefix, fsn - elif parent == "mother": - return prefix, msn - else: - return ("", "") - return ("", "") + #return first for the father, and last for the mother + if parent == 'father': + name.set_surname_list(name.get_surname_list()[0]) + return name + else: + name.set_surname_list(name.get_surname_list()[-1]) + return name + return name def button_activated(event, mouse_button): if (event.type == gtk.gdk.BUTTON_PRESS and \ @@ -1137,4 +1166,3 @@ def button_activated(event, mouse_button): return True else: return False - diff --git a/src/plugins/view/personlistview.py b/src/plugins/view/personlistview.py index ac06b86ba..ef19b6a3a 100644 --- a/src/plugins/view/personlistview.py +++ b/src/plugins/view/personlistview.py @@ -36,7 +36,6 @@ from libpersonview import BasePersonView from gui.views.treemodels.peoplemodel import PersonListModel import gen.lib import Errors -from gui.editors import EditPerson #------------------------------------------------------------------------- # diff --git a/src/plugins/view/persontreeview.py b/src/plugins/view/persontreeview.py index 8325179c9..04ec5091a 100644 --- a/src/plugins/view/persontreeview.py +++ b/src/plugins/view/persontreeview.py @@ -37,6 +37,7 @@ from gui.views.treemodels.peoplemodel import PersonTreeModel import gen.lib import Errors from gui.editors import EditPerson +from Utils import preset_name #------------------------------------------------------------------------- # @@ -171,17 +172,9 @@ class PersonTreeView(BasePersonView): handle = model.get_value(node, self.handle_col) basepers = self.dbstate.db.get_person_from_handle(handle) if basepers: - surnlist = [] - primname = basepers.get_primary_name() - for surn in primname.get_surname_list(): - surnlist.append(gen.lib.Surname(source=surn)) - name.set_surname_list(surnlist) - name.set_family_nick_name(primname.get_family_nick_name()) - name.set_group_as(primname.get_group_as()) - name.set_sort_as(primname.get_sort_as()) - + preset_name(basepers, name) + person.set_primary_name(name) try: - person.set_primary_name(name) EditPerson(self.dbstate, self.uistate, [], person) except Errors.WindowActiveError: pass diff --git a/src/plugins/view/relview.py b/src/plugins/view/relview.py index b2f4b600e..2ae0a8203 100644 --- a/src/plugins/view/relview.py +++ b/src/plugins/view/relview.py @@ -60,7 +60,7 @@ from gui.selectors import SelectorFactory import Errors import Bookmarks import const - +from Utils import preset_name from gen.utils import get_birth_or_fallback, get_death_or_fallback _GenderCode = { @@ -1477,12 +1477,16 @@ class RelationshipView(NavigationView): if button_activated(event, _LEFT_BUTTON): callback = lambda x: self.callback_add_child(x, handle) person = gen.lib.Person() + name = gen.lib.Name() + #the editor requires a surname + name.add_surname(gen.lib.Surname()) + name.set_primary_surname(0) family = self.dbstate.db.get_family_from_handle(handle) father = self.dbstate.db.get_person_from_handle( family.get_father_handle()) if father: - name = father.get_primary_name().get_surname() - person.get_primary_name().set_surname(name) + preset_name(father, name) + person.set_primary_name(name) try: EditPerson(self.dbstate, self.uistate, [], person, callback=callback)