Backported fixes for Pedigree Gramplet, bug #2081 and others. Added 2 new strings that need translation which were part of a bugfix from PeterL
svn: r11587
This commit is contained in:
parent
1b25cd8b47
commit
e014eecf5b
@ -20,6 +20,7 @@ import sys
|
||||
import re
|
||||
import urllib
|
||||
import posixpath
|
||||
import cgi
|
||||
|
||||
from BasicUtils import name_displayer
|
||||
from DataViews import register, Gramplet
|
||||
@ -467,9 +468,22 @@ class PedigreeGramplet(Gramplet):
|
||||
_("Right-click name to edit person")
|
||||
self.set_use_markup(True)
|
||||
self.max_generations = 100
|
||||
#self.set_option("max_generations",
|
||||
# NumberOption(_("Maximum generations"),
|
||||
# 100, -1, 500))
|
||||
self.show_dates = 1
|
||||
self.box_mode = "ASCII"
|
||||
|
||||
def on_load(self):
|
||||
if len(self.gui.data) > 0:
|
||||
self.max_generations = int(self.gui.data[0])
|
||||
if len(self.gui.data) > 1:
|
||||
self.show_dates = int(self.gui.data[1])
|
||||
if len(self.gui.data) > 2:
|
||||
self.box_mode = self.gui.data[2] # ASCII or UTF
|
||||
# in case we need it:
|
||||
tag = self.gui.buffer.create_tag("fixed")
|
||||
tag.set_property("font", "Courier 9")
|
||||
|
||||
def on_save(self):
|
||||
self.gui.data = [self.max_generations, self.show_dates, self.box_mode]
|
||||
|
||||
def db_changed(self):
|
||||
"""
|
||||
@ -487,20 +501,33 @@ class PedigreeGramplet(Gramplet):
|
||||
self.update()
|
||||
|
||||
def get_boxes(self, generation, what):
|
||||
retval = ""
|
||||
retval = u""
|
||||
if self.box_mode == "UTF":
|
||||
space = u" "
|
||||
elif self.box_mode == "ASCII":
|
||||
space = u" "
|
||||
space_len = len(space) + 2
|
||||
for i in range(generation+1):
|
||||
if self._boxes[i]:
|
||||
retval += " |"
|
||||
retval += space + u"|"
|
||||
else:
|
||||
retval += " "
|
||||
if retval[-1] == ' ':
|
||||
retval += space + u" "
|
||||
if retval[-1] == u' ':
|
||||
if what == 'sf':
|
||||
retval = retval[:-6] + " /"
|
||||
retval = retval[:-space_len] + u"/"
|
||||
elif what == 'sm':
|
||||
retval = retval[:-6] + " \\"
|
||||
elif retval.endswith("| |"):
|
||||
retval = retval[:-6] + "+"
|
||||
return retval + "---"
|
||||
retval = retval[:-space_len] + u"\\"
|
||||
elif retval.endswith(u"|" + space + u"|"):
|
||||
retval = retval[:-space_len] + u"+"
|
||||
if self.box_mode == "UTF":
|
||||
retval += u"-"
|
||||
retval = retval.replace(u"\\", u"\u2514")
|
||||
retval = retval.replace(u"-", u"\u2500")
|
||||
retval = retval.replace(u"|", u"\u2502")
|
||||
retval = retval.replace(u"/", u"\u250c")
|
||||
elif self.box_mode == "ASCII":
|
||||
retval += u"--"
|
||||
return retval
|
||||
|
||||
def set_box(self, pos, value):
|
||||
self._boxes[pos] = value
|
||||
@ -525,19 +552,35 @@ class PedigreeGramplet(Gramplet):
|
||||
elif what[0] == "s":
|
||||
boxes = self.get_boxes(generation, what)
|
||||
if what[-1] == 'f':
|
||||
boxes = boxes.replace("+", "/")
|
||||
if self.box_mode == "UTF":
|
||||
boxes = boxes.replace("+", u"\u250c")
|
||||
else:
|
||||
boxes = boxes.replace("+", u"/")
|
||||
else:
|
||||
boxes = boxes.replace("+", "\\")
|
||||
if self.box_mode == "UTF":
|
||||
boxes = boxes.replace("+", u"\u2514")
|
||||
else:
|
||||
boxes = boxes.replace("+", u"\\")
|
||||
self.append_text(boxes)
|
||||
self.link(name_displayer.display_name(person.get_primary_name()),
|
||||
'Person', person.handle)
|
||||
'Person', person.handle,
|
||||
tooltip=_("Click to make active\n") + \
|
||||
_("Right-click to edit"))
|
||||
if self.show_dates:
|
||||
self.append_text(" ")
|
||||
self.render_text(self.info_string(person))
|
||||
self.append_text("\n")
|
||||
if generation not in self._generations:
|
||||
self._generations[generation] = []
|
||||
self._generations[generation].append(handle)
|
||||
elif what == "a":
|
||||
self.append_text("o------")
|
||||
self.render_text("<b>%s</b>" % name_displayer.display_name(person.get_primary_name()))
|
||||
if self.box_mode == "UTF":
|
||||
self.append_text(u"o" + (u"\u2500" * 3))
|
||||
elif self.box_mode == "ASCII":
|
||||
self.append_text(u"o---")
|
||||
self.append_text("%s " % name_displayer.display_name(person.get_primary_name()))
|
||||
if self.show_dates:
|
||||
self.render_text(self.info_string(person))
|
||||
self.append_text("\n")
|
||||
if generation not in self._generations:
|
||||
self._generations[generation] = []
|
||||
@ -553,11 +596,49 @@ class PedigreeGramplet(Gramplet):
|
||||
self.process_person(mother, generation + 1, "m")
|
||||
self.set_box(generation, 0) # regardless, turn off line if on
|
||||
|
||||
def info_string(self, person):
|
||||
birth = ReportUtils.get_birth_or_fallback(self.dbstate.db, person)
|
||||
if birth and birth.get_type != gen.lib.EventType.BIRTH:
|
||||
sdate = DateHandler.get_date(birth)
|
||||
if sdate:
|
||||
bdate = "<i>%s</i>" % cgi.escape(sdate)
|
||||
else:
|
||||
bdate = ""
|
||||
elif birth:
|
||||
bdate = cgi.escape(DateHandler.get_date(birth))
|
||||
else:
|
||||
bdate = ""
|
||||
|
||||
death = ReportUtils.get_death_or_fallback(self.dbstate.db, person)
|
||||
if death and death.get_type != gen.lib.EventType.DEATH:
|
||||
sdate = DateHandler.get_date(death)
|
||||
if sdate:
|
||||
ddate = "<i>%s</i>" % cgi.escape(sdate)
|
||||
else:
|
||||
ddate = ""
|
||||
elif death:
|
||||
ddate = cgi.escape(DateHandler.get_date(death))
|
||||
else:
|
||||
ddate = ""
|
||||
|
||||
if bdate and ddate:
|
||||
value = _("(b. %(birthdate)s, d. %(deathdate)s)") % {
|
||||
'birthdate' : bdate,
|
||||
'deathdate' : ddate
|
||||
}
|
||||
elif bdate:
|
||||
value = _("(b. %s)") % (bdate)
|
||||
elif ddate:
|
||||
value = _("(d. %s)") % (ddate)
|
||||
else:
|
||||
value = ""
|
||||
return value
|
||||
|
||||
def main(self): # return false finishes
|
||||
"""
|
||||
Generator which will be run in the background.
|
||||
"""
|
||||
self._boxes = [0] * self.max_generations
|
||||
self._boxes = [0] * (self.max_generations + 1)
|
||||
self._generations = {}
|
||||
self.gui.buffer.set_text("")
|
||||
active_person = self.dbstate.get_active_person()
|
||||
@ -577,15 +658,22 @@ class PedigreeGramplet(Gramplet):
|
||||
handles = self._generations[g]
|
||||
self.append_text(" ")
|
||||
if g == 0:
|
||||
self.link(_("Generation 1"), 'PersonList', handles)
|
||||
self.link(_("Generation 1"), 'PersonList', handles,
|
||||
tooltip=_("Double-click to see people in generation"))
|
||||
self.append_text(_(" has 1 of 1 individual (100.00% complete)\n"))
|
||||
else:
|
||||
all.extend(handles)
|
||||
self.link(_("Generation %d") % g, 'PersonList', handles)
|
||||
self.link(_("Generation %d") % g, 'PersonList', handles,
|
||||
tooltip=_("Double-click to see people in generation"))
|
||||
self.append_text(_(" has %d of %d individuals (%.2f%% complete)\n") %
|
||||
(count, 2**(g-1), float(count)/2**(g-1) * 100))
|
||||
self.link(_("All generations"), 'PersonList', all)
|
||||
self.link(_("All generations"), 'PersonList', all,
|
||||
tooltip=_("Double-click to see all generations"))
|
||||
self.append_text(_(" have %d individuals\n") % len(all))
|
||||
# Set to a fixed font
|
||||
if self.box_mode == "UTF":
|
||||
start, end = self.gui.buffer.get_bounds()
|
||||
self.gui.buffer.apply_tag_by_name("fixed", start, end)
|
||||
self.append_text("", scroll_to="begin")
|
||||
|
||||
class StatsGramplet(Gramplet):
|
||||
|
Loading…
x
Reference in New Issue
Block a user