diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index a22a87a7c..c41c1b630 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,8 @@ +2006-01-04 Don Allingham + * src/FamlyView.py: enable menu buttons, siblings + * src/PageView.py: move home function into this class + * src/PersonView.py: move home function out of this class + 2006-01-04 Martin Hawlisch * src/FamilyView.py: Handle active person == None diff --git a/gramps2/src/FamilyView.py b/gramps2/src/FamilyView.py index b2a1dda7a..995efd930 100644 --- a/gramps2/src/FamilyView.py +++ b/gramps2/src/FamilyView.py @@ -6,6 +6,7 @@ from gettext import gettext as _ import gc import re +import cgi #------------------------------------------------------------------------- # @@ -29,10 +30,10 @@ import Utils import DateHandler import ImgManip -class FamilyView(PageView.PageView): +class FamilyView(PageView.PersonNavView): def __init__(self,dbstate,uistate): - PageView.PageView.__init__(self,'Pedigree View',dbstate,uistate) + PageView.PersonNavView.__init__(self,'Pedigree View',dbstate,uistate) dbstate.connect('database-changed',self.change_db) dbstate.connect('active-changed',self.change_person) @@ -54,20 +55,41 @@ class FamilyView(PageView.PageView): self.scroll.add_with_viewport(self.vbox) return self.scroll - def navigation_type(self): - return PageView.NAVIGATION_PERSON - - def define_actions(self): - pass - def ui_definition(self): """ Specifies the UIManager XML code that defines the menus and buttons associated with the interface. """ return ''' + + + + + + + + + + + + + + + + + + + + + + + + ''' + def define_actions(self): + PageView.PersonNavView.define_actions(self) + def change_db(self,db): return @@ -125,9 +147,12 @@ class FamilyView(PageView.PageView): def make_edit_button(self,handle): return self.make_button(handle,gtk.STOCK_EDIT,self.edit_person) - def write_title(self,person): - label = gtk.Label('%s' - % NameDisplay.displayer.display(person)) + def write_title(self,person): + + # name and edit button + name = NameDisplay.displayer.display(person) + text = '%s' % cgi.escape(name) + label = gtk.Label(text) label.set_use_markup(True) label.set_alignment(0,0.5) label.show() @@ -139,54 +164,89 @@ class FamilyView(PageView.PageView): hbox.pack_start(label,False) hbox.pack_start(button,False) + # image image_list = person.get_media_list() if image_list: - print image_list mobj = self.dbstate.db.get_object_from_handle(image_list[0].ref) if mobj.get_mime_type()[0:5] == "image": pixbuf = ImgManip.get_thumbnail_image(mobj.get_path()) image = gtk.Image() image.set_from_pixbuf(pixbuf) image.show() - self.child.attach(image,4,5,0,1) + self.child.attach(image,4,5,0,4) + self.child.attach(hbox,0,5,0,1) + + # GRAMPS ID + self.row = 1 + + self.write_person_data("%s:" % _('ID'),person.gramps_id) + + # birth/death events + + birth_ref = person.get_birth_ref() + if birth_ref: + birth = self.dbstate.db.get_event_from_handle(birth_ref.ref) + else: + birth = None + self.write_person_event("%s:" % _('Birth'),birth) - self.child.attach(hbox,0,4,0,1) -# self.child.attach(button,4,5,0,1,xoptions=0) + death_ref = person.get_death_ref() + if death_ref: + death = self.dbstate.db.get_event_from_handle(death_ref.ref) + else: + death = None + self.write_person_event("%s:" % _('Death'),death) + + # separator sep = gtk.HSeparator() sep.show() - self.child.attach(sep,0,5,1,2) - self.row = 2 + self.child.attach(sep,0,5,4,5) + self.row = 5 - def write_data(self,title): + def write_data(self,title,start_col=3,stop_col=5): label = gtk.Label(title) label.set_alignment(0,0.5) label.show() - self.child.attach(label,3,5,self.row,self.row+1, + self.child.attach(label,start_col,stop_col,self.row,self.row+1, xoptions=gtk.EXPAND|gtk.FILL) self.row += 1 def write_label(self,title): - label = gtk.Label('%s' % title) + text = '%s' % cgi.escape(title) + label = gtk.Label(text) label.set_use_markup(True) label.set_alignment(0,0.5) label.show() self.child.attach(label,1,5,self.row,self.row+1) self.row += 1 + def write_person_data(self,title,data): + label = gtk.Label(title) + label.set_alignment(0,0.5) + label.show() + self.child.attach(label,2,3,self.row,self.row+1,xoptions=gtk.FILL) + + label = gtk.Label(data) + label.set_alignment(0,0.5) + label.show() + self.child.attach(label,3,4,self.row,self.row+1, + xoptions=gtk.EXPAND|gtk.FILL) + self.row += 1 + def write_person(self,title,handle): if title: format = '%s: ' else: format = "%s" - label = gtk.Label(format % title) + label = gtk.Label(format % cgi.escape(title)) label.set_use_markup(True) label.set_alignment(0,0.5) label.show() self.child.attach(label,2,3,self.row,self.row+1,xoptions=gtk.FILL) - label = gtk.Label('%s' % - self.get_name(handle)) + text = '%s' % cgi.escape(self.get_name(handle)) + label = gtk.Label(text) label.set_use_markup(True) label.set_alignment(0,0.5) label.show() @@ -215,14 +275,14 @@ class FamilyView(PageView.PageView): def enter_text(self,obj,event,handle): label = obj.child - label.set_text('%s' % - self.get_name(handle)) + text = '%s' % cgi.escape(self.get_name(handle)) + label.set_text(text) label.set_use_markup(True) def leave_text(self,obj,event,handle): + text = '%s' % cgi.escape(self.get_name(handle)) label = obj.child - label.set_text('%s' % - self.get_name(handle)) + label.set_text(text) label.set_use_markup(True) def make_enter_notify(self,handle): @@ -233,6 +293,15 @@ class FamilyView(PageView.PageView): self.write_person(_('Father'),family.get_father_handle()) self.write_person(_('Mother'),family.get_mother_handle()) + active = self.dbstate.active.handle + + child_list = [handle for handle in family.get_child_handle_list() if handle != active] + label = _("Siblings") + if child_list: + for child in child_list: + self.write_person(label,child) + label = u"" + def write_relationship(self,family): rtype = family.get_relationship() if type(rtype) == tuple: @@ -254,21 +323,72 @@ class FamilyView(PageView.PageView): event = self.dbstate.db.get_event_from_handle(handle) etype = event.get_type() if etype[0] == RelLib.Event.MARRIAGE: - dobj = event.get_date_object() - phandle = event.get_place_handle() - if phandle: - pname = self.place_name(phandle) - else: - pname = None - value = { - 'date' : DateHandler.displayer.display(dobj), - 'place' : pname, - } + self.write_event_ref(_('Marriage'),event) - if phandle: - self.write_data(_('Married: %(date)s in %(place)s') % value) - else: - self.write_data(_('Married: %(date)s') % value) + def write_event_ref(self, ename, event,start_col=3,stop_col=5): + if event: + dobj = event.get_date_object() + phandle = event.get_place_handle() + if phandle: + pname = self.place_name(phandle) + else: + pname = None + date_str = DateHandler.displayer.display(dobj) + + value = { + 'date' : DateHandler.displayer.display(dobj), + 'place' : pname, + 'event_type' : ename, + } + else: + pname = None + dobj = None + value = { + 'event_type' : ename, + } + + if dobj: + if pname: + self.write_data(_('%(event_type)s: %(date)s in %(place)s') % + value,start_col,stop_col) + else: + self.write_data(_('%(event_type)s: %(date)s') % value, + start_col, stop_col) + elif pname: + self.write_data(_('%(event_type)s: %(place)s') % value, + start_col,stop_col) + else: + self.write_data(_('%(event_type)s:') % value, + start_col, stop_col) + + def write_person_event(self, ename, event): + if event: + dobj = event.get_date_object() + phandle = event.get_place_handle() + if phandle: + pname = self.place_name(phandle) + else: + pname = None + date_str = DateHandler.displayer.display(dobj) + + value = { + 'date' : DateHandler.displayer.display(dobj), + 'place' : pname, + } + else: + pname = None + dobj = None + + if dobj: + if pname: + self.write_person_data(ename, + _('%(date)s in %(place)s') % value) + else: + self.write_person_data(ename,'%(date)s' % value) + elif pname: + self.write_person_data(ename,pname) + else: + self.write_person_data(ename,'') def write_family(self,family_handle): family = self.dbstate.db.get_family_from_handle(family_handle) diff --git a/gramps2/src/PageView.py b/gramps2/src/PageView.py index b4da6e22e..95dda66cb 100644 --- a/gramps2/src/PageView.py +++ b/gramps2/src/PageView.py @@ -162,6 +162,9 @@ class PersonNavView(PageView): ('Back',gtk.STOCK_GO_BACK,"_Back", None, None, self.back_clicked) ]) + self.add_action('HomePerson', gtk.STOCK_HOME, "_Home", + callback=self.home) + self.add_action_group(self.back_action) self.add_action_group(self.fwd_action) diff --git a/gramps2/src/PersonView.py b/gramps2/src/PersonView.py index ff5f47d15..ec0160d31 100644 --- a/gramps2/src/PersonView.py +++ b/gramps2/src/PersonView.py @@ -102,8 +102,6 @@ class PersonView(PageView.PersonNavView): callback=self.edit) self.add_action('Remove', gtk.STOCK_REMOVE, "_Remove", callback=self.remove) - self.add_action('HomePerson', gtk.STOCK_HOME, "_Home", - callback=self.home) self.add_toggle_action('Filter', None, '_Filter', callback=self.filter_toggle)