Better handing of parents/spouses in family view.

svn: r858
This commit is contained in:
Don Allingham 2002-03-26 15:43:04 +00:00
parent 507cde7298
commit 54da58996a
5 changed files with 617 additions and 770 deletions

View File

@ -82,16 +82,6 @@ class AddSpouse:
self.spouse_list = self.glade.get_widget("spouseList") self.spouse_list = self.glade.get_widget("spouseList")
self.relation_def = self.glade.get_widget("reldef") self.relation_def = self.glade.get_widget("reldef")
self.top = self.glade.get_widget("spouseDialog") self.top = self.glade.get_widget("spouseDialog")
self.given = self.glade.get_widget("given")
self.surname = self.glade.get_widget("surname")
self.surname_combo = self.glade.get_widget("surname_combo")
self.rel_combo.set_popdown_strings(const.familyRelations)
Utils.attach_surnames(self.surname_combo)
# Typing CR selects 'Add Existing' button
self.top.editable_enters(self.given)
self.top.editable_enters(self.surname)
self.name_list = self.db.getPersonMap().values() self.name_list = self.db.getPersonMap().values()
self.name_list.sort(sort.by_last_name) self.name_list.sort(sort.by_last_name)
@ -114,38 +104,26 @@ class AddSpouse:
Called when the spouse to be added does not exist, and needs Called when the spouse to be added does not exist, and needs
to be created and added to the database to be created and added to the database
""" """
spouse = RelLib.Person() import QuickAdd
self.db.addPerson(spouse)
name = spouse.getPrimaryName()
name.setSurname(string.strip(self.surname.get_text()))
name.setFirstName(string.strip(self.given.get_text()))
relation = const.save_frel(self.relation_type.get_text()) relation = const.save_frel(self.relation_type.get_text())
if relation == "Partners": if relation == "Partners":
spouse.setGender(self.person.getGender()) if self.person.getGender() == RelLib.Person.male:
gen = "male"
else:
gen = "female"
elif self.person.getGender() == RelLib.Person.male: elif self.person.getGender() == RelLib.Person.male:
spouse.setGender(RelLib.Person.female) gen = "female"
else: else:
spouse.setGender(RelLib.Person.male) gen = "male"
family = self.db.newFamily() QuickAdd.QuickAdd(self.db,gen,self.update_list)
family.setRelationship(relation)
self.person.addFamily(family) def update_list(self,person):
spouse.addFamily(family) self.name_list.append(person)
self.name_list.sort(sort.by_last_name)
if self.person.getGender() == RelLib.Person.male: self.addperson(person)
family.setMother(spouse) self.relation_type_changed(self.relation_type)
family.setFather(self.person)
else:
family.setFather(spouse)
family.setMother(self.person)
Utils.destroy_passed_object(obj)
Utils.modified()
self.addperson(spouse)
self.update(family)
def select_spouse_clicked(self,obj): def select_spouse_clicked(self,obj):
""" """

View File

@ -70,8 +70,6 @@ class ChooseParents:
self.fcombo = self.glade.get_widget("prel_combo") self.fcombo = self.glade.get_widget("prel_combo")
self.prel = self.glade.get_widget("prel") self.prel = self.glade.get_widget("prel")
self.title = self.glade.get_widget("chooseTitle") self.title = self.glade.get_widget("chooseTitle")
self.father_name = self.glade.get_widget("fatherName")
self.mother_name = self.glade.get_widget("motherName")
self.father_list = self.glade.get_widget("fatherList") self.father_list = self.glade.get_widget("fatherList")
self.mother_list = self.glade.get_widget("motherList") self.mother_list = self.glade.get_widget("motherList")
self.flabel = self.glade.get_widget("flabel") self.flabel = self.glade.get_widget("flabel")
@ -91,8 +89,7 @@ class ChooseParents:
"on_motherList_select_row" : self.mother_list_select_row, "on_motherList_select_row" : self.mother_list_select_row,
"on_fatherList_select_row" : self.father_list_select_row, "on_fatherList_select_row" : self.father_list_select_row,
"on_save_parents_clicked" : self.save_parents_clicked, "on_save_parents_clicked" : self.save_parents_clicked,
"on_addmother_clicked" : self.add_mother_clicked, "on_add_parent_clicked" : self.add_parent_clicked,
"on_addfather_clicked" : self.add_father_clicked,
"on_prel_changed" : self.parent_relation_changed, "on_prel_changed" : self.parent_relation_changed,
"on_combo_insert_text" : Utils.combo_insert_text, "on_combo_insert_text" : Utils.combo_insert_text,
"destroy_passed_object" : Utils.destroy_passed_object "destroy_passed_object" : Utils.destroy_passed_object
@ -110,9 +107,6 @@ class ChooseParents:
type = obj.get_text() type = obj.get_text()
self.father_name.set_text(GrampsCfg.nameof(self.father))
self.mother_name.set_text(GrampsCfg.nameof(self.mother))
self.father_list.freeze() self.father_list.freeze()
self.mother_list.freeze() self.mother_list.freeze()
self.father_list.clear() self.father_list.clear()
@ -128,11 +122,17 @@ class ChooseParents:
people.sort(sort.by_last_name) people.sort(sort.by_last_name)
father_index = 1 father_index = 1
mother_index = 1 mother_index = 1
fsel = 0
msel = 0
for person in people: for person in people:
if person == self.person: if person == self.person:
continue continue
if person.getGender() == RelLib.Person.unknown: if person.getGender() == RelLib.Person.unknown:
continue continue
if self.father == person:
fsel = father_index
if self.mother == person:
msel = mother_index
rdata = [Utils.phonebook_name(person),Utils.birthday(person)] rdata = [Utils.phonebook_name(person),Utils.birthday(person)]
if type == "Partners": if type == "Partners":
self.father_list.append(rdata) self.father_list.append(rdata)
@ -150,12 +150,17 @@ class ChooseParents:
self.mother_list.set_row_data(mother_index,person) self.mother_list.set_row_data(mother_index,person)
mother_index = mother_index + 1 mother_index = mother_index + 1
self.mother_list.select_row(msel,0)
self.mother_list.moveto(msel,0)
self.father_list.select_row(fsel,0)
self.father_list.moveto(fsel,0)
if type == "Partners": if type == "Partners":
self.mlabel.set_text(_("Parent")) self.mlabel.set_label(_("Parent"))
self.flabel.set_text(_("Parent")) self.flabel.set_label(_("Parent"))
else: else:
self.mlabel.set_text(_("Mother")) self.mlabel.set_label(_("Mother"))
self.flabel.set_text(_("Father")) self.flabel.set_label(_("Father"))
self.mother_list.thaw() self.mother_list.thaw()
self.father_list.thaw() self.father_list.thaw()
@ -188,17 +193,18 @@ class ChooseParents:
def mother_list_select_row(self,obj,a,b,c): def mother_list_select_row(self,obj,a,b,c):
self.mother = obj.get_row_data(a) self.mother = obj.get_row_data(a)
self.mother_name.set_text(GrampsCfg.nameof(self.mother))
def father_list_select_row(self,obj,a,b,c): def father_list_select_row(self,obj,a,b,c):
self.father = obj.get_row_data(a) self.father = obj.get_row_data(a)
self.father_name.set_text(GrampsCfg.nameof(self.father))
def save_parents_clicked(self,obj): def save_parents_clicked(self,obj):
mother_rel = const.childRelations[self.mother_rel.get_text()] mother_rel = const.childRelations[self.mother_rel.get_text()]
father_rel = const.childRelations[self.father_rel.get_text()] father_rel = const.childRelations[self.father_rel.get_text()]
type = const.save_frel(self.prel.get_text()) type = const.save_frel(self.prel.get_text())
msel = self.mother_list.selection
fsel = self.father_list.selection
if self.father or self.mother: if self.father or self.mother:
if self.mother and not self.father: if self.mother and not self.father:
if self.mother.getGender() == RelLib.Person.male: if self.mother.getGender() == RelLib.Person.male:
@ -230,25 +236,13 @@ class ChooseParents:
self.change_family_type(self.family,mother_rel,father_rel) self.change_family_type(self.family,mother_rel,father_rel)
self.family_update(None) self.family_update(None)
def add_parent_clicked(self,obj,sex): def add_new_parent(self,person):
self.xml = libglade.GladeXML(const.gladeFile,"addperson") self.parent_relation_changed(self.prel)
self.xml.get_widget(sex).set_active(1) self.full_update()
self.xml.signal_autoconnect({
"on_addfather_close": self.add_parent_close,
"on_combo_insert_text" : Utils.combo_insert_text,
"destroy_passed_object" : Utils.destroy_passed_object
})
window = self.xml.get_widget("addperson") def add_parent_clicked(self,obj):
window.editable_enters(self.xml.get_widget("given")) import QuickAdd
window.editable_enters(self.xml.get_widget("surname")) QuickAdd.QuickAdd(self.db,"male",self.add_new_parent)
Utils.attach_surnames(self.xml.get_widget("surnameCombo"))
def add_father_clicked(self,obj):
self.add_parent_clicked(obj,"male")
def add_mother_clicked(self,obj):
self.add_parent_clicked(obj,"female")
def change_family_type(self,family,mother_rel,father_rel): def change_family_type(self,family,mother_rel,father_rel):
""" """

62
gramps/src/QuickAdd.py Normal file
View File

@ -0,0 +1,62 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
import libglade
import Utils
import AutoComp
import const
import RelLib
class QuickAdd:
def __init__(self,db,sex,callback):
self.db = db
self.callback = callback
self.xml = libglade.GladeXML(const.gladeFile,"addperson")
self.xml.get_widget(sex).set_active(1)
self.xml.signal_autoconnect({
"on_addfather_close": self.close,
"destroy_passed_object" : Utils.destroy_passed_object
})
self.window = self.xml.get_widget("addperson")
self.window.editable_enters(self.xml.get_widget("given"))
self.window.editable_enters(self.xml.get_widget("surname"))
self.c = AutoComp.AutoCombo(self.xml.get_widget("surnameCombo"),
const.surnames)
def close(self,obj):
surname = self.xml.get_widget("surname").get_text()
given = self.xml.get_widget("given").get_text()
person = RelLib.Person()
self.db.addPerson(person)
name = person.getPrimaryName()
name.setSurname(surname)
name.setFirstName(given)
if self.xml.get_widget("male").get_active():
person.setGender(RelLib.Person.male)
self.father = person
else:
person.setGender(RelLib.Person.female)
self.mother = person
Utils.modified()
Utils.destroy_passed_object(self.window)
self.callback(person)

File diff suppressed because it is too large Load Diff

View File

@ -89,6 +89,7 @@ class Gramps:
self.active_mother = None self.active_mother = None
self.active_parents = None self.active_parents = None
self.parents_index = 0 self.parents_index = 0
self.spouse_index = 0
self.active_person = None self.active_person = None
self.active_spouse = None self.active_spouse = None
self.bookmarks = None self.bookmarks = None
@ -176,7 +177,8 @@ class Gramps:
self.qual_label = self.gtop.get_widget("qual") self.qual_label = self.gtop.get_widget("qual")
self.child_type = self.gtop.get_widget("childtype") self.child_type = self.gtop.get_widget("childtype")
self.spouse_tab = self.gtop.get_widget("lab_or_list") self.spouse_tab = self.gtop.get_widget("lab_or_list")
self.spouse_ptab = self.gtop.get_widget("rel_notebook") self.pref_spouse = self.gtop.get_widget("pref_spouse")
self.multi_spouse= self.gtop.get_widget("multi_spouse")
self.spouse_pref = self.gtop.get_widget("prefrel") self.spouse_pref = self.gtop.get_widget("prefrel")
self.spouse_edit = self.gtop.get_widget("edit_sp") self.spouse_edit = self.gtop.get_widget("edit_sp")
self.spouse_del = self.gtop.get_widget("delete_sp") self.spouse_del = self.gtop.get_widget("delete_sp")
@ -211,9 +213,11 @@ class Gramps:
self.gtop.signal_autoconnect({ self.gtop.signal_autoconnect({
"delete_event" : self.delete_event, "delete_event" : self.delete_event,
"destroy_passed_object" : Utils.destroy_passed_object, "destroy_passed_object" : Utils.destroy_passed_object,
"on_preffam_toggled" : self.on_preferred_fam_toggled, "on_preffam_clicked" : self.on_preferred_fam_toggled,
"on_family_up_clicked" : self.family_up_clicked, "on_family_up_clicked" : self.family_up_clicked,
"on_family_down_clicked" : self.family_down_clicked, "on_family_down_clicked" : self.family_down_clicked,
"on_spouse_up_clicked" : self.spouse_up_clicked,
"on_spouse_down_clicked" : self.spouse_down_clicked,
"on_prefrel_toggled" : self.on_preferred_rel_toggled, "on_prefrel_toggled" : self.on_preferred_rel_toggled,
"on_about_activate" : self.on_about_activate, "on_about_activate" : self.on_about_activate,
"on_add_bookmark_activate" : self.on_add_bookmark_activate, "on_add_bookmark_activate" : self.on_add_bookmark_activate,
@ -285,7 +289,6 @@ class Gramps:
"on_show_plugin_status" : self.on_show_plugin_status, "on_show_plugin_status" : self.on_show_plugin_status,
"on_source_list_button_press_event" : self.source_view.on_button_press_event, "on_source_list_button_press_event" : self.source_view.on_button_press_event,
"on_sources_activate" : self.on_sources_activate, "on_sources_activate" : self.on_sources_activate,
"on_spouselist_changed" : self.on_spouselist_changed,
"on_swap_clicked" : self.on_swap_clicked, "on_swap_clicked" : self.on_swap_clicked,
"on_tools_clicked" : self.on_tools_clicked, "on_tools_clicked" : self.on_tools_clicked,
"on_gramps_home_page_activate" : self.on_gramps_home_page_activate, "on_gramps_home_page_activate" : self.on_gramps_home_page_activate,
@ -1300,18 +1303,12 @@ class Gramps:
filter.hide() filter.hide()
filter.set_sensitive(obj.get_data("qual")) filter.set_sensitive(obj.get_data("qual"))
def on_spouselist_changed(self,obj):
if self.active_person:
self.display_marriage(obj.get_data("family"))
def on_preferred_rel_toggled(self,obj): def on_preferred_rel_toggled(self,obj):
self.spouse_ptab.set_page(1)
self.spouse_pref.set_active(0)
self.active_person.setPreferred(self.active_family) self.active_person.setPreferred(self.active_family)
self.load_family(self.active_family)
Utils.modified() Utils.modified()
def on_preferred_fam_toggled(self,obj): def on_preferred_fam_toggled(self,obj):
obj.set_active(0)
self.active_person.setMainParents(self.active_parents) self.active_person.setMainParents(self.active_parents)
self.change_parents(self.active_parents) self.change_parents(self.active_parents)
Utils.modified() Utils.modified()
@ -1389,7 +1386,6 @@ class Gramps:
self.active_family = family self.active_family = family
if self.active_family: if self.active_family:
flist = self.active_person.getFamilyList() flist = self.active_person.getFamilyList()
if self.active_family:
if self.active_person != self.active_family.getFather() and \ if self.active_person != self.active_family.getFather() and \
self.active_family != self.active_family.getMother(): self.active_family != self.active_family.getMother():
if len(flist) > 0: if len(flist) > 0:
@ -1397,6 +1393,8 @@ class Gramps:
else: else:
self.active_family = None self.active_family = None
self.spouse_index = 0
family_types = [] family_types = []
main_family = None main_family = None
@ -1425,35 +1423,37 @@ class Gramps:
flist = self.active_person.getFamilyList() flist = self.active_person.getFamilyList()
number_of_families = len(flist) number_of_families = len(flist)
if number_of_families > 1: if number_of_families > 1:
myMenu = gtk.GtkMenu() if self.active_family == None:
index = 0 self.active_family = flist[0]
opt_index = 0 else:
for f in flist: for f in flist:
person = None if f == self.active_family:
if f.getMother() == self.active_person: break
if f.getFather() != None: self.spouse_index = self.spouse_index + 1
person = f.getFather()
else:
if f.getMother() != None:
person = f.getMother()
menuitem = gtk.GtkMenuItem(GrampsCfg.nameof(person)) self.pref_spouse.show()
myMenu.append(menuitem) self.multi_spouse.show()
menuitem.set_data("person",person) if self.active_family == flist[0]:
menuitem.set_data("family",f) self.pref_spouse.set_sensitive(0)
menuitem.connect("activate",self.on_spouselist_changed) msg = _("Preferred Relationship (%d of %d)") % (self.spouse_index+1,
menuitem.show() len(flist))
if family and f == family: else:
opt_index = index msg = _("Relationship (%d of %d)") % (self.spouse_index+1,
index = index + 1 len(flist))
self.spouse_menu.set_menu(myMenu) self.pref_spouse.set_sensitive(1)
self.spouse_menu.set_history(opt_index)
self.spouse_tab.set_page(1) self.gtop.get_widget('rel_frame').set_label(msg)
self.spouse_pref.set_active(0) if self.active_person != self.active_family.getFather():
spouse = self.active_family.getFather()
else:
spouse = self.active_family.getMother()
self.spouse_text.set_text(GrampsCfg.nameof(spouse))
self.spouse_edit.set_sensitive(1) self.spouse_edit.set_sensitive(1)
self.spouse_del.set_sensitive(1) self.spouse_del.set_sensitive(1)
elif number_of_families == 1: elif number_of_families == 1:
self.spouse_tab.set_page(0) self.pref_spouse.hide()
self.multi_spouse.hide()
f = self.active_person.getFamilyList()[0] f = self.active_person.getFamilyList()[0]
if self.active_person != f.getFather(): if self.active_person != f.getFather():
spouse = f.getFather() spouse = f.getFather()
@ -1461,18 +1461,17 @@ class Gramps:
spouse = f.getMother() spouse = f.getMother()
self.active_spouse = spouse self.active_spouse = spouse
self.spouse_text.set_text(GrampsCfg.nameof(spouse)) self.spouse_text.set_text(GrampsCfg.nameof(spouse))
self.spouse_text.set_data("person",spouse)
self.spouse_text.set_data("family",self.active_person.getFamilyList()[0])
self.spouse_edit.set_sensitive(1) self.spouse_edit.set_sensitive(1)
self.spouse_del.set_sensitive(1) self.spouse_del.set_sensitive(1)
self.gtop.get_widget('rel_frame').set_label(_("Relationship"))
else: else:
self.spouse_tab.set_page(0) self.pref_spouse.hide()
self.multi_spouse.hide()
self.spouse_text.set_text("") self.spouse_text.set_text("")
self.spouse_text.set_data("person",None)
self.spouse_text.set_data("family",None)
self.active_spouse = None self.active_spouse = None
self.spouse_edit.set_sensitive(0) self.spouse_edit.set_sensitive(0)
self.spouse_del.set_sensitive(0) self.spouse_del.set_sensitive(0)
self.gtop.get_widget('rel_frame').set_label(_("No Relationship"))
if number_of_families > 0: if number_of_families > 0:
if family: if family:
@ -1577,15 +1576,6 @@ class Gramps:
if family: if family:
flist = self.active_person.getFamilyList() flist = self.active_person.getFamilyList()
if len(flist) <= 1:
self.spouse_ptab.hide()
else:
if family == flist[0]:
self.spouse_ptab.set_page(1)
else:
self.spouse_ptab.set_page(0)
self.spouse_ptab.show()
if self.active_person.getGender() == Person.male: if self.active_person.getGender() == Person.male:
self.active_spouse = family.getMother() self.active_spouse = family.getMother()
else: else:
@ -1855,6 +1845,28 @@ class Gramps:
self.active_parents = flist[self.parents_index][0] self.active_parents = flist[self.parents_index][0]
self.change_parents(self.active_parents) self.change_parents(self.active_parents)
def spouse_up_clicked(self,obj):
if self.active_family == None:
return
flist = self.active_person.getFamilyList()
if self.spouse_index == 0:
self.spouse_index = len(flist)-1
else:
self.spouse_index = self.spouse_index - 1
self.active_family = flist[self.spouse_index]
self.load_family()
def spouse_down_clicked(self,obj):
if self.active_family == None:
return
flist = self.active_person.getFamilyList()
if self.spouse_index == len(flist)-1:
self.spouse_index = 0
else:
self.spouse_index = self.spouse_index + 1
self.active_family = flist[self.spouse_index]
self.load_family()
def export_callback(self,obj,plugin_function): def export_callback(self,obj,plugin_function):
"""Call the export plugin, with the active person and database""" """Call the export plugin, with the active person and database"""
if self.active_person: if self.active_person: