* src/PedView.py: Show Baptism/Burial as fallback for birth/death; Moved text generation for details view out of DispBox class so that PedigreeView can use the same string for max size calculation.
* src/PeopleModel.py: Show Baptism/Burial as fallback for birth/death. Based on patch from Jim Smart. * src/PeopleView.py: Enable makup that PeopleModel can render fallback data in italics. svn: r4299
This commit is contained in:
		| @@ -1,3 +1,11 @@ | |||||||
|  | 2005-04-05  Martin Hawlisch  <Martin.Hawlisch@gmx.de> | ||||||
|  | 	* src/PedView.py: Show Baptism/Burial as fallback for birth/death; Moved text | ||||||
|  | 	generation for details view out of DispBox class so that PedigreeView can use the | ||||||
|  | 	same string for max size calculation. | ||||||
|  | 	* src/PeopleModel.py: Show Baptism/Burial as fallback for birth/death. Based on | ||||||
|  | 	patch from Jim Smart. | ||||||
|  | 	* src/PeopleView.py: Enable makup that PeopleModel can render fallback data in italics. | ||||||
|  |  | ||||||
| 2005-04-01  Richard Taylor <rjt-gramps@thegrindstone.me.uk> | 2005-04-01  Richard Taylor <rjt-gramps@thegrindstone.me.uk> | ||||||
| 	* src/GrampsDBCallback.py: added support for disconnecting callbacks, | 	* src/GrampsDBCallback.py: added support for disconnecting callbacks, | ||||||
| 	better test code and lots of logging. Improved the comments. | 	better test code and lots of logging. Improved the comments. | ||||||
|   | |||||||
							
								
								
									
										102
									
								
								src/PedView.py
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								src/PedView.py
									
									
									
									
									
								
							| @@ -61,6 +61,11 @@ _CANVASPAD = 3 | |||||||
