* src/PedView.py: Use a DrawingArea for nicer person boxes
* src/GrampsDb/_GrampsDbBase.py (_update_reference_map): Sync parameters to other classes * src/GrampsDb/_ReadXML.py (stop_event): Catch invalid event svn: r5643
This commit is contained in:
parent
af21245530
commit
1abaa98a40
@ -1,3 +1,10 @@
|
||||
2005-12-29 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/PedView.py: Use a DrawingArea for nicer person boxes
|
||||
* src/GrampsDb/_GrampsDbBase.py (_update_reference_map): Sync
|
||||
parameters to other classes
|
||||
* src/GrampsDb/_ReadXML.py (stop_event): Catch invalid event
|
||||
code. Still has to be done properly
|
||||
|
||||
2005-12-29 Don Allingham <don@gramps-project.org>
|
||||
* src/gramps_main.py: move gnome program init to gramps.py
|
||||
* src/gramps.py: add gnome program init
|
||||
|
@ -1494,7 +1494,7 @@ class GrampsDbBase(GrampsDBCallback):
|
||||
default = [(1,1),(0,5),(0,6),(1,2),(1,3),(0,4),(0,7),(0,8),(0,9),(0,10)]
|
||||
return self._get_column_order(REPOSITORY_COL_KEY,default)
|
||||
|
||||
def _update_reference_map(self,obj, class_name):
|
||||
def _update_reference_map(self,obj):
|
||||
"""Called each time an object is writen to the database. This can
|
||||
be used by subclasses to update any additional index tables that might
|
||||
need to be changed."""
|
||||
|
@ -1307,8 +1307,12 @@ class GrampsParser:
|
||||
(code,val) = self.event.get_type()
|
||||
if code == RelLib.Event.CUSTOM:
|
||||
event_name = val
|
||||
else:
|
||||
elif code in Utils.family_events:
|
||||
event_name = Utils.family_events[code]
|
||||
else:
|
||||
# FIXME: What do we want to do in that case?
|
||||
print "Importing unknown event code '%d' value '%s'" % (code,val)
|
||||
event_name = _("Unknown event code '%d' value '%s'") % (code,val)
|
||||
text = _("%(event_name)s of %(family)s") % {
|
||||
'event_name' : event_name,
|
||||
'family' : Utils.family_name(self.family,self.db),
|
||||
|
223
src/PedView.py
223
src/PedView.py
@ -63,6 +63,135 @@ _CHRI = _('chr.')
|
||||
_BURI = _('bur.')
|
||||
_CREM = _('crem.')
|
||||
|
||||
class PersonBoxWidget_old( gtk.Button):
|
||||
def __init__(self,fh,person,maxlines):
|
||||
print "PersonBoxWidget"
|
||||
print person
|
||||
gtk.Button.__init__(self, fh.format_person(person, maxlines))
|
||||
self.fh = fh
|
||||
self.set_alignment(0.0,0.0)
|
||||
gender = person.get_gender()
|
||||
if gender == RelLib.Person.MALE:
|
||||
self.modify_bg( gtk.STATE_NORMAL, self.get_colormap().alloc_color("#F5FFFF"))
|
||||
elif gender == RelLib.Person.FEMALE:
|
||||
self.modify_bg( gtk.STATE_NORMAL, self.get_colormap().alloc_color("#FFF5FF"))
|
||||
else:
|
||||
self.modify_bg( gtk.STATE_NORMAL, self.get_colormap().alloc_color("#FFFFF5"))
|
||||
white = self.get_colormap().alloc_color("white")
|
||||
self.modify_bg( gtk.STATE_ACTIVE, white)
|
||||
self.modify_bg( gtk.STATE_PRELIGHT, white)
|
||||
self.modify_bg( gtk.STATE_SELECTED, white)
|
||||
|
||||
class PersonBoxWidget( gtk.DrawingArea):
|
||||
def __init__(self,fh,person,maxlines):
|
||||
gtk.DrawingArea.__init__(self)
|
||||
self.add_events(gtk.gdk.BUTTON_PRESS_MASK)
|
||||
self.fh = fh
|
||||
self.person = person
|
||||
self.maxlines = maxlines
|
||||
self.init_done = False
|
||||
self.connect("expose_event", self.expose)
|
||||
text = ""
|
||||
if self.person:
|
||||
text = self.fh.format_person(self.person,self.maxlines)
|
||||
self.textlayout = self.create_pango_layout(text)
|
||||
s = self.textlayout.get_pixel_size()
|
||||
xmin = s[0] + 11
|
||||
ymin = s[1] + 11
|
||||
self.set_size_request(max(xmin,120),max(ymin,25))
|
||||
|
||||
def expose(self,widget,event):
|
||||
if not self.init_done:
|
||||
self.bg_gc = self.window.new_gc()
|
||||
self.text_gc = self.window.new_gc()
|
||||
self.border_gc = self.window.new_gc()
|
||||
self.border_gc.line_style = gtk.gdk.LINE_SOLID
|
||||
self.border_gc.line_width = 3
|
||||
self.shadow_gc = self.window.new_gc()
|
||||
self.shadow_gc.line_style = gtk.gdk.LINE_SOLID
|
||||
self.shadow_gc.line_width = 3
|
||||
if self.person:
|
||||
self.border_gc.set_foreground( self.get_colormap().alloc_color("#000000"))
|
||||
if self.person.get_gender() == RelLib.Person.MALE:
|
||||
self.bg_gc.set_foreground( self.get_colormap().alloc_color("#F5FFFF"))
|
||||
elif self.person.get_gender() == RelLib.Person.FEMALE:
|
||||
self.bg_gc.set_foreground( self.get_colormap().alloc_color("#FFF5FF"))
|
||||
else:
|
||||
self.bg_gc.set_foreground( self.get_colormap().alloc_color("#FFFFF5"))
|
||||
else:
|
||||
self.bg_gc.set_foreground( self.get_colormap().alloc_color("#eeeeee"))
|
||||
self.border_gc.set_foreground( self.get_colormap().alloc_color("#777777"))
|
||||
self.shadow_gc.set_foreground( self.get_colormap().alloc_color("#999999"))
|
||||
self.init_done = True
|
||||
alloc = self.get_allocation()
|
||||
self.window.draw_rectangle(self.bg_gc, True, 1, 1, alloc.width-5, alloc.height-5)
|
||||
if self.person:
|
||||
self.window.draw_layout( self.text_gc, 5,5, self.textlayout)
|
||||
self.window.draw_rectangle(self.border_gc, False, 1, 1, alloc.width-5, alloc.height-5)
|
||||
self.window.draw_line(self.shadow_gc, 3, alloc.height-1, alloc.width-1, alloc.height-1)
|
||||
self.window.draw_line(self.shadow_gc, alloc.width-1, 3, alloc.width-1, alloc.height-1)
|
||||
|
||||
class FormattingHelper:
|
||||
def __init__(self,db):
|
||||
self.db = db
|
||||
|
||||
def format_relation( self, family, line_count):
|
||||
text = ""
|
||||
for event_ref in family.get_event_ref_list():
|
||||
event = self.db.get_event_from_handle(event_ref.ref)
|
||||
if event:
|
||||
if line_count < 3:
|
||||
return DateHandler.get_date(event)
|
||||
i,s = event.get_type()
|
||||
name = Utils.family_relations[i]
|
||||
text += name
|
||||
text += "\n"
|
||||
text += DateHandler.get_date(event)
|
||||
text += "\n"
|
||||
text += self.get_place_name(event.get_place_handle())
|
||||
if line_count < 5:
|
||||
return text;
|
||||
break
|
||||
return text
|
||||
|
||||
def get_place_name( self, place_handle):
|
||||
text = ""
|
||||
place = self.db.get_place_from_handle(place_handle)
|
||||
if place:
|
||||
place_title = self.db.get_place_from_handle(place_handle).get_title()
|
||||
if place_title != "":
|
||||
if len(place_title) > 25:
|
||||
text = place_title[:24]+"..."
|
||||
else:
|
||||
text = place_title
|
||||
return text
|
||||
|
||||
def format_person( self, person, line_count):
|
||||
if not person:
|
||||
return ""
|
||||
name = NameDisplay.displayer.display(person)
|
||||
if line_count < 3:
|
||||
return name
|
||||
birth_ref = person.get_birth_ref()
|
||||
bd=""
|
||||
bp=""
|
||||
if birth_ref:
|
||||
birth = self.db.get_event_from_handle(birth_ref.ref)
|
||||
if birth:
|
||||
bd = DateHandler.get_date(birth)
|
||||
bp = self.get_place_name(birth.get_place_handle())
|
||||
death_ref = person.get_death_ref()
|
||||
dd=""
|
||||
dp=""
|
||||
if death_ref:
|
||||
death = self.db.get_event_from_handle(death_ref.ref)
|
||||
if death:
|
||||
dd = DateHandler.get_date(death)
|
||||
dp = self.get_place_name(death.get_place_handle())
|
||||
if line_count < 5:
|
||||
return "%s\n* %s\n+ %s" % (name,bd,dd)
|
||||
else:
|
||||
return "%s\n* %s\n %s\n+ %s\n %s" % (name,bd,bp,dd,dp)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -78,6 +207,7 @@ class PedView(PageView.PersonNavView):
|
||||
self.force_size = 0 # Automatic resize
|
||||
self.tree_style = 0 # Nice tree
|
||||
self.db = dbstate.db
|
||||
self.format_helper = FormattingHelper( self.db)
|
||||
|
||||
def init_parent_signals_cb(self, widget, event):
|
||||
# required to properly bootstrap the signal handlers.
|
||||
@ -402,38 +532,26 @@ class PedView(PageView.PersonNavView):
|
||||
h = positions[i][0][3]
|
||||
if not lst[i]:
|
||||
# No person -> show empty box
|
||||
text = gtk.Button(" ")
|
||||
text.set_sensitive(False)
|
||||
pw = PersonBoxWidget( self.format_helper, None, 0);
|
||||
if positions[i][0][2] > 1:
|
||||
table_widget.attach(text,x,x+w,y,y+h,gtk.FILL,gtk.FILL,0,0)
|
||||
table_widget.attach(pw,x,x+w,y,y+h,gtk.FILL,gtk.FILL,0,0)
|
||||
else:
|
||||
table_widget.attach(text,x,x+w,y,y+h,gtk.FILL,gtk.FILL,0,0)
|
||||
table_widget.attach(pw,x,x+w,y,y+h,gtk.FILL,gtk.FILL,0,0)
|
||||
if x+w > xmax:
|
||||
xmax = x+w
|
||||
if y+h > ymax:
|
||||
ymax = y+h
|
||||
else:
|
||||
text = gtk.Button(self.format_person(lst[i][0], positions[i][0][3]))
|
||||
if i > 0 and positions[i][0][2] < 3:
|
||||
tooltip.set_tip(text, self.format_person(lst[i][0], 11))
|
||||
text.set_alignment(0.0,0.0)
|
||||
gender = lst[i][0].get_gender()
|
||||
if gender == RelLib.Person.MALE:
|
||||
text.modify_bg( gtk.STATE_NORMAL, text.get_colormap().alloc_color("#F5FFFF"))
|
||||
elif gender == RelLib.Person.FEMALE:
|
||||
text.modify_bg( gtk.STATE_NORMAL, text.get_colormap().alloc_color("#FFF5FF"))
|
||||
else:
|
||||
text.modify_bg( gtk.STATE_NORMAL, text.get_colormap().alloc_color("#FFFFF5"))
|
||||
white = text.get_colormap().alloc_color("white")
|
||||
text.modify_bg( gtk.STATE_ACTIVE, white)
|
||||
text.modify_bg( gtk.STATE_PRELIGHT, white)
|
||||
text.modify_bg( gtk.STATE_SELECTED, white)
|
||||
text.set_data(_PERSON,lst[i][0].get_handle())
|
||||
text.connect("button-press-event", self.build_full_nav_menu_cb)
|
||||
pw = PersonBoxWidget( self.format_helper, lst[i][0], positions[i][0][3]);
|
||||
if i > 0 and positions[i][2] < 3:
|
||||
tooltip.set_tip(pw, self.format_helper.format_person(lst[i][0], 11))
|
||||
|
||||
pw.set_data(_PERSON,lst[i][0].get_handle())
|
||||
pw.connect("button-press-event", self.build_full_nav_menu_cb)
|
||||
if positions[i][0][2] > 1:
|
||||
table_widget.attach(text,x,x+w,y,y+h,gtk.FILL,gtk.FILL,0,0)
|
||||
table_widget.attach(pw,x,x+w,y,y+h,gtk.EXPAND|gtk.FILL,gtk.EXPAND|gtk.FILL,0,0)
|
||||
else:
|
||||
table_widget.attach(text,x,x+w,y,y+h,gtk.FILL,gtk.FILL,0,0)
|
||||
table_widget.attach(pw,x,x+w,y,y+h,gtk.FILL,gtk.FILL,0,0)
|
||||
if x+w > xmax:
|
||||
xmax = x+w
|
||||
if y+h > ymax:
|
||||
@ -581,7 +699,7 @@ class PedView(PageView.PersonNavView):
|
||||
person_handle = obj.get_data(_PERSON)
|
||||
person = self.db.get_person_from_handle(person_handle)
|
||||
if person:
|
||||
EditPerson.EditPerson(self.dbstate, person, self.person_edited_cb)
|
||||
EditPerson.EditPerson(self.dbstate, self.uistate, [], person, self.person_edited_cb)
|
||||
return True
|
||||
return False
|
||||
|
||||
@ -988,63 +1106,6 @@ class PedView(PageView.PersonNavView):
|
||||
self.add_settings_to_menu(menu)
|
||||
menu.popup(None,None,None,event.button,event.time)
|
||||
return 1
|
||||
|
||||
def format_relation( self, family, line_count):
|
||||
text = ""
|
||||
for event_ref in family.get_event_ref_list():
|
||||
event = self.db.get_event_from_handle(event_ref.ref)
|
||||
if event:
|
||||
if line_count < 3:
|
||||
return DateHandler.get_date(event)
|
||||
i,s = event.get_type()
|
||||
name = Utils.family_relations[i]
|
||||
text += name
|
||||
text += "\n"
|
||||
text += DateHandler.get_date(event)
|
||||
text += "\n"
|
||||
text += self.get_place_name(event.get_place_handle())
|
||||
if line_count < 5:
|
||||
return text;
|
||||
break
|
||||
return text
|
||||
|
||||
def get_place_name( self, place_handle):
|
||||
text = ""
|
||||
place = self.db.get_place_from_handle(place_handle)
|
||||
if place:
|
||||
place_title = self.db.get_place_from_handle(place_handle).get_title()
|
||||
if place_title != "":
|
||||
if len(place_title) > 25:
|
||||
text = place_title[:24]+"..."
|
||||
else:
|
||||
text = place_title
|
||||
return text
|
||||
|
||||
def format_person( self, person, line_count):
|
||||
if not person:
|
||||
return ""
|
||||
name = NameDisplay.displayer.display(person)
|
||||
if line_count < 3:
|
||||
return name
|
||||
birth_ref = person.get_birth_ref()
|
||||
bd=""
|
||||
bp=""
|
||||
if birth_ref:
|
||||
birth = self.db.get_event_from_handle(birth_ref.ref)
|
||||
bd = DateHandler.get_date(birth)
|
||||
bp = self.get_place_name(birth.get_place_handle())
|
||||
death_ref = person.get_death_ref()
|
||||
dd=""
|
||||
dp=""
|
||||
if death_ref:
|
||||
death = self.db.get_event_from_handle(death_ref.ref)
|
||||
dd = DateHandler.get_date(death)
|
||||
dp = self.get_place_name(death.get_place_handle())
|
||||
if line_count < 5:
|
||||
return "%s\n* %s\n+ %s" % (name,bd,dd)
|
||||
else:
|
||||
return "%s\n* %s\n %s\n+ %s\n %s" % (name,bd,bp,dd,dp)
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user