* src/PedView.py: Add new submenu showing people that share the same event. This for example lists witnesses.

svn: r5638
This commit is contained in:
Martin Hawlisch 2005-12-29 18:09:06 +00:00
parent e8cc3b5c0d
commit f21a0c8fcb
2 changed files with 77 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2005-12-29 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/PedView.py: Add new submenu showing people that share
the same event. This for example lists witnesses.
2005-12-28 Don Allingham <don@gramps-project.org>
* src/Makefile.am: add PythonMime and GnomeMime
* src/GnomeMime.py: GNOME based mime handling

View File

@ -621,6 +621,9 @@ class PedView(PageView.PersonNavView):
edit_item.show()
menu.append(edit_item)
# collect all spouses, parents and children
linked_persons = []
# Go over spouses and build their menu
item = gtk.MenuItem(_("Spouses"))
fam_list = person.get_family_handle_list()
@ -645,6 +648,7 @@ class PedView(PageView.PersonNavView):
sp_item = gtk.ImageMenuItem(NameDisplay.displayer.display(spouse))
sp_item.set_image(go_image)
sp_item.set_data(_PERSON,sp_id)
linked_persons.append(sp_id)
sp_item.connect("activate",self.on_childmenu_changed)
sp_item.show()
sp_menu.append(sp_item)
@ -679,6 +683,7 @@ class PedView(PageView.PersonNavView):
sib_item = gtk.ImageMenuItem(NameDisplay.displayer.display(sib))
sib_item.set_image(go_image)
sib_item.set_data(_PERSON,sib_id)
linked_persons.append(sib_id)
sib_item.connect("activate",self.on_childmenu_changed)
sib_item.show()
sib_menu.append(sib_item)
@ -716,6 +721,7 @@ class PedView(PageView.PersonNavView):
label.set_alignment(0,0)
child_item.add(label)
child_item.set_data(_PERSON,child_handle)
linked_persons.append(child_handle)
child_item.connect("activate",self.on_childmenu_changed)
child_item.show()
child_menu.append(child_item)
@ -753,6 +759,7 @@ class PedView(PageView.PersonNavView):
label.set_alignment(0,0)
par_item.add(label)
par_item.set_data(_PERSON,par_id)
linked_persons.append(par_id)
par_item.connect("activate",self.on_childmenu_changed)
par_item.show()
par_menu.append(par_item)
@ -762,6 +769,43 @@ class PedView(PageView.PersonNavView):
item.show()
menu.append(item)
# Go over parents and build their menu
item = gtk.MenuItem(_("Related"))
no_related = 1
for p_id in find_witnessed_people(self.db,person):
#if p_id in linked_persons:
# continue # skip already listed family members
per = self.db.get_person_from_handle(p_id)
if not per:
continue
if no_related:
no_related = 0
item.set_submenu(gtk.Menu())
per_menu = item.get_submenu()
label = gtk.Label(escape(NameDisplay.displayer.display(per)))
go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU)
go_image.show()
per_item = gtk.ImageMenuItem(None)
per_item.set_image(go_image)
label.set_use_markup(True)
label.show()
label.set_alignment(0,0)
per_item.add(label)
per_item.set_data(_PERSON,p_id)
per_item.connect("activate",self.on_childmenu_changed)
per_item.show()
per_menu.append(per_item)
if no_related:
item.set_sensitive(0)
item.show()
menu.append(item)
# Add separator
item = gtk.MenuItem(None)
item.show()
@ -867,6 +911,35 @@ def find_parents(db,p):
parentlist.append(mother_handle)
return parentlist
#-------------------------------------------------------------------------
#
# Function to return persons, that share the same event.
# This for example links witnesses to the tree
#
#-------------------------------------------------------------------------
def find_witnessed_people(db,p):
people = []
for event_ref in p.get_event_ref_list():
for l in db.find_backlink_handles( event_ref.ref):
if l[0] == 'Person' and l[1] != p.get_handle():
people.append(l[1])
if l[0] == 'Family':
fam = db.get_family_from_handle(l[1])
if fam:
father_handle = fam.get_father_handle()
if father_handle and father_handle != p.get_handle():
people.append(father_handle)
mother_handle = fam.get_mother_handle()
if mother_handle and mother_handle != p.get_handle():
people.append(mother_handle)
for f in p.get_family_handle_list():
family = db.get_family_from_handle(f)
for event_ref in family.get_event_ref_list():
for l in db.find_backlink_handles( event_ref.ref):
if l[0] == 'Person' and l[1] != p.get_handle():
people.append(l[1])
return people
#-------------------------------------------------------------------------
#
# Functions to build the text displayed in the details view of a DispBox