| _PERSON    = "p" | _PERSON    = "p" | ||||||
| _BORN = _('b.') | _BORN = _('b.') | ||||||
| _DIED = _('d.') | _DIED = _('d.') | ||||||
|  | _BAPT = _('bap.') | ||||||
|  | _CHRI = _('chr.') | ||||||
|  | _BURI = _('bur.') | ||||||
|  | _CREM = _('crem.') | ||||||
|  |  | ||||||
|  |  | ||||||
| #------------------------------------------------------------------------- | #------------------------------------------------------------------------- | ||||||
| # | # | ||||||
| @@ -77,6 +82,7 @@ class DispBox: | |||||||
|         shadow = _PAD |         shadow = _PAD | ||||||
|         xpad = _PAD |         xpad = _PAD | ||||||
|          |          | ||||||
|  |         self.db = db | ||||||
|         self.change = change |         self.change = change | ||||||
|         self.edit = edit |         self.edit = edit | ||||||
|         self.build_menu = build_menu |         self.build_menu = build_menu | ||||||
| @@ -88,28 +94,9 @@ class DispBox: | |||||||
|         self.root = root |         self.root = root | ||||||
|  |  | ||||||
|         self.name = NameDisplay.displayer.display(person) |         self.name = NameDisplay.displayer.display(person) | ||||||
|         birth_handle = self.person.get_birth_handle() |  | ||||||
|         death_handle = self.person.get_death_handle() |  | ||||||
|         if birth_handle: |  | ||||||
|             bd = db.get_event_from_handle(birth_handle).get_date() |  | ||||||
|         else: |  | ||||||
|             bd = "" |  | ||||||
|  |  | ||||||
|         if death_handle: |  | ||||||
|             dd = db.get_event_from_handle(death_handle).get_date() |  | ||||||
|         else: |  | ||||||
|             dd = "" |  | ||||||
|              |  | ||||||
|         if bd and dd: |  | ||||||
|             self.exp = "%s\n%s %s\n%s %s" % (self.name,_BORN,bd,_DIED,dd ) |  | ||||||
|         elif bd: |  | ||||||
|             self.exp = "%s\n%s %s" % (self.name,_BORN,bd ) |  | ||||||
|         elif dd: |  | ||||||
|             self.exp = "%s\n%s %s" % (self.name,_DIED,dd ) |  | ||||||
|         else: |  | ||||||
|             self.exp = "%s" % self.name |  | ||||||
|  |  | ||||||
|          |          | ||||||
|  |         self.exp = build_detail_string( db, person) | ||||||
|  |  | ||||||
|         self.group = self.root.add(CanvasGroup,x=x,y=y) |         self.group = self.root.add(CanvasGroup,x=x,y=y) | ||||||
|         self.shadow = self.group.add( |         self.shadow = self.group.add( | ||||||
|             CanvasRect, x1=shadow, y1=shadow, x2=w+shadow, y2=h+shadow, |             CanvasRect, x1=shadow, y1=shadow, x2=w+shadow, y2=h+shadow, | ||||||
| @@ -130,6 +117,7 @@ class DispBox: | |||||||
|         self.group.connect('event',self.group_event) |         self.group.connect('event',self.group_event) | ||||||
|         self.group.set_data(_PERSON,person.get_handle()) |         self.group.set_data(_PERSON,person.get_handle()) | ||||||
|  |  | ||||||
|  |    | ||||||
|     def cleanup(self): |     def cleanup(self): | ||||||
|         self.shadow.destroy() |         self.shadow.destroy() | ||||||
|         self.bkgnd.destroy() |         self.bkgnd.destroy() | ||||||
| @@ -229,23 +217,12 @@ class PedigreeView: | |||||||
|          |          | ||||||
|         for t in lst: |         for t in lst: | ||||||
|             if t: |             if t: | ||||||
|                 birth_handle = t[0].get_birth_handle() |                 boxtext = build_detail_string(self.parent.db,t[0]).encode("UTF-8") | ||||||
|                 death_handle = t[0].get_death_handle() |                 for line in boxtext.split("\n"): | ||||||
|                 if birth_handle: |  | ||||||
|                     birth = self.parent.db.get_event_from_handle(birth_handle).get_date() |  | ||||||
|                 else: |  | ||||||
|                     birth = u"" |  | ||||||
|                 if death_handle: |  | ||||||
|                     death = self.parent.db.get_event_from_handle(death_handle).get_date() |  | ||||||
|                 else: |  | ||||||
|                     death = u"" |  | ||||||
|                      |  | ||||||
|                 for n in [NameDisplay.displayer.display(t[0]), u'%s %s' % (_BORN,birth), |  | ||||||
|                           u'%s %s' % (_DIED,death)]: |  | ||||||
|                     try: |                     try: | ||||||
|                         a.set_text(n,len(n)) |                         a.set_text(line,len(line)) | ||||||
|                     except TypeError: |                     except TypeError: | ||||||
|                         a.set_text(n) |                         a.set_text(line) | ||||||
|                     (w1,h1) = a.get_pixel_size() |                     (w1,h1) = a.get_pixel_size() | ||||||
|                     h = max(h,h1) |                     h = max(h,h1) | ||||||
|                     w = max(w,w1) |                     w = max(w,w1) | ||||||
| @@ -759,3 +736,56 @@ 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 != "": | ||||||
|  |                 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 | ||||||
|   | |||||||
| @@ -28,6 +28,7 @@ | |||||||
| from gettext import gettext as _ | from gettext import gettext as _ | ||||||
| import time | import time | ||||||
| import locale | import locale | ||||||
|  | import cgi | ||||||
|  |  | ||||||
| #------------------------------------------------------------------------- | #------------------------------------------------------------------------- | ||||||
| # | # | ||||||
| @@ -57,6 +58,7 @@ _GENDER_COL= 2 | |||||||
| _NAME_COL  = 3 | _NAME_COL  = 3 | ||||||
| _DEATH_COL = 6 | _DEATH_COL = 6 | ||||||
| _BIRTH_COL = 7 | _BIRTH_COL = 7 | ||||||
|  | _EVENT_COL = 8 | ||||||
| _FAMILY_COL= 9 | _FAMILY_COL= 9 | ||||||
| _CHANGE_COL= 21 | _CHANGE_COL= 21 | ||||||
|  |  | ||||||
| @@ -141,15 +143,15 @@ class PeopleModel(gtk.GenericTreeModel): | |||||||
|         return locale.strcoll(f[0],s[0]) |         return locale.strcoll(f[0],s[0]) | ||||||
|  |  | ||||||
|     def on_get_flags(self): |     def on_get_flags(self): | ||||||
| 	'''returns the GtkTreeModelFlags for this particular type of model''' |         '''returns the GtkTreeModelFlags for this particular type of model''' | ||||||
| 	return gtk.TREE_MODEL_ITERS_PERSIST |         return gtk.TREE_MODEL_ITERS_PERSIST | ||||||
|  |  | ||||||
|     def on_get_n_columns(self): |     def on_get_n_columns(self): | ||||||
|         return len(COLUMN_DEFS) |         return len(COLUMN_DEFS) | ||||||
|  |  | ||||||
|     def on_get_path(self, node): |     def on_get_path(self, node): | ||||||
| 	'''returns the tree path (a tuple of indices at the various |         '''returns the tree path (a tuple of indices at the various | ||||||
| 	levels) for a particular node.''' |         levels) for a particular node.''' | ||||||
|         try: |         try: | ||||||
|             return (self.top_path2iter.index(node),) |             return (self.top_path2iter.index(node),) | ||||||
|         except: |         except: | ||||||
| @@ -198,7 +200,7 @@ class PeopleModel(gtk.GenericTreeModel): | |||||||
|         pass |         pass | ||||||
|  |  | ||||||
|     def on_iter_next(self, node): |     def on_iter_next(self, node): | ||||||
| 	'''returns the next node at this level of the tree''' |         '''returns the next node at this level of the tree''' | ||||||
|         try: |         try: | ||||||
|             path = self.top_path2iter.index(node) |             path = self.top_path2iter.index(node) | ||||||
|             if path+1 == len(self.top_path2iter): |             if path+1 == len(self.top_path2iter): | ||||||
| @@ -216,7 +218,7 @@ class PeopleModel(gtk.GenericTreeModel): | |||||||
|             return self.path2iter.get((node,0)) |             return self.path2iter.get((node,0)) | ||||||
|  |  | ||||||
|     def on_iter_has_child(self, node): |     def on_iter_has_child(self, node): | ||||||
| 	'''returns true if this node has children''' |         '''returns true if this node has children''' | ||||||
|         if node == None: |         if node == None: | ||||||
|             return len(self.sname_sub) |             return len(self.sname_sub) | ||||||
|         if self.sname_sub.has_key(node) and len(self.sname_sub[node]) > 0: |         if self.sname_sub.has_key(node) and len(self.sname_sub[node]) > 0: | ||||||
| @@ -243,7 +245,7 @@ class PeopleModel(gtk.GenericTreeModel): | |||||||
|             return None |             return None | ||||||
|  |  | ||||||
|     def on_iter_parent(self, node): |     def on_iter_parent(self, node): | ||||||
| 	'''returns the parent of this node''' |         '''returns the parent of this node''' | ||||||
|         path = self.iter2path.get(node) |         path = self.iter2path.get(node) | ||||||
|         if path: |         if path: | ||||||
|             return path[0] |             return path[0] | ||||||
| @@ -253,7 +255,7 @@ class PeopleModel(gtk.GenericTreeModel): | |||||||
|         return data[_NAME_COL].get_sort_name() |         return data[_NAME_COL].get_sort_name() | ||||||
|  |  | ||||||
|     def column_spouse(self,data,node): |     def column_spouse(self,data,node): | ||||||
| 	spouses_names = u"" |         spouses_names = u"" | ||||||
|         handle = data[0] |         handle = data[0] | ||||||
|         for family_handle in data[_FAMILY_COL]: |         for family_handle in data[_FAMILY_COL]: | ||||||
|             family = self.db.get_family_from_handle(family_handle) |             family = self.db.get_family_from_handle(family_handle) | ||||||
| @@ -266,7 +268,7 @@ class PeopleModel(gtk.GenericTreeModel): | |||||||
|                 if len(spouses_names) > 0: |                 if len(spouses_names) > 0: | ||||||
|                     spouses_names += ", " |                     spouses_names += ", " | ||||||
|                 spouses_names += NameDisplay.displayer.display(spouse) |                 spouses_names += NameDisplay.displayer.display(spouse) | ||||||
| 	return spouses_names |         return spouses_names | ||||||
|  |  | ||||||
|     def column_name(self,data,node): |     def column_name(self,data,node): | ||||||
|         return NameDisplay.displayer.sorted_name(data[_NAME_COL]) |         return NameDisplay.displayer.sorted_name(data[_NAME_COL]) | ||||||
| @@ -282,15 +284,29 @@ class PeopleModel(gtk.GenericTreeModel): | |||||||
|  |  | ||||||
|     def column_birth_day(self,data,node): |     def column_birth_day(self,data,node): | ||||||
|         if data[_BIRTH_COL]: |         if data[_BIRTH_COL]: | ||||||
|             return self.db.get_event_from_handle(data[_BIRTH_COL]).get_date() |             birth = self.db.get_event_from_handle(data[_BIRTH_COL]) | ||||||
|         else: |             if birth.get_date() and birth.get_date() != "": | ||||||
|             return u"" |                 return cgi.escape(birth.get_date()) | ||||||
|  |          | ||||||
|  |         for event_handle in data[_EVENT_COL]: | ||||||
|  |             event = self.db.get_event_from_handle(event_handle) | ||||||
|  |             if event.name in ["Baptism", "Christening"] and event.get_date() != "": | ||||||
|  |                 return "<i>" + cgi.escape(event.get_date()) + "</i>" | ||||||
|  |          | ||||||
|  |         return u"" | ||||||
|  |  | ||||||
|     def column_death_day(self,data,node): |     def column_death_day(self,data,node): | ||||||
|         if data[_DEATH_COL]: |         if data[_DEATH_COL]: | ||||||
|             return self.db.get_event_from_handle(data[_DEATH_COL]).get_date() |             death = self.db.get_event_from_handle(data[_DEATH_COL]) | ||||||
|         else: |             if death.get_date() and death.get_date() != "": | ||||||
|             return u"" |                 return cgi.escape(death.get_date()) | ||||||
|  |          | ||||||
|  |         for event_handle in data[_EVENT_COL]: | ||||||
|  |             event = self.db.get_event_from_handle(event_handle) | ||||||
|  |             if event.name in ["Burial", "Cremation"] and event.get_date() != "": | ||||||
|  |                 return "<i>" + cgi.escape(event.get_date()) + "</i>" | ||||||
|  |          | ||||||
|  |         return u"" | ||||||
|  |  | ||||||
|     def column_cause_of_death(self,data,node): |     def column_cause_of_death(self,data,node): | ||||||
|         if data[_DEATH_COL]: |         if data[_DEATH_COL]: | ||||||
| @@ -302,18 +318,42 @@ class PeopleModel(gtk.GenericTreeModel): | |||||||
|         if data[_BIRTH_COL]: |         if data[_BIRTH_COL]: | ||||||
|             event = self.db.get_event_from_handle(data[_BIRTH_COL]) |             event = self.db.get_event_from_handle(data[_BIRTH_COL]) | ||||||
|             if event: |             if event: | ||||||
|  |                   place_handle = event.get_place_handle() | ||||||
|  |                   if place_handle: | ||||||
|  |                     place_title = self.db.get_place_from_handle(place_handle).get_title() | ||||||
|  |                     if place_title != "": | ||||||
|  |                         return cgi.escape(place_title) | ||||||
|  |          | ||||||
|  |         for event_handle in data[_EVENT_COL]: | ||||||
|  |             event = self.db.get_event_from_handle(event_handle) | ||||||
|  |             if event.name in ["Baptism", "Christening"]: | ||||||
|                 place_handle = event.get_place_handle() |                 place_handle = event.get_place_handle() | ||||||
|                 if place_handle: |                 if place_handle: | ||||||
|                     return self.db.get_place_from_handle(place_handle).get_title() |                     place_title = self.db.get_place_from_handle(place_handle).get_title() | ||||||
|  |                     if place_title != "": | ||||||
|  |                         return "<i>" + cgi.escape(place_title) + "</i>" | ||||||
|  |          | ||||||
|         return u"" |         return u"" | ||||||
|  |  | ||||||
|     def column_death_place(self,data,node): |     def column_death_place(self,data,node): | ||||||
|         if data[_DEATH_COL]: |         if data[_DEATH_COL]: | ||||||
|             event = self.db.get_event_from_handle(data[_DEATH_COL]) |             event = self.db.get_event_from_handle(data[_DEATH_COL]) | ||||||
|             if event: |             if event: | ||||||
|  |                   place_handle = event.get_place_handle() | ||||||
|  |                   if place_handle: | ||||||
|  |                     place_title = self.db.get_place_from_handle(place_handle).get_title() | ||||||
|  |                     if place_title != "": | ||||||
|  |                         return cgi.escape(place_title) | ||||||
|  |          | ||||||
|  |         for event_handle in data[_EVENT_COL]: | ||||||
|  |             event = self.db.get_event_from_handle(event_handle) | ||||||
|  |             if event.name in ["Baptism", "Christening"]: | ||||||
|                 place_handle = event.get_place_handle() |                 place_handle = event.get_place_handle() | ||||||
|                 if place_handle: |                 if place_handle: | ||||||
|                     return self.db.get_place_from_handle(place_handle).get_title() |                     place_title = self.db.get_place_from_handle(place_handle).get_title() | ||||||
|  |                     if place_title != "": | ||||||
|  |                         return "<i>" + cgi.escape(place_title) + "</i>" | ||||||
|  |          | ||||||
|         return u"" |         return u"" | ||||||
|  |  | ||||||
|     def column_int_id(self,data,node): |     def column_int_id(self,data,node): | ||||||
|   | |||||||
| @@ -127,7 +127,7 @@ class PeopleView: | |||||||
|             if not pair[0]: |             if not pair[0]: | ||||||
|                 continue |                 continue | ||||||
|             name = column_names[pair[1]] |             name = column_names[pair[1]] | ||||||
|             column = gtk.TreeViewColumn(name, self.renderer, text=pair[1]) |             column = gtk.TreeViewColumn(name, self.renderer, markup=pair[1]) | ||||||
|             column.set_resizable(True) |             column.set_resizable(True) | ||||||
|             column.set_min_width(60) |             column.set_min_width(60) | ||||||
|             column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY) |             column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user