* 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


svn: r5669
This commit is contained in:
Don Allingham
2006-01-04 18:56:06 +00:00
parent 2af34cfb23
commit 57706e08f6
4 changed files with 169 additions and 43 deletions

View File

@@ -1,3 +1,8 @@
2006-01-04 Don Allingham <don@gramps-project.org>
* 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 <Martin.Hawlisch@gmx.de> 2006-01-04 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/FamilyView.py: Handle active person == None * src/FamilyView.py: Handle active person == None

View File

@@ -6,6 +6,7 @@
from gettext import gettext as _ from gettext import gettext as _
import gc import gc
import re import re
import cgi
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@@ -29,10 +30,10 @@ import Utils
import DateHandler import DateHandler
import ImgManip import ImgManip
class FamilyView(PageView.PageView): class FamilyView(PageView.PersonNavView):
def __init__(self,dbstate,uistate): 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('database-changed',self.change_db)
dbstate.connect('active-changed',self.change_person) dbstate.connect('active-changed',self.change_person)
@@ -54,20 +55,41 @@ class FamilyView(PageView.PageView):
self.scroll.add_with_viewport(self.vbox) self.scroll.add_with_viewport(self.vbox)
return self.scroll return self.scroll
def navigation_type(self):
return PageView.NAVIGATION_PERSON
def define_actions(self):
pass
def ui_definition(self): def ui_definition(self):
""" """
Specifies the UIManager XML code that defines the menus and buttons Specifies the UIManager XML code that defines the menus and buttons
associated with the interface. associated with the interface.
""" """
return '''<ui> return '''<ui>
<menubar name="MenuBar">
<menu action="GoMenu">
<placeholder name="CommonGo">
<menuitem action="Back"/>
<menuitem action="Forward"/>
<separator/>
<menuitem action="HomePerson"/>
<separator/>
</placeholder>
</menu>
</menubar>
<toolbar name="ToolBar">
<placeholder name="CommonNavigation">
<toolitem action="Back"/>
<toolitem action="Forward"/>
<toolitem action="HomePerson"/>
</placeholder>
</toolbar>
<popup name="Popup">
<menuitem action="Back"/>
<menuitem action="Forward"/>
<menuitem action="HomePerson"/>
<separator/>
</popup>
</ui>''' </ui>'''
def define_actions(self):
PageView.PersonNavView.define_actions(self)
def change_db(self,db): def change_db(self,db):
return return
@@ -125,9 +147,12 @@ class FamilyView(PageView.PageView):
def make_edit_button(self,handle): def make_edit_button(self,handle):
return self.make_button(handle,gtk.STOCK_EDIT,self.edit_person) return self.make_button(handle,gtk.STOCK_EDIT,self.edit_person)
def write_title(self,person): def write_title(self,person):
label = gtk.Label('<span size="larger" weight="bold">%s</span>'
% NameDisplay.displayer.display(person)) # name and edit button
name = NameDisplay.displayer.display(person)
text = '<span size="larger" weight="bold">%s</span>' % cgi.escape(name)
label = gtk.Label(text)
label.set_use_markup(True) label.set_use_markup(True)
label.set_alignment(0,0.5) label.set_alignment(0,0.5)
label.show() label.show()
@@ -139,54 +164,89 @@ class FamilyView(PageView.PageView):
hbox.pack_start(label,False) hbox.pack_start(label,False)
hbox.pack_start(button,False) hbox.pack_start(button,False)
# image
image_list = person.get_media_list() image_list = person.get_media_list()
if image_list: if image_list:
print image_list
mobj = self.dbstate.db.get_object_from_handle(image_list[0].ref) mobj = self.dbstate.db.get_object_from_handle(image_list[0].ref)
if mobj.get_mime_type()[0:5] == "image": if mobj.get_mime_type()[0:5] == "image":
pixbuf = ImgManip.get_thumbnail_image(mobj.get_path()) pixbuf = ImgManip.get_thumbnail_image(mobj.get_path())
image = gtk.Image() image = gtk.Image()
image.set_from_pixbuf(pixbuf) image.set_from_pixbuf(pixbuf)
image.show() 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) death_ref = person.get_death_ref()
# self.child.attach(button,4,5,0,1,xoptions=0) 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 = gtk.HSeparator()
sep.show() sep.show()
self.child.attach(sep,0,5,1,2) self.child.attach(sep,0,5,4,5)
self.row = 2 self.row = 5
def write_data(self,title): def write_data(self,title,start_col=3,stop_col=5):
label = gtk.Label(title) label = gtk.Label(title)
label.set_alignment(0,0.5) label.set_alignment(0,0.5)
label.show() 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) xoptions=gtk.EXPAND|gtk.FILL)
self.row += 1 self.row += 1
def write_label(self,title): def write_label(self,title):
label = gtk.Label('<span style="oblique" weight="bold">%s</span>' % title) text = '<span style="oblique" weight="bold">%s</span>' % cgi.escape(title)
label = gtk.Label(text)
label.set_use_markup(True) label.set_use_markup(True)
label.set_alignment(0,0.5) label.set_alignment(0,0.5)
label.show() label.show()
self.child.attach(label,1,5,self.row,self.row+1) self.child.attach(label,1,5,self.row,self.row+1)
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): def write_person(self,title,handle):
if title: if title:
format = '<span weight="bold">%s: </span>' format = '<span weight="bold">%s: </span>'
else: else:
format = "%s" format = "%s"
label = gtk.Label(format % title) label = gtk.Label(format % cgi.escape(title))
label.set_use_markup(True) label.set_use_markup(True)
label.set_alignment(0,0.5) label.set_alignment(0,0.5)
label.show() label.show()
self.child.attach(label,2,3,self.row,self.row+1,xoptions=gtk.FILL) self.child.attach(label,2,3,self.row,self.row+1,xoptions=gtk.FILL)
label = gtk.Label('<span underline="single">%s</span>' % text = '<span underline="single">%s</span>' % cgi.escape(self.get_name(handle))
self.get_name(handle)) label = gtk.Label(text)
label.set_use_markup(True) label.set_use_markup(True)
label.set_alignment(0,0.5) label.set_alignment(0,0.5)
label.show() label.show()
@@ -215,14 +275,14 @@ class FamilyView(PageView.PageView):
def enter_text(self,obj,event,handle): def enter_text(self,obj,event,handle):
label = obj.child label = obj.child
label.set_text('<span foreground="blue" underline="single">%s</span>' % text = '<span foreground="blue" underline="single">%s</span>' % cgi.escape(self.get_name(handle))
self.get_name(handle)) label.set_text(text)
label.set_use_markup(True) label.set_use_markup(True)
def leave_text(self,obj,event,handle): def leave_text(self,obj,event,handle):
text = '<span underline="single">%s</span>' % cgi.escape(self.get_name(handle))
label = obj.child label = obj.child
label.set_text('<span underline="single">%s</span>' % label.set_text(text)
self.get_name(handle))
label.set_use_markup(True) label.set_use_markup(True)
def make_enter_notify(self,handle): 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(_('Father'),family.get_father_handle())
self.write_person(_('Mother'),family.get_mother_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): def write_relationship(self,family):
rtype = family.get_relationship() rtype = family.get_relationship()
if type(rtype) == tuple: if type(rtype) == tuple:
@@ -254,21 +323,72 @@ class FamilyView(PageView.PageView):
event = self.dbstate.db.get_event_from_handle(handle) event = self.dbstate.db.get_event_from_handle(handle)
etype = event.get_type() etype = event.get_type()
if etype[0] == RelLib.Event.MARRIAGE: if etype[0] == RelLib.Event.MARRIAGE:
dobj = event.get_date_object() self.write_event_ref(_('Marriage'),event)
phandle = event.get_place_handle()
if phandle:
pname = self.place_name(phandle)
else:
pname = None
value = {
'date' : DateHandler.displayer.display(dobj),
'place' : pname,
}
if phandle: def write_event_ref(self, ename, event,start_col=3,stop_col=5):
self.write_data(_('Married: %(date)s in %(place)s') % value) if event:
else: dobj = event.get_date_object()
self.write_data(_('Married: %(date)s') % value) 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): def write_family(self,family_handle):
family = self.dbstate.db.get_family_from_handle(family_handle) family = self.dbstate.db.get_family_from_handle(family_handle)

View File

@@ -162,6 +162,9 @@ class PersonNavView(PageView):
('Back',gtk.STOCK_GO_BACK,"_Back", None, None, self.back_clicked) ('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.back_action)
self.add_action_group(self.fwd_action) self.add_action_group(self.fwd_action)

View File

@@ -102,8 +102,6 @@ class PersonView(PageView.PersonNavView):
callback=self.edit) callback=self.edit)
self.add_action('Remove', gtk.STOCK_REMOVE, "_Remove", self.add_action('Remove', gtk.STOCK_REMOVE, "_Remove",
callback=self.remove) callback=self.remove)
self.add_action('HomePerson', gtk.STOCK_HOME, "_Home",
callback=self.home)
self.add_toggle_action('Filter', None, '_Filter', self.add_toggle_action('Filter', None, '_Filter',
callback=self.filter_toggle) callback=self.filter_toggle)