* src/PedView.py: Show marriage data; optimized cell debugging

svn: r5653
This commit is contained in:
Martin Hawlisch 2006-01-02 15:22:34 +00:00
parent 6fa83cede0
commit daafb5af19
2 changed files with 220 additions and 193 deletions

View File

@ -1,3 +1,6 @@
2006-01-02 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/PedView.py: Show marriage data
2006-01-01 Eero Tamminen <eerot@sf> 2006-01-01 Eero Tamminen <eerot@sf>
* doc/gramps.1.in: nroff and a couple of typo fixes * doc/gramps.1.in: nroff and a couple of typo fixes

View File

@ -1,7 +1,7 @@
# #
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2001-2005 Donald N. Allingham # Copyright (C) 2001-2006 Donald N. Allingham, Martin Hawlisch
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -233,6 +233,7 @@ class PedView(PageView.PersonNavView):
self.force_size = 0 # Automatic resize self.force_size = 0 # Automatic resize
self.tree_style = 0 # Nice tree self.tree_style = 0 # Nice tree
self.show_images = True # Show photos of persons self.show_images = True # Show photos of persons
self.show_marriage_data = 0 # Hide marriage data by default
self.db = dbstate.db self.db = dbstate.db
self.format_helper = FormattingHelper( self.db) self.format_helper = FormattingHelper( self.db)
@ -397,25 +398,26 @@ class PedView(PageView.PersonNavView):
if self.tree_style == 1: if self.tree_style == 1:
# format of the definition is: # format of the definition is:
# ((each box of the pedigree has a node here), # ((each box of the pedigree has a node here),
# ((person box position and size),(parent relation box)), # ((person data), (connection line), (marriage data)),
# ((or for another design),(fater relation box),(mother relation box))) # ((person box position and size),(parent relation box),(marriage data)),
pos_2 =(((0,3,3,3),((1,0,3),(1,6,3)),(3,4,5)), # ((or for another design),((fater relation box),(mother relation box)),(marriage data)))
pos_2 =(((0,3,3,3),((1,0,3),(1,6,3)),(3,3,2,3)),
((2,0,3,3),None,None), ((2,0,3,3),None,None),
((2,6,3,3),None,None)) ((2,6,3,3),None,None))
pos_3 =(((0,4,3,5),((1,1,3),(1,9,3)),(3,6,3)), pos_3 =(((0,4,3,5),((1,1,3),(1,9,3)),(3,5,2,3)),
((2,1,3,3),((3,0,1),(3,4,1)),(5,2,3)), ((2,1,3,3),((3,0,1),(3,4,1)),(5,1,2,3)),
((2,9,3,3),((3,8,1),(3,12,1)),(5,10,3)), ((2,9,3,3),((3,8,1),(3,12,1)),(5,9,2,3)),
((4,0,3,1),None,None), ((4,0,3,1),None,None),
((4,4,3,1),None,None), ((4,4,3,1),None,None),
((4,8,3,1),None,None), ((4,8,3,1),None,None),
((4,12,3,1),None,None)) ((4,12,3,1),None,None))
pos_4 =(((0, 5,3,5),((1,2,3),(1,10,3)),(3, 7,5)), pos_4 =(((0, 5,3,5),((1,2,3),(1,10,3)),(3, 6,2,3)),
((2, 2,3,3),((3,1,1),(3,5,1)),(5, 3,3)), ((2, 2,3,3),((3,1,1),(3,5,1)),(5, 3,2,1)),
((2,10,3,3),((3,9,1),(3,13,1)),(5,11,3)), ((2,10,3,3),((3,9,1),(3,13,1)),(5,11,2,1)),
((4, 1,3,1),((5,0,1),(5,2,1)),(7,1,1)), ((4, 1,3,1),((5,0,1),(5,2,1)),(7,1,2,1)),
((4, 5,3,1),((5,4,1),(5,6,1)),(7,5,1)), ((4, 5,3,1),((5,4,1),(5,6,1)),(7,5,2,1)),
((4, 9,3,1),((5,8,1),(5,10,1)),(7,9,1)), ((4, 9,3,1),((5,8,1),(5,10,1)),(7,9,2,1)),
((4,13,3,1),((5,12,1),(5,14,1)),(7,13,1)), ((4,13,3,1),((5,12,1),(5,14,1)),(7,13,2,1)),
((6, 0,3,1),None,None), ((6, 0,3,1),None,None),
((6, 2,3,1),None,None), ((6, 2,3,1),None,None),
((6, 4,3,1),None,None), ((6, 4,3,1),None,None),
@ -424,21 +426,21 @@ class PedView(PageView.PersonNavView):
((6,10,3,1),None,None), ((6,10,3,1),None,None),
((6,12,3,1),None,None), ((6,12,3,1),None,None),
((6,14,3,1),None,None),) ((6,14,3,1),None,None),)
pos_5 =(((0,10,3,11),((1,5,5),(1,21,5)),(3,15,3)), pos_5 =(((0,10,3,11),((1,5,5),(1,21,5)),(3,13,2,5)),
((2, 5,3,5),((3,2,3),(3,10,3)),(5, 7,1)), ((2, 5,3,5),((3,2,3),(3,10,3)),(5, 6,2,3)),
((2,21,3,5),((3,18,3),(3,26,3)),(5,23,1)), ((2,21,3,5),((3,18,3),(3,26,3)),(5,22,2,3)),
((4, 2,3,3),((5,1,1),(5,5,1)),(7,3,1)), ((4, 2,3,3),((5,1,1),(5,5,1)),(7,3,2,1)),
((4,10,3,3),((5,9,1),(5,13,1)),(7,11,1)), ((4,10,3,3),((5,9,1),(5,13,1)),(7,11,2,1)),
((4,18,3,3),((5,17,1),(5,21,1)),(7,19,1)), ((4,18,3,3),((5,17,1),(5,21,1)),(7,19,2,1)),
((4,26,3,3),((5,25,1),(5,29,1)),(7,27,1)), ((4,26,3,3),((5,25,1),(5,29,1)),(7,27,2,1)),
((6, 1,3,1),((7,0,1),(7,2,1)),(9,1,1)), ((6, 1,3,1),((7,0,1),(7,2,1)),(9,1,2,1)),
((6, 5,3,1),((7,4,1),(7,6,1)),(9,5,1)), ((6, 5,3,1),((7,4,1),(7,6,1)),(9,5,2,1)),
((6, 9,3,1),((7,8,1),(7,10,1)),(9,9,1)), ((6, 9,3,1),((7,8,1),(7,10,1)),(9,9,2,1)),
((6,13,3,1),((7,12,1),(7,14,1)),(9,13,1)), ((6,13,3,1),((7,12,1),(7,14,1)),(9,13,2,1)),
((6,17,3,1),((7,16,1),(7,18,1)),(9,17,1)), ((6,17,3,1),((7,16,1),(7,18,1)),(9,17,2,1)),
((6,21,3,1),((7,20,1),(7,22,1)),(9,21,1)), ((6,21,3,1),((7,20,1),(7,22,1)),(9,21,2,1)),
((6,25,3,1),((7,24,1),(7,26,1)),(9,25,1)), ((6,25,3,1),((7,24,1),(7,26,1)),(9,25,2,1)),
((6,29,3,1),((7,28,1),(7,30,1)),(9,29,1)), ((6,29,3,1),((7,28,1),(7,30,1)),(9,29,2,1)),
((8, 0,3,1),None,None), ((8, 0,3,1),None,None),
((8, 2,3,1),None,None), ((8, 2,3,1),None,None),
((8, 4,3,1),None,None), ((8, 4,3,1),None,None),
@ -456,23 +458,23 @@ class PedView(PageView.PersonNavView):
((8,28,3,1),None,None), ((8,28,3,1),None,None),
((8,30,3,1),None,None),) ((8,30,3,1),None,None),)
elif self.tree_style == 0: elif self.tree_style == 0:
pos_2 =(((0,0,1,3),(1,0,3),(3,4,5)), pos_2 =(((0,0,1,3),(1,0,3),(2,1,1,1)),
((2,0,1,1),None,None), ((2,0,1,1),None,None),
((2,2,1,1),None,None)) ((2,2,1,1),None,None))
pos_3 =(((0,2,1,3),(1,1,5),(3,4,5)), pos_3 =(((0,2,1,3),(1,1,5),(2,3,1,1)),
((2,0,1,3),(3,0,3),(3,4,5)), ((2,0,1,3),(3,0,3),(4,1,1,1)),
((2,4,1,3),(3,4,3),(3,4,5)), ((2,4,1,3),(3,4,3),(4,5,1,1)),
((4,0,1,1),None,None), ((4,0,1,1),None,None),
((4,2,1,1),None,None), ((4,2,1,1),None,None),
((4,4,1,1),None,None), ((4,4,1,1),None,None),
((4,6,1,1),None,None)) ((4,6,1,1),None,None))
pos_4 =(((0,6,1,3),(1,3,9),(3,4,5)), pos_4 =(((0,6,1,3),(1,3,9),(2,5,1,5)),
((2,2,1,3),(3,1,5),(3,4,5)), ((2,2,1,3),(3,1,5),(4,3,1,1)),
((2,10,1,3),(3,9,5),(3,4,5)), ((2,10,1,3),(3,9,5),(4,11,1,1)),
((4,0,1,3),(5,0,3),(3,4,5)), ((4,0,1,3),(5,0,3),(6,1,1,1)),
((4,4,1,3),(5,4,3),(3,4,5)), ((4,4,1,3),(5,4,3),(6,5,1,1)),
((4,8,1,3),(5,8,3),(3,4,5)), ((4,8,1,3),(5,8,3),(6,9,1,1)),
((4,12,1,3),(5,12,3),(3,4,5)), ((4,12,1,3),(5,12,3),(6,13,1,1)),
((6,0,1,1),None,None), ((6,0,1,1),None,None),
((6,2,1,1),None,None), ((6,2,1,1),None,None),
((6,4,1,1),None,None), ((6,4,1,1),None,None),
@ -481,21 +483,21 @@ class PedView(PageView.PersonNavView):
((6,10,1,1),None,None), ((6,10,1,1),None,None),
((6,12,1,1),None,None), ((6,12,1,1),None,None),
((6,14,1,1),None,None)) ((6,14,1,1),None,None))
pos_5 =(((0,14,1,3),(1,7,17),(3,4,5)), pos_5 =(((0,14,1,3),(1,7,17),(2,13,1,5)),
((2,6,1,3),(3,3,9),(3,4,5)), ((2,6,1,3),(3,3,9),(4,5,1,5)),
((2,22,1,3),(3,19,9),(3,4,5)), ((2,22,1,3),(3,19,9),(4,21,1,5)),
((4,2,1,3),(5,1,5),(3,4,5)), ((4,2,1,3),(5,1,5),(6,3,1,1)),
((4,10,1,3),(5,9,5),(3,4,5)), ((4,10,1,3),(5,9,5),(6,11,1,1)),
((4,18,1,3),(5,17,5),(3,4,5)), ((4,18,1,3),(5,17,5),(6,19,1,1)),
((4,26,1,3),(5,25,5),(3,4,5)), ((4,26,1,3),(5,25,5),(6,27,1,1)),
((6,0,1,3),(7,0,3),(3,4,5)), ((6,0,1,3),(7,0,3),(8,1,1,1)),
((6,4,1,3),(7,4,3),(3,4,5)), ((6,4,1,3),(7,4,3),(8,5,1,1)),
((6,8,1,3),(7,8,3),(3,4,5)), ((6,8,1,3),(7,8,3),(8,9,1,1)),
((6,12,1,3),(7,12,3),(3,4,5)), ((6,12,1,3),(7,12,3),(8,13,1,1)),
((6,16,1,3),(7,16,3),(3,4,5)), ((6,16,1,3),(7,16,3),(8,17,1,1)),
((6,20,1,3),(7,20,3),(3,4,5)), ((6,20,1,3),(7,20,3),(8,21,1,1)),
((6,24,1,3),(7,24,3),(3,4,5)), ((6,24,1,3),(7,24,3),(8,25,1,1)),
((6,28,1,3),(7,28,3),(3,4,5)), ((6,28,1,3),(7,28,3),(8,29,1,1)),
((8,0,1,1),None,None), ((8,0,1,1),None,None),
((8,2,1,1),None,None), ((8,2,1,1),None,None),
((8,4,1,1),None,None), ((8,4,1,1),None,None),
@ -530,26 +532,6 @@ class PedView(PageView.PersonNavView):
child.destroy() child.destroy()
table_widget.resize(1,1) table_widget.resize(1,1)
debug = False
if debug:
xmax = 0
ymax = 0
for field in positions:
x = field[0][0]+field[0][2]
if x > xmax:
xmax = x
y = field[0][1]+field[0][3]
if y > ymax:
ymax = y
for x in range(0,xmax):
for y in range(0,ymax):
label=gtk.Label("%d,%d"%(x,y))
frame = gtk.ScrolledWindow(None,None)
frame.set_shadow_type(gtk.SHADOW_NONE)
frame.set_policy(gtk.POLICY_NEVER,gtk.POLICY_NEVER)
frame.add_with_viewport(label)
table_widget.attach(frame,x+1,x+2,y+1,y+2,gtk.FILL,gtk.FILL,0,0)
xmax = 0 xmax = 0
ymax = 0 ymax = 0
for i in range(0,31): for i in range(0,31):
@ -559,6 +541,8 @@ class PedView(PageView.PersonNavView):
y = positions[i][0][1]+1 y = positions[i][0][1]+1
w = positions[i][0][2] w = positions[i][0][2]
h = positions[i][0][3] h = positions[i][0][3]
except IndexError: # no position for this person defined
continue
if not lst[i]: if not lst[i]:
# No person -> show empty box # No person -> show empty box
pw = PersonBoxWidget( self.format_helper, None, 0, None); pw = PersonBoxWidget( self.format_helper, None, 0, None);
@ -606,6 +590,7 @@ class PedView(PageView.PersonNavView):
w = 1 w = 1
h = positions[i][1][0][2] h = positions[i][1][0][2]
line = gtk.DrawingArea() line = gtk.DrawingArea()
line.set_size_request(20,-1)
line.connect("expose-event", self.line_expose_cb) line.connect("expose-event", self.line_expose_cb)
line.set_data("idx", i*2+1) line.set_data("idx", i*2+1)
if lst[i*2+1]: if lst[i*2+1]:
@ -621,6 +606,7 @@ class PedView(PageView.PersonNavView):
w = 1 w = 1
h = positions[i][1][1][2] h = positions[i][1][1][2]
line = gtk.DrawingArea() line = gtk.DrawingArea()
line.set_size_request(20,-1)
line.connect("expose-event", self.line_expose_cb) line.connect("expose-event", self.line_expose_cb)
line.set_data("idx", i*2+2) line.set_data("idx", i*2+2)
if lst[i*2+2]: if lst[i*2+2]:
@ -654,30 +640,21 @@ class PedView(PageView.PersonNavView):
if y+h > ymax: if y+h > ymax:
ymax = y+h ymax = y+h
# Marriage data # Show marriage data
#if positions[i][4] and False: if self.show_marriage_data and positions[i][2]:
# # An empty label is used as fallback, to allow it to EXPAND. if lst[i] and lst[i][2]:
# # This gives a nicer layout text = self.format_helper.format_relation( lst[i][2], positions[i][2][3])
# text = " " else:
# try: text = " "
# if lst[i] and lst[i][2]: label = gtk.Label(text)
# text = self.format_relation( lst[i][2], positions[i][3][2]) label.set_justify(gtk.JUSTIFY_LEFT)
# except IndexError: label.set_line_wrap(True)
# pass label.set_alignment(0.1,0.5)
# label = gtk.Label(text) x = positions[i][2][0]+1
# label.set_justify(gtk.JUSTIFY_LEFT) y = positions[i][2][1]+1
# label.set_line_wrap(True) w = positions[i][2][2]
# label.set_alignment(0.1,0.0) h = positions[i][2][3]
# x = positions[i][4][0] table_widget.attach(label,x,x+w,y,y+h,gtk.FILL,gtk.FILL,0,0)
# y = positions[i][4][1]
# w = 2
# h = 1
# if positions[i][4][2] > 1:
# table_widget.attach(label,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,0)
# else:
# table_widget.attach(label,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.FILL,0,0)
except IndexError:
pass
# add dummy widgets into the corners of the table to allow the pedigree to be centered # add dummy widgets into the corners of the table to allow the pedigree to be centered
l = gtk.Label("") l = gtk.Label("")
@ -685,6 +662,40 @@ class PedView(PageView.PersonNavView):
l = gtk.Label("") l = gtk.Label("")
table_widget.attach(l,xmax,xmax+1,ymax,ymax+1,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,0) table_widget.attach(l,xmax,xmax+1,ymax,ymax+1,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,0)
debug = False
if debug:
used_cells = {}
xmax = 0
ymax = 0
# iterate table to see which cells are used.
for c in table_widget.get_children():
l=table_widget.child_get_property(c,"left-attach")
r=table_widget.child_get_property(c,"right-attach")
t=table_widget.child_get_property(c,"top-attach")
b=table_widget.child_get_property(c,"bottom-attach")
for x in range(l,r):
for y in range(t,b):
try:
used_cells[x][y] = True;
except KeyError:
used_cells[x] = {}
used_cells[x][y] = True;
if y > ymax:
ymax = y
if x > xmax:
xmax = x
for x in range(0,xmax+1):
for y in range(0,ymax+1):
try:
tmp = used_cells[x][y]
except KeyError:
# fill unused cells
label=gtk.Label("%d,%d"%(x,y))
frame = gtk.ScrolledWindow(None,None)
frame.set_shadow_type(gtk.SHADOW_NONE)
frame.set_policy(gtk.POLICY_NEVER,gtk.POLICY_NEVER)
frame.add_with_viewport(label)
table_widget.attach(frame,x,x+1,y,y+1,gtk.FILL,gtk.FILL,0,0)
table_widget.show_all() table_widget.show_all()
def line_expose_cb(self, area, event): def line_expose_cb(self, area, event):
@ -812,6 +823,10 @@ class PedView(PageView.PersonNavView):
self.show_images = not self.show_images self.show_images = not self.show_images
self.rebuild_trees(self.dbstate.active) # Rebuild using new style self.rebuild_trees(self.dbstate.active) # Rebuild using new style
def change_show_marriage_cb(self,event):
self.show_marriage_data = not self.show_marriage_data
self.rebuild_trees(self.dbstate.active) # Rebuild using new style
def find_tree(self,person,index,depth,lst,val=0): def find_tree(self,person,index,depth,lst,val=0):
"""Recursively build a list of ancestors""" """Recursively build a list of ancestors"""
@ -882,6 +897,15 @@ class PedView(PageView.PersonNavView):
entry.show() entry.show()
menu.append(entry) menu.append(entry)
entry = gtk.ImageMenuItem(_("Show marriage data"))
if self.show_marriage_data:
current_show_marriage_image = gtk.image_new_from_stock(gtk.STOCK_APPLY,gtk.ICON_SIZE_MENU)
current_show_marriage_image.show()
entry.set_image(current_show_marriage_image)
entry.connect("activate", self.change_show_marriage_cb)
entry.show()
menu.append(entry)
item = gtk.MenuItem(_("Tree style")) item = gtk.MenuItem(_("Tree style"))
item.set_submenu(gtk.Menu()) item.set_submenu(gtk.Menu())
style_menu = item.get_submenu() style_menu = item.get_submenu()