From 8e0fb6fd2c5a8a8f9799bd96c2869da2a64323b7 Mon Sep 17 00:00:00 2001 From: Paul Franklin Date: Wed, 10 Sep 2014 15:40:13 -0700 Subject: [PATCH] 8021: Grafical reports don't use the correct name format --- gramps/plugins/drawreport/ancestortree.py | 30 ++++++----- gramps/plugins/drawreport/descendtree.py | 66 +++++++++++++---------- gramps/plugins/lib/libsubstkeyword.py | 24 ++++++--- gramps/plugins/lib/libtreebase.py | 13 +++-- 4 files changed, 78 insertions(+), 55 deletions(-) diff --git a/gramps/plugins/drawreport/ancestortree.py b/gramps/plugins/drawreport/ancestortree.py index ea5abb9a9..fdbbea369 100644 --- a/gramps/plugins/drawreport/ancestortree.py +++ b/gramps/plugins/drawreport/ancestortree.py @@ -23,12 +23,12 @@ """Reports/Graphical Reports/Ancestor Tree""" +#------------------------------------------------------------------------ +# +# Python modules +# +#------------------------------------------------------------------------ from __future__ import division -#------------------------------------------------------------------------ -# -# python modules -# -#------------------------------------------------------------------------ import math def log2(val): """ @@ -51,7 +51,6 @@ from gramps.gen.plug.menu import (TextOption, NumberOption, BooleanOption, PersonOption) from gramps.gen.plug.report import Report, MenuReportOptions, stdoptions from gramps.gen.plug.report import utils as ReportUtils -from gramps.gen.display.name import NameDisplay from gramps.gen.plug.docgen import (FontStyle, ParagraphStyle, GraphicsStyle, FONT_SANS_SERIF, PARA_ALIGN_CENTER) from gramps.plugins.lib.libtreebase import * @@ -135,8 +134,8 @@ class TitleN(TitleNoDisplay): class TitleA(TitleBox): """Title class for the report """ - def __init__(self, doc, locale): - self._locale = locale + def __init__(self, doc, locale, name_displayer): + self._nd = name_displayer TitleBox.__init__(self, doc, "AC2-Title") self._ = locale.translation.sgettext @@ -144,7 +143,7 @@ class TitleA(TitleBox): """Calculate the title of the report""" name = "" if center is not None: - name = NameDisplay(self._locale).display(center) + name = self._nd.display(center) # feature request 2356: avoid genitive form self.text = self._("Ancestor Graph for %s") % name @@ -166,7 +165,7 @@ class CalcItems(object): #str = "" #if self.get_val('miss_val'): # str = "_____" - self.__calc_l = CalcLines(dbase, [], __gui._locale) + self.__calc_l = CalcLines(dbase, [], __gui._locale, __gui._nd) self.__blank_father = None self.__blank_mother = None @@ -622,10 +621,11 @@ class GUIConnect(): def __init__(self): #We are BORG! self.__dict__ = self.__shared_state - def set__opts(self, options, locale): + def set__opts(self, options, locale, name_displayer): """ Set only once as we are BORG. """ self.__opts = options self._locale = locale + self._nd = name_displayer def get_val(self, val): """ Get a GUI value. """ @@ -640,7 +640,7 @@ class GUIConnect(): GUI options """ title_type = self.get_val('report_title') if title_type: - return TitleA(doc, self._locale) + return TitleA(doc, self._locale, self._nd) else: return TitleN(doc, self._locale) @@ -670,6 +670,7 @@ class AncestorTree(Report): lang = options.menu.get_option_by_name('trans').get_value() self._locale = self.set_locale(lang) + self._nd = self._name_display def begin_report(self): """ @@ -695,7 +696,7 @@ class AncestorTree(Report): database = self.database self.connect = GUIConnect() - self.connect.set__opts(self.options.menu, self._locale) + self.connect.set__opts(self.options.menu, self._locale, self._nd) #Set up the canvas that we will print on. style_sheet = self.doc.get_style_sheet() @@ -746,7 +747,8 @@ class AncestorTree(Report): if self.connect.get_val("inc_note"): note_box = NoteBox(self.doc, "AC2-note-box", self.connect.get_val("note_place")) - subst = SubstKeywords(self.database, self._locale, None, None) + subst = SubstKeywords(self.database, self._locale, self._nd, + None, None) note_box.text = subst.replace_and_clean( self.connect.get_val('note_disp')) self.canvas.add_note(note_box) diff --git a/gramps/plugins/drawreport/descendtree.py b/gramps/plugins/drawreport/descendtree.py index c8479c9ab..d6a622fc8 100644 --- a/gramps/plugins/drawreport/descendtree.py +++ b/gramps/plugins/drawreport/descendtree.py @@ -26,6 +26,12 @@ Reports/Graphical Reports/Familial Tree Reports/Graphical Reports/Personal Tree """ + +#------------------------------------------------------------------------ +# +# Python modules +# +#------------------------------------------------------------------------ from __future__ import division #------------------------------------------------------------------------ @@ -129,8 +135,9 @@ class PlaceHolderBox(BoxBase): # #------------------------------------------------------------------------ class DescendantTitleBase(TitleBox): - def __init__(self, dbase, doc, locale, boxstr = "CG2-Title"): - self._locale = locale + def __init__(self, dbase, doc, locale, name_displayer, + boxstr = "CG2-Title"): + self._nd = name_displayer TitleBox.__init__(self, doc, boxstr) self.database = dbase self._ = locale.translation.sgettext @@ -146,10 +153,10 @@ class DescendantTitleBase(TitleBox): person_list = person_list + person_list2 person_list2 = [] - names = self._get_names(person_list) + names = self._get_names(person_list, self._nd) if person_list2: - names2 = self._get_names(person_list2) + names2 = self._get_names(person_list2, self._nd) if len(names) + len(names2) == 3: if len(names) == 1: title = self._("Descendant Chart for %(person)s and " @@ -214,8 +221,8 @@ class TitleDPY(DescendantTitleBase): """Descendant (Person yes start with parents) Chart Title class for the report """ - def __init__(self, dbase, doc, locale): - DescendantTitleBase.__init__(self, dbase, doc, locale) + def __init__(self, dbase, doc, locale, name_displayer): + DescendantTitleBase.__init__(self, dbase, doc, locale, name_displayer) def calc_title(self, person_id): """Calculate the title of the report""" @@ -241,8 +248,8 @@ class TitleDPN(DescendantTitleBase): """Descendant (Person no start with parents) Chart Title class for the report """ - def __init__(self, dbase, doc, locale): - DescendantTitleBase.__init__(self, dbase, doc, locale) + def __init__(self, dbase, doc, locale, name_displayer): + DescendantTitleBase.__init__(self, dbase, doc, locale, name_displayer) def calc_title(self, person_id): """Calculate the title of the report""" @@ -257,8 +264,8 @@ class TitleDFY(DescendantTitleBase): """Descendant (Family yes start with parents) Chart Title class for the report """ - def __init__(self, dbase, doc, locale): - DescendantTitleBase.__init__(self, dbase, doc, locale) + def __init__(self, dbase, doc, locale, name_displayer): + DescendantTitleBase.__init__(self, dbase, doc, locale, name_displayer) def get_parent_list(self, person): """ return a list of my parents. If none, return me """ @@ -297,8 +304,8 @@ class TitleDFN(DescendantTitleBase): """Descendant (Family no start with parents) Chart Title class for the report """ - def __init__(self, dbase, doc, locale): - DescendantTitleBase.__init__(self, dbase, doc, locale) + def __init__(self, dbase, doc, locale, name_displayer): + DescendantTitleBase.__init__(self, dbase, doc, locale, name_displayer) def calc_title(self, family_id): """Calculate the title of the report""" @@ -310,14 +317,14 @@ class TitleDFN(DescendantTitleBase): class TitleF(DescendantTitleBase): """Family Chart Title class for the report """ - def __init__(self, dbase, doc, locale): - DescendantTitleBase.__init__(self, dbase, doc, locale) + def __init__(self, dbase, doc, locale, name_displayer): + DescendantTitleBase.__init__(self, dbase, doc, locale, name_displayer) def calc_title(self, family_id): """Calculate the title of the report""" parents = self.get_parents(family_id) - names = self._get_names(parents) + names = self._get_names(parents, self._nd) if len(parents) == 1: title = self._("Family Chart for %(person)s") % { @@ -333,8 +340,8 @@ class TitleF(DescendantTitleBase): class TitleC(DescendantTitleBase): """Cousin Chart Title class for the report """ - def __init__(self, dbase, doc, locale): - DescendantTitleBase.__init__(self, dbase, doc, locale) + def __init__(self, dbase, doc, locale, name_displayer): + DescendantTitleBase.__init__(self, dbase, doc, locale, name_displayer) def calc_title(self, family_id): """Calculate the title of the report""" @@ -346,7 +353,7 @@ class TitleC(DescendantTitleBase): #ok we have the children. Make a title off of them # translators: needed for Arabic, ignore otherwise - cousin_names = self._(', ').join(self._get_names(kids)) + cousin_names = self._(', ').join(self._get_names(kids, self._nd)) self.text = self._("Cousin Chart for %(names)s") % { 'names' : cousin_names} @@ -1190,10 +1197,11 @@ class GuiConnect(): def __init__(self): #We are BORG! self.__dict__ = self.__shared_state - def set__opts(self, options, which, locale): + def set__opts(self, options, which, locale, name_displayer): self._opts = options self._which_report = which.split(",")[0] self._locale = locale + self._nd = name_displayer def get_val(self, val): """ Get a GUI value. """ @@ -1211,19 +1219,19 @@ class GuiConnect(): if Title_type == 1: #Descendant Chart if self._which_report == _RPT_NAME: if self.get_val('show_parents'): - return TitleDPY(database, doc, self._locale) + return TitleDPY(database, doc, self._locale, self._nd) else: - return TitleDPN(database, doc, self._locale) + return TitleDPN(database, doc, self._locale, self._nd) else: if self.get_val('show_parents'): - return TitleDFY(database, doc, self._locale) + return TitleDFY(database, doc, self._locale, self._nd) else: - return TitleDFN(database, doc, self._locale) + return TitleDFN(database, doc, self._locale, self._nd) if Title_type == 2: - return TitleF(database, doc, self._locale) + return TitleF(database, doc, self._locale, self._nd) else: #Title_type == 3 - return TitleC(database, doc, self._locale) + return TitleC(database, doc, self._locale, self._nd) def Make_Tree(self, database, canvas): if self._which_report == _RPT_NAME: @@ -1237,7 +1245,7 @@ class GuiConnect(): #str = "" #if self.get_val('miss_val'): # str = "_____" - return CalcLines(database, display_repl, self._locale) + return CalcLines(database, display_repl, self._locale, self._nd) def working_lines(self, box): display = self.get_val("descend_disp") @@ -1282,6 +1290,7 @@ class DescendTree(Report): lang = options.menu.get_option_by_name('trans').get_value() self._locale = self.set_locale(lang) + self._nd = self._name_display def begin_report(self): """ make the report in its full size and pages to print on @@ -1292,7 +1301,7 @@ class DescendTree(Report): self.Connect = GuiConnect() self.Connect.set__opts(self.options.menu, self.options.name, - self._locale) + self._locale, self._nd) style_sheet = self.doc.get_style_sheet() font_normal = style_sheet.get_paragraph_style("CG2-Normal").get_font() @@ -1329,7 +1338,8 @@ class DescendTree(Report): if self.Connect.get_val("inc_note"): note_box = NoteBox(self.doc, "CG2-note-box", self.Connect.get_val("note_place")) - subst = SubstKeywords(self.database, self._locale, None, None) + subst = SubstKeywords(self.database, self._locale, self._nd, + None, None) note_box.text = subst.replace_and_clean( self.Connect.get_val('note_disp')) self.canvas.add_note(note_box) diff --git a/gramps/plugins/lib/libsubstkeyword.py b/gramps/plugins/lib/libsubstkeyword.py index 35d2b5af8..c172f1ade 100644 --- a/gramps/plugins/lib/libsubstkeyword.py +++ b/gramps/plugins/lib/libsubstkeyword.py @@ -33,6 +33,11 @@ Will return a value such as: Mary Smith was born on 3/28/1923. """ +#------------------------------------------------------------------------ +# +# Python modules +# +#------------------------------------------------------------------------ from __future__ import print_function #------------------------------------------------------------------------ @@ -40,7 +45,6 @@ from __future__ import print_function # Gramps modules # #------------------------------------------------------------------------ -from gramps.gen.display.name import NameDisplay from gramps.gen.lib import EventType, PlaceType, Location from gramps.gen.utils.db import get_birth_or_fallback, get_death_or_fallback from gramps.gen.constfunc import STRTYPE, cuni @@ -149,6 +153,10 @@ class NameFormat(GenericFormat): otherwise, parse through a format string and put the name parts in """ + def __init__(self, _in, locale, name_displayer): + GenericFormat.__init__(self, _in, locale) + self._nd = name_displayer + def get_name(self, person, aka): """ A helper method for retrieving the person's name """ name = None @@ -164,7 +172,7 @@ class NameFormat(GenericFormat): def _default_format(self, name): """ display the name as set in preferences """ - return NameDisplay(self._locale).sorted_name(name) + return self._nd.sorted_name(name) def parse_format(self, name): """ Parse the name """ @@ -788,11 +796,12 @@ class AttributeParse(object): class VariableParse(object): """ Parse the individual variables """ - def __init__(self, friend, database, consumer_in, locale): + def __init__(self, friend, database, consumer_in, locale, name_displayer): self.friend = friend self.database = database self._in = consumer_in self._locale = locale + self._nd = name_displayer def is_a(self): """ check """ @@ -868,7 +877,7 @@ class VariableParse(object): return place_f.parse_format(self.database, place) def __parse_name(self, person, attrib_parse): - name_format = NameFormat(self._in, self._locale) + name_format = NameFormat(self._in, self._locale, self._nd) name = name_format.get_name(person, attrib_parse.get_name()) return name_format.parse_format(name) @@ -1044,7 +1053,8 @@ class SubstKeywords(object): this will specify the specific family/spouse to work with. If none given, then the first/preferred family/spouse is used """ - def __init__(self, database, locale, person_handle, family_handle=None): + def __init__(self, database, locale, name_displayer, + person_handle, family_handle=None): """get the person and find the family/spouse to use for this display""" self.database = database @@ -1053,6 +1063,7 @@ class SubstKeywords(object): self.spouse = None self.line = None # Consumable_string - set below self._locale = locale + self._nd = name_displayer if self.person is None: return @@ -1096,7 +1107,8 @@ class SubstKeywords(object): #First we are going take care of all variables/groups #break down all {} (groups) and $ (vars) into either #(TXT.text, resulting_string) or (TXT.remove, '') - variable = VariableParse(self, self.database, self.line, self._locale) # $ + variable = VariableParse(self, self.database, self.line, + self._locale, self._nd) while self.line.this: if self.line.this == "{": diff --git a/gramps/plugins/lib/libtreebase.py b/gramps/plugins/lib/libtreebase.py index e2f6d2325..ab5003a8d 100644 --- a/gramps/plugins/lib/libtreebase.py +++ b/gramps/plugins/lib/libtreebase.py @@ -30,13 +30,12 @@ from __future__ import division #------------------------------------------------------------------------ # -# gramps modules +# Gramps modules # #------------------------------------------------------------------------ from gramps.gen.const import GRAMPS_LOCALE as glocale _ = glocale.translation.sgettext from gramps.gen.plug.report import utils as ReportUtils -from gramps.gen.display.name import NameDisplay from gramps.plugins.lib.libsubstkeyword import SubstKeywords from gramps.gen.plug.docgen import (IndexMark, INDEX_TYPE_TOC) @@ -54,11 +53,12 @@ class CalcLines(object): Receive: Individual and family handle, and display format [string] return: [Text] ready for a box. """ - def __init__(self, dbase, repl, locale): + def __init__(self, dbase, repl, locale, name_displayer): self.database = dbase self.display_repl = repl #self.default_string = default_str self._locale = locale + self._nd = name_displayer def calc_lines(self, _indi_handle, _fams_handle, workinglines): """ @@ -69,7 +69,7 @@ class CalcLines(object): #################### #1.1 Get our line information here - subst = SubstKeywords(self.database, self._locale, + subst = SubstKeywords(self.database, self._locale, self._nd, _indi_handle, _fams_handle) lines = subst.replace_and_clean(workinglines) @@ -678,11 +678,10 @@ class TitleBox(BoxBase): self.width = PT2CM(self.doc.string_width(self.font, self.text)) self.height = PT2CM(self.font.get_size() * 1.2) - def _get_names(self, persons): + def _get_names(self, persons, name_displayer): """ A helper function that receives a list of persons and returns their names in a list """ - return [NameDisplay(self._locale).display(person) - for person in persons] + return [name_displayer.display(person) for person in persons] def display(self): """ display the title box. """