* src/PedView.py: Removed navigation buttons in flavour of a menu
svn: r4430
This commit is contained in:
		| @@ -1,3 +1,6 @@ | |||||||
|  | 2005-04-26  Martin Hawlisch  <Martin.Hawlisch@gmx.de> | ||||||
|  | 	* src/PedView.py: Removed navigation buttons in flavour of a menu; | ||||||
|  |  | ||||||
| 2005-04-23  Don Allingham  <don@gramps-project.org> | 2005-04-23  Don Allingham  <don@gramps-project.org> | ||||||
| 	* src/ListModel.py: keep track of data index | 	* src/ListModel.py: keep track of data index | ||||||
| 	* src/EventEdit.py: use new label scheme for tabs that uses an | 	* src/EventEdit.py: use new label scheme for tabs that uses an | ||||||
|   | |||||||
							
								
								
									
										359
									
								
								src/PedView.py
									
									
									
									
									
								
							
							
						
						
									
										359
									
								
								src/PedView.py
									
									
									
									
									
								
							| @@ -34,12 +34,6 @@ from gettext import gettext as _ | |||||||
| #------------------------------------------------------------------------- | #------------------------------------------------------------------------- | ||||||
| import gtk | import gtk | ||||||
| import gtk.gdk | import gtk.gdk | ||||||
| import pango |  | ||||||
|  |  | ||||||
| try: |  | ||||||
|     from gnomecanvas import CanvasGroup, CanvasRect, CanvasText, CanvasWidget, CanvasLine |  | ||||||
| except: |  | ||||||
|     from gnome.canvas import CanvasGroup, CanvasRect, CanvasText, CanvasWidget, CanvasLine |  | ||||||
|  |  | ||||||
| #------------------------------------------------------------------------- | #------------------------------------------------------------------------- | ||||||
| # | # | ||||||
| @@ -82,12 +76,12 @@ class PedigreeView: | |||||||
|  |  | ||||||
|         # FIXME: Hack to avoid changing the glade file |         # FIXME: Hack to avoid changing the glade file | ||||||
|         # Replace canvas by notebook |         # Replace canvas by notebook | ||||||
|         parent_container = canvas.get_parent() |         self.parent_container = canvas.get_parent() | ||||||
|         canvas.destroy() |         canvas.destroy() | ||||||
|         self.notebook = gtk.Notebook() |         self.notebook = gtk.Notebook() | ||||||
|         self.notebook.set_show_border(False) |         self.notebook.set_show_border(False) | ||||||
|         self.notebook.set_show_tabs(False) |         self.notebook.set_show_tabs(False) | ||||||
|         parent_container.add_with_viewport(self.notebook) |         self.parent_container.add_with_viewport(self.notebook) | ||||||
|         # ### |         # ### | ||||||
|              |              | ||||||
|         self.table_2 = gtk.Table(1,1,False) |         self.table_2 = gtk.Table(1,1,False) | ||||||
| @@ -102,7 +96,7 @@ class PedigreeView: | |||||||
|         self.table_5 = gtk.Table(1,1,False) |         self.table_5 = gtk.Table(1,1,False) | ||||||
|         self.add_table_to_notebook( self.table_5) |         self.add_table_to_notebook( self.table_5) | ||||||
|  |  | ||||||
|         parent_container.connect("size-allocate", self.size_request_cb) |         self.parent_container.connect("size-allocate", self.size_request_cb) | ||||||
|  |  | ||||||
|         self.notebook.show_all() |         self.notebook.show_all() | ||||||
|  |  | ||||||
| @@ -112,6 +106,8 @@ class PedigreeView: | |||||||
|      |      | ||||||
|         self.change_db(self.parent.db) |         self.change_db(self.parent.db) | ||||||
|         self.distance = self.relcalc.get_relationship_distance |         self.distance = self.relcalc.get_relationship_distance | ||||||
|  |          | ||||||
|  |         self.force_size = 0 # Automatic resize | ||||||
|  |  | ||||||
|     def add_table_to_notebook( self, table): |     def add_table_to_notebook( self, table): | ||||||
|         frame = gtk.ScrolledWindow(None,None) |         frame = gtk.ScrolledWindow(None,None) | ||||||
| @@ -143,26 +139,29 @@ class PedigreeView: | |||||||
|             self.rebuild_trees(None) |             self.rebuild_trees(None) | ||||||
|          |          | ||||||
|     def size_request_cb(self, widget, event, data=None): |     def size_request_cb(self, widget, event, data=None): | ||||||
|         v = widget.get_allocation() |         if self.force_size == 0: | ||||||
|         page_list = range(0,self.notebook.get_n_pages()) |             v = widget.get_allocation() | ||||||
|         page_list.reverse() |             page_list = range(0,self.notebook.get_n_pages()) | ||||||
|         for n in page_list: |             page_list.reverse() | ||||||
|             p = self.notebook.get_nth_page(n).get_child().get_child().get_allocation() |             for n in page_list: | ||||||
|             if v.width >= p.width and v.height > p.height: |                 p = self.notebook.get_nth_page(n).get_child().get_child().get_allocation() | ||||||
|                 self.notebook.set_current_page(n) |                 if v.width >= p.width and v.height > p.height: | ||||||
|                 break; |                     self.notebook.set_current_page(n) | ||||||
|  |                     break; | ||||||
|  |         else: | ||||||
|  |             self.notebook.set_current_page(self.force_size-2) | ||||||
|  |  | ||||||
|     def rebuild_trees(self,person): |     def rebuild_trees(self,person): | ||||||
|         pos_2 =((0,1,3,(3,2,7)), |         pos_2 =((0,3,3,(3,4,5)), | ||||||
|                 (2,0,1,None), |                 (2,0,3,None), | ||||||
|                 (2,4,1,None)) |                 (2,10,3,None)) | ||||||
|         pos_3 =((0,2,5,(3,4,5)), |         pos_3 =((0,4,5,(3,6,3)), | ||||||
|                 (2,1,1,(5,1,1)), |                 (2,1,3,(5,2,3)), | ||||||
|                 (2,7,1,(5,7,1)), |                 (2,9,3,(5,10,3)), | ||||||
|                 (4,0,1,None), |                 (4,0,1,None), | ||||||
|                 (4,2,1,None), |                 (4,4,1,None), | ||||||
|                 (4,6,1,None), |                 (4,8,1,None), | ||||||
|                 (4,8,1,None)) |                 (4,12,1,None)) | ||||||
|         pos_4 =((0, 5,5,(3, 7,5)), |         pos_4 =((0, 5,5,(3, 7,5)), | ||||||
|                 (2, 2,3,(5, 3,3)), |                 (2, 2,3,(5, 3,3)), | ||||||
|                 (2,10,3,(5,11,3)), |                 (2,10,3,(5,11,3)), | ||||||
| @@ -213,6 +212,10 @@ class PedigreeView: | |||||||
|         self.rebuild( self.table_3, pos_3, person) |         self.rebuild( self.table_3, pos_3, person) | ||||||
|         self.rebuild( self.table_4, pos_4, person) |         self.rebuild( self.table_4, pos_4, person) | ||||||
|         self.rebuild( self.table_5, pos_5, person) |         self.rebuild( self.table_5, pos_5, person) | ||||||
|  |          | ||||||
|  |         while gtk.events_pending(): # give gtk the chance to do the repainting | ||||||
|  |             gtk.main_iteration() | ||||||
|  |         self.size_request_cb(self.parent_container,None) # switch to matching size | ||||||
|  |  | ||||||
|     def rebuild( self, table_widget, positions, active_person): |     def rebuild( self, table_widget, positions, active_person): | ||||||
|         # Build ancestor tree |         # Build ancestor tree | ||||||
| @@ -224,6 +227,8 @@ class PedigreeView: | |||||||
|             child.destroy() |             child.destroy() | ||||||
|         table_widget.resize(1,1) |         table_widget.resize(1,1) | ||||||
|          |          | ||||||
|  |         tooltip = gtk.Tooltips() | ||||||
|  |          | ||||||
|         debug = False |         debug = False | ||||||
|         if debug: |         if debug: | ||||||
|             xmax = 0 |             xmax = 0 | ||||||
| @@ -251,9 +256,9 @@ class PedigreeView: | |||||||
|                 y = positions[i][1] |                 y = positions[i][1] | ||||||
|                 w = 3 |                 w = 3 | ||||||
|                 h = positions[i][2] |                 h = positions[i][2] | ||||||
|      |                  | ||||||
|                 # Keine Person, daher leere Box |  | ||||||
|                 if not lst[i]: |                 if not lst[i]: | ||||||
|  |                     # No person -> show empty box | ||||||
|                     label = gtk.Label(" ") |                     label = gtk.Label(" ") | ||||||
|                     frame = gtk.ScrolledWindow(None,None) |                     frame = gtk.ScrolledWindow(None,None) | ||||||
|                     frame.set_shadow_type(gtk.SHADOW_OUT) |                     frame.set_shadow_type(gtk.SHADOW_OUT) | ||||||
| @@ -263,116 +268,55 @@ class PedigreeView: | |||||||
|                         table_widget.attach(frame,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,0) |                         table_widget.attach(frame,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,0) | ||||||
|                     else: |                     else: | ||||||
|                         table_widget.attach(frame,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.FILL,0,0) |                         table_widget.attach(frame,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.FILL,0,0) | ||||||
|                     continue |  | ||||||
|  |  | ||||||
|                 # button t change active person |  | ||||||
|                 jump_image = gtk.Image() |  | ||||||
|                 jump_image.set_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) |  | ||||||
|                 jump_button = gtk.Button() |  | ||||||
|                 jump_button.add(jump_image) |  | ||||||
|                 jump_button.set_data(_PERSON,lst[i][0].get_handle()) |  | ||||||
|                 jump_button.connect("clicked", self.on_childmenu_changed); |  | ||||||
|                  |  | ||||||
|                 # button to edit person |  | ||||||
|                 edit_image = gtk.Image() |  | ||||||
|                 edit_image.set_from_stock(gtk.STOCK_EDIT,gtk.ICON_SIZE_MENU) |  | ||||||
|                 edit_button = gtk.Button() |  | ||||||
|                 edit_button.add(edit_image) |  | ||||||
|                 edit_button.set_data(_PERSON,lst[i][0].get_handle()) |  | ||||||
|                 edit_button.connect("clicked", self.edit_person_cb); |  | ||||||
|      |  | ||||||
|                 # button to jump to children |  | ||||||
|                 children_button = None |  | ||||||
|                 if i == 0 and active_person: |  | ||||||
|                     for family_handle in active_person.get_family_handle_list(): |  | ||||||
|                         family = self.db.get_family_from_handle(family_handle) |  | ||||||
|                         if not family: |  | ||||||
|                             continue |  | ||||||
|                         if len(family.get_child_handle_list()) > 0: |  | ||||||
|                             children_image = gtk.Image() |  | ||||||
|                             children_image.set_from_stock(gtk.STOCK_GO_BACK,gtk.ICON_SIZE_MENU) |  | ||||||
|                             children_button = gtk.Button() |  | ||||||
|                             children_button.add(children_image) |  | ||||||
|                             children_button.connect("clicked", self.on_show_child_menu) |  | ||||||
|                             break |  | ||||||
|                 # Navigation button |  | ||||||
|                 nav_image = gtk.Image() |  | ||||||
|                 nav_image.set_from_stock(gtk.STOCK_INDEX,gtk.ICON_SIZE_MENU) |  | ||||||
|                 nav_button = gtk.Button() |  | ||||||
|                 nav_button.add(nav_image) |  | ||||||
|                 nav_button.connect("button-press-event", self.build_full_nav_menu_cb) |  | ||||||
|                 nav_button.set_data(_PERSON,lst[i][0].get_handle()) |  | ||||||
|  |  | ||||||
|                 # Box to place buttons and text side by side |  | ||||||
|                 box1 = gtk.HBox(False,0) |  | ||||||
|                 box1.set_border_width(0) |  | ||||||
|      |  | ||||||
|                 if positions[i][2] > 1: |  | ||||||
|                     # Multiline text boxes get vertical buttons |  | ||||||
|                     frame = gtk.ScrolledWindow(None,None) |  | ||||||
|                     frame.set_shadow_type(gtk.SHADOW_OUT) |  | ||||||
|                     frame.set_policy(gtk.POLICY_NEVER,gtk.POLICY_NEVER) |  | ||||||
|                     viewport1 = gtk.Viewport(None,None) |  | ||||||
|                     viewport1.set_shadow_type(gtk.SHADOW_NONE) |  | ||||||
|                     viewport1.set_border_width(0) |  | ||||||
|                     frame.add(viewport1) |  | ||||||
|                     viewport1.add(box1) |  | ||||||
|                  |  | ||||||
|                     box2 = gtk.VBox(False,0)   # buttons go into a new box |  | ||||||
|                     box2.pack_start(edit_button,False,False,0) |  | ||||||
|                     box2.pack_start(jump_button,False,False,0) |  | ||||||
|                     box2.pack_start(nav_button,False,False,0) |  | ||||||
|                     if children_button: |  | ||||||
|                         box2.pack_start(children_button,False,False,0) |  | ||||||
|      |  | ||||||
|                     # Multiline text using TextBuffer |  | ||||||
|                     textbuffer = gtk.TextBuffer() |  | ||||||
|                     textbuffer.set_text(self.format_person(lst[i][0], positions[i][2])) |  | ||||||
|                     text = gtk.TextView(textbuffer) |  | ||||||
|                     text.set_editable(False) |  | ||||||
|                     text.set_cursor_visible(False) |  | ||||||
|                     text.set_wrap_mode(gtk.WRAP_WORD) |  | ||||||
|                     frame2 = gtk.ScrolledWindow(None,None) |  | ||||||
|                     frame2.set_shadow_type(gtk.SHADOW_NONE) |  | ||||||
|                     frame2.set_policy(gtk.POLICY_NEVER,gtk.POLICY_NEVER) |  | ||||||
|                     viewport2 = gtk.Viewport(None,None) |  | ||||||
|                     viewport2.set_shadow_type(gtk.SHADOW_NONE) |  | ||||||
|                     viewport2.set_border_width(0) |  | ||||||
|                     viewport2.add(text) |  | ||||||
|                     frame2.add(viewport2) |  | ||||||
|                     box1.pack_start(box2,False,False,0) |  | ||||||
|                     box1.pack_start(frame2,True,True,0) |  | ||||||
|                     table_widget.attach(frame,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,0) |  | ||||||
|                 else: |                 else: | ||||||
|                     # buttons go into the same box as the text |                     text = gtk.Button(self.format_person(lst[i][0], positions[i][2])) | ||||||
|                     box1.pack_start(edit_button,False,False,0) |                     if i > 0 and positions[i][2] < 3: | ||||||
|                     box1.pack_start(jump_button,False,False,0) |                         tooltip.set_tip(text, self.format_person(lst[i][0], 11)) | ||||||
|                     box1.pack_start(nav_button,False,False,0) |                     text.set_alignment(0.0,0.0) | ||||||
|                     if children_button: |                     gender = lst[i][0].get_gender() | ||||||
|                         box1.pack_start(children_button,False,False,0) |                     if gender == RelLib.Person.MALE: | ||||||
|      |                         text.modify_bg( gtk.STATE_NORMAL, text.get_colormap().alloc_color("#F5FFFF")) | ||||||
|                     #Single line text using Entry |                     elif gender == RelLib.Person.FEMALE: | ||||||
|                     text = gtk.Entry() |                         text.modify_bg( gtk.STATE_NORMAL, text.get_colormap().alloc_color("#FFF5FF")) | ||||||
|                     text.set_text(self.format_person(lst[i][0], positions[i][2])) |                     else: | ||||||
|                     text.set_editable(False) |                         text.modify_bg( gtk.STATE_NORMAL, text.get_colormap().alloc_color("#FFFFF5")) | ||||||
|                     text.set_has_frame(False) |                     white = text.get_colormap().alloc_color("white") | ||||||
|                     frame2 = gtk.ScrolledWindow(None,None) |                     text.modify_bg( gtk.STATE_ACTIVE, white) | ||||||
|                     frame2.set_shadow_type(gtk.SHADOW_OUT) |                     text.modify_bg( gtk.STATE_PRELIGHT, white) | ||||||
|                     frame2.set_policy(gtk.POLICY_NEVER,gtk.POLICY_NEVER) |                     text.modify_bg( gtk.STATE_SELECTED, white) | ||||||
|                     viewport2 = gtk.Viewport(None,None) |                     text.set_data(_PERSON,lst[i][0].get_handle()) | ||||||
|                     viewport2.set_shadow_type(gtk.SHADOW_NONE) |                     text.connect("button-press-event", self.build_full_nav_menu_cb) | ||||||
|                     viewport2.set_border_width(0) |                     if positions[i][2] > 1: | ||||||
|                     viewport2.add(text) |                         table_widget.attach(text,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,0) | ||||||
|                     frame2.add(viewport2) |                     else: | ||||||
|                     box1.pack_start(frame2,True,True,0) |                         table_widget.attach(text,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.FILL,0,0) | ||||||
|                     table_widget.attach(box1,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.FILL,0,0) |                      | ||||||
|      |                     # Connection lines | ||||||
|  |                     if i > 0: | ||||||
|  |                         x = positions[i][0]-1 | ||||||
|  |                         y = positions[i][1] | ||||||
|  |                         w = 1 | ||||||
|  |                         h = positions[i][2] | ||||||
|  |                         line = gtk.DrawingArea() | ||||||
|  |                         line.connect("expose-event", self.line_expose_cb) | ||||||
|  |                         line.set_data("idx", i) | ||||||
|  |                         line.set_data("rela", lst[i][1]) | ||||||
|  |                         table_widget.attach(line,x,x+w,y,y+h,gtk.FILL,gtk.FILL,0,0) | ||||||
|  |                      | ||||||
|                 # Marriage data |                 # Marriage data | ||||||
|                 if positions[i][3] and lst[i][2]: |                 if positions[i][3]: | ||||||
|                     text = self.format_relation( lst[i][2], positions[i][3][2]) |                     # An empty label is used as fallback, to allow it to EXPAND. | ||||||
|  |                     # This gives a nicer layout | ||||||
|  |                     text = " " | ||||||
|  |                     try: | ||||||
|  |                         if lst[i] and lst[i][2]: | ||||||
|  |                             text = self.format_relation( lst[i][2], positions[i][3][2]) | ||||||
|  |                     except IndexError: | ||||||
|  |                         pass | ||||||
|                     label = gtk.Label(text) |                     label = gtk.Label(text) | ||||||
|                     label.set_justify(gtk.JUSTIFY_CENTER) |                     label.set_justify(gtk.JUSTIFY_LEFT) | ||||||
|                     label.set_line_wrap(True) |                     label.set_line_wrap(True) | ||||||
|  |                     label.set_alignment(0.1,0.0) | ||||||
|                     x = positions[i][3][0] |                     x = positions[i][3][0] | ||||||
|                     y = positions[i][3][1] |                     y = positions[i][3][1] | ||||||
|                     w = 2 |                     w = 2 | ||||||
| @@ -385,7 +329,22 @@ class PedigreeView: | |||||||
|                 pass |                 pass | ||||||
|         table_widget.show_all() |         table_widget.show_all() | ||||||
|  |  | ||||||
|  |     def line_expose_cb(self, area, event): | ||||||
|  |         style = area.get_style() | ||||||
|  |         gc = style.fg_gc[gtk.STATE_NORMAL] | ||||||
|  |         alloc = area.get_allocation() | ||||||
|  |         idx = area.get_data("idx") | ||||||
|  |         rela = area.get_data("rela") | ||||||
|  |         if rela: | ||||||
|  |             gc.line_style = gtk.gdk.LINE_ON_OFF_DASH | ||||||
|  |         else: | ||||||
|  |             gc.line_style = gtk.gdk.LINE_SOLID | ||||||
|  |         gc.line_width = 3 | ||||||
|  |         if idx %2 == 0: | ||||||
|  |             area.window.draw_line(gc, alloc.width, alloc.height/2, alloc.width/2, 0) | ||||||
|  |         else: | ||||||
|  |             area.window.draw_line(gc, alloc.width, alloc.height/2, alloc.width/2, alloc.height) | ||||||
|  |      | ||||||
|     def edit_person_cb(self,obj): |     def edit_person_cb(self,obj): | ||||||
|         person_handle = obj.get_data(_PERSON) |         person_handle = obj.get_data(_PERSON) | ||||||
|         person = self.db.get_person_from_handle(person_handle) |         person = self.db.get_person_from_handle(person_handle) | ||||||
| @@ -440,7 +399,11 @@ class PedigreeView: | |||||||
|             return 1 |             return 1 | ||||||
|         return 0 |         return 0 | ||||||
|      |      | ||||||
|  |     def change_force_size_cb(self,event,data): | ||||||
|  |         if data in [0,2,3,4,5]: | ||||||
|  |             self.force_size = data | ||||||
|  |             self.size_request_cb(self.parent_container,None) # switch to matching size | ||||||
|  |      | ||||||
|     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""" | ||||||
|  |  | ||||||
| @@ -501,6 +464,33 @@ class PedigreeView: | |||||||
|             item.show() |             item.show() | ||||||
|             menu.append(item) |             menu.append(item) | ||||||
|  |  | ||||||
|  |     def add_settings_to_menu(self,menu): | ||||||
|  |         item = gtk.MenuItem(_("Tree size")) | ||||||
|  |         item.set_submenu(gtk.Menu()) | ||||||
|  |         size_menu = item.get_submenu() | ||||||
|  |          | ||||||
|  |         current_image = gtk.image_new_from_stock(gtk.STOCK_APPLY,gtk.ICON_SIZE_MENU) | ||||||
|  |         current_image.show() | ||||||
|  |          | ||||||
|  |         entry = gtk.ImageMenuItem(_("Automatic")) | ||||||
|  |         entry.connect("activate", self.change_force_size_cb,0) | ||||||
|  |         if self.force_size == 0: | ||||||
|  |             entry.set_image(current_image) | ||||||
|  |         entry.show() | ||||||
|  |         size_menu.append(entry) | ||||||
|  |  | ||||||
|  |         for n in range(2,6): | ||||||
|  |             entry = gtk.ImageMenuItem(_("%d generations") % n) | ||||||
|  |             if self.force_size == n: | ||||||
|  |                 entry.set_image(current_image) | ||||||
|  |             entry.connect("activate", self.change_force_size_cb,n) | ||||||
|  |             entry.show() | ||||||
|  |             size_menu.append(entry) | ||||||
|  |          | ||||||
|  |         size_menu.show() | ||||||
|  |         item.show() | ||||||
|  |         menu.append(item) | ||||||
|  |          | ||||||
|  |  | ||||||
|     def build_full_nav_menu_cb(self,obj,event): |     def build_full_nav_menu_cb(self,obj,event): | ||||||
|         """ |         """ | ||||||
| @@ -516,6 +506,24 @@ class PedigreeView: | |||||||
|         if not person: |         if not person: | ||||||
|             return 0 |             return 0 | ||||||
|  |  | ||||||
|  |         go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) | ||||||
|  |         go_image.show() | ||||||
|  |         go_item = gtk.ImageMenuItem(NameDisplay.displayer.display(person)) | ||||||
|  |         go_item.set_image(go_image) | ||||||
|  |         go_item.set_data(_PERSON,person_handle) | ||||||
|  |         go_item.connect("activate",self.on_childmenu_changed) | ||||||
|  |         go_item.show() | ||||||
|  |         menu.append(go_item) | ||||||
|  |  | ||||||
|  |         #edit_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) | ||||||
|  |         #edit_image.show() | ||||||
|  |         edit_item = gtk.ImageMenuItem(gtk.STOCK_EDIT) | ||||||
|  |         #edit_item.set_image(edit_image) | ||||||
|  |         edit_item.set_data(_PERSON,person_handle) | ||||||
|  |         edit_item.connect("activate",self.edit_person_cb) | ||||||
|  |         edit_item.show() | ||||||
|  |         menu.append(edit_item) | ||||||
|  |  | ||||||
|         # Go over spouses and build their menu |         # Go over spouses and build their menu | ||||||
|         item = gtk.MenuItem(_("Spouses")) |         item = gtk.MenuItem(_("Spouses")) | ||||||
|         fam_list = person.get_family_handle_list() |         fam_list = person.get_family_handle_list() | ||||||
| @@ -535,7 +543,10 @@ class PedigreeView: | |||||||
|                 item.set_submenu(gtk.Menu()) |                 item.set_submenu(gtk.Menu()) | ||||||
|                 sp_menu = item.get_submenu() |                 sp_menu = item.get_submenu() | ||||||
|  |  | ||||||
|             sp_item = gtk.MenuItem(NameDisplay.displayer.display(spouse)) |             go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) | ||||||
|  |             go_image.show() | ||||||
|  |             sp_item = gtk.ImageMenuItem(NameDisplay.displayer.display(spouse)) | ||||||
|  |             sp_item.set_image(go_image) | ||||||
|             sp_item.set_data(_PERSON,sp_id) |             sp_item.set_data(_PERSON,sp_id) | ||||||
|             sp_item.connect("activate",self.on_childmenu_changed) |             sp_item.connect("activate",self.on_childmenu_changed) | ||||||
|             sp_item.show() |             sp_item.show() | ||||||
| @@ -566,7 +577,10 @@ class PedigreeView: | |||||||
|                     item.set_submenu(gtk.Menu()) |                     item.set_submenu(gtk.Menu()) | ||||||
|                     sib_menu = item.get_submenu() |                     sib_menu = item.get_submenu() | ||||||
|  |  | ||||||
|                 sib_item = gtk.MenuItem(NameDisplay.displayer.display(sib)) |                 go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) | ||||||
|  |                 go_image.show() | ||||||
|  |                 sib_item = gtk.ImageMenuItem(NameDisplay.displayer.display(sib)) | ||||||
|  |                 sib_item.set_image(go_image) | ||||||
|                 sib_item.set_data(_PERSON,sib_id) |                 sib_item.set_data(_PERSON,sib_id) | ||||||
|                 sib_item.connect("activate",self.on_childmenu_changed) |                 sib_item.connect("activate",self.on_childmenu_changed) | ||||||
|                 sib_item.show() |                 sib_item.show() | ||||||
| @@ -596,7 +610,10 @@ class PedigreeView: | |||||||
|             else: |             else: | ||||||
|                 label = gtk.Label(NameDisplay.displayer.display(child)) |                 label = gtk.Label(NameDisplay.displayer.display(child)) | ||||||
|  |  | ||||||
|             child_item = gtk.MenuItem(None) |             go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) | ||||||
|  |             go_image.show() | ||||||
|  |             child_item = gtk.ImageMenuItem(None) | ||||||
|  |             child_item.set_image(go_image) | ||||||
|             label.set_use_markup(True) |             label.set_use_markup(True) | ||||||
|             label.show() |             label.show() | ||||||
|             label.set_alignment(0,0) |             label.set_alignment(0,0) | ||||||
| @@ -630,7 +647,10 @@ class PedigreeView: | |||||||
|             else: |             else: | ||||||
|                 label = gtk.Label(NameDisplay.displayer.display(par)) |                 label = gtk.Label(NameDisplay.displayer.display(par)) | ||||||
|  |  | ||||||
|             par_item = gtk.MenuItem(None) |             go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) | ||||||
|  |             go_image.show() | ||||||
|  |             par_item = gtk.ImageMenuItem(None) | ||||||
|  |             par_item.set_image(go_image) | ||||||
|             label.set_use_markup(True) |             label.set_use_markup(True) | ||||||
|             label.show() |             label.show() | ||||||
|             label.set_alignment(0,0) |             label.set_alignment(0,0) | ||||||
| @@ -652,7 +672,9 @@ class PedigreeView: | |||||||
|  |  | ||||||
|         # Add history-based navigation |         # Add history-based navigation | ||||||
|         self.add_nav_portion_to_menu(menu) |         self.add_nav_portion_to_menu(menu) | ||||||
|  |         self.add_settings_to_menu(menu) | ||||||
|         menu.popup(None,None,None,event.button,event.time) |         menu.popup(None,None,None,event.button,event.time) | ||||||
|  |         return 1 | ||||||
|  |  | ||||||
|     def format_relation( self, family, line_count): |     def format_relation( self, family, line_count): | ||||||
|         text = "" |         text = "" | ||||||
| @@ -664,6 +686,7 @@ class PedigreeView: | |||||||
|                 text += event.get_date() |                 text += event.get_date() | ||||||
|                 text += "\n" |                 text += "\n" | ||||||
|                 text += self.get_place_name(event.get_place_handle()) |                 text += self.get_place_name(event.get_place_handle()) | ||||||
|  |                 break | ||||||
|         return text |         return text | ||||||
|  |  | ||||||
|     def get_place_name( self, place_handle): |     def get_place_name( self, place_handle): | ||||||
| @@ -738,59 +761,3 @@ def find_parents(db,p): | |||||||
|         if mother_handle not in parentlist: |         if mother_handle not in parentlist: | ||||||
|             parentlist.append(mother_handle) |             parentlist.append(mother_handle) | ||||||
|     return parentlist |     return parentlist | ||||||
|  |  | ||||||
| #------------------------------------------------------------------------- |  | ||||||
| # |  | ||||||
| # Functions to build the text displayed in the details view of a DispBox |  | ||||||
| # aditionally used by PedigreeView to get the largest area covered by a DispBox |  | ||||||
| # |  | ||||||
| #------------------------------------------------------------------------- |  | ||||||
| def build_detail_string(db,person): |  | ||||||
|  |  | ||||||
|     detail_text = NameDisplay.displayer.display(person) |  | ||||||
|  |  | ||||||
|     def format_event(db, label, event): |  | ||||||
|         if not event: |  | ||||||
|             return u"" |  | ||||||
|         ed = event.get_date() |  | ||||||
|         ep = None |  | ||||||
|         place_handle = event.get_place_handle() |  | ||||||
|         if place_handle: |  | ||||||
|             place_title = db.get_place_from_handle(place_handle).get_title() |  | ||||||
|             if place_title != "": |  | ||||||
|                 if len(place_title) > 15: |  | ||||||
|                     ep = place_title[:14]+"..." |  | ||||||
|                 else: |  | ||||||
|                     ep = place_title |  | ||||||
|         if ep: |  | ||||||
|             return u"\n%s %s, %s" % (label,ed,ep) |  | ||||||
|         return u"\n%s %s" % (label,ed) |  | ||||||
|  |  | ||||||
|      |  | ||||||
|     birth_handle = person.get_birth_handle() |  | ||||||
|     if birth_handle: |  | ||||||
|         detail_text += format_event(db, _BORN, db.get_event_from_handle(birth_handle)) |  | ||||||
|     else: |  | ||||||
|         for event_handle in person.get_event_list(): |  | ||||||
|             event = db.get_event_from_handle(event_handle) |  | ||||||
|             if event.get_name() == "Baptism": |  | ||||||
|                 detail_text += format_event(db, _BAPT, event) |  | ||||||
|                 break |  | ||||||
|             if event.get_name() == "Christening": |  | ||||||
|                 detail_text += format_event(db, _CHRI, event) |  | ||||||
|                 break |  | ||||||
|  |  | ||||||
|     death_handle = person.get_death_handle() |  | ||||||
|     if death_handle: |  | ||||||
|         detail_text += format_event(db, _DIED, db.get_event_from_handle(death_handle)) |  | ||||||
|     else: |  | ||||||
|         for event_handle in person.get_event_list(): |  | ||||||
|             event = db.get_event_from_handle(event_handle) |  | ||||||
|             if event.get_name() == "Burial": |  | ||||||
|                 detail_text += format_event(db, _BURI, event) |  | ||||||
|                 break |  | ||||||
|             if event.get_name() == "Cremation": |  | ||||||
|                 detail_text += format_event(db, _CREM, event) |  | ||||||
|                 break |  | ||||||
|  |  | ||||||
|     return detail_text |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user