From e014eecf5b04b6f4cbcf8139cb289c48342cbe55 Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Thu, 8 Jan 2009 12:12:01 +0000 Subject: [PATCH] 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 --- src/plugins/DefaultGramplets.py | 130 ++++++++++++++++++++++++++------ 1 file changed, 109 insertions(+), 21 deletions(-) diff --git a/src/plugins/DefaultGramplets.py b/src/plugins/DefaultGramplets.py index 41c5f0cda..f558014e2 100644 --- a/src/plugins/DefaultGramplets.py +++ b/src/plugins/DefaultGramplets.py @@ -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("%s" % 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 = "%s" % 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 = "%s" % 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):