From 303d830a36f08d7a149916a4633ef0a43b9cc61f Mon Sep 17 00:00:00 2001 From: Paul Franklin Date: Mon, 30 Mar 2015 12:31:25 -0700 Subject: [PATCH] add name-format option, and deferred translation to report's second line --- gramps/plugins/lib/librecords.py | 27 +++++++++----- gramps/plugins/textreport/recordsreport.py | 41 +++++++++------------- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/gramps/plugins/lib/librecords.py b/gramps/plugins/lib/librecords.py index 6449691e6..0b22675bb 100644 --- a/gramps/plugins/lib/librecords.py +++ b/gramps/plugins/lib/librecords.py @@ -4,7 +4,7 @@ # # Copyright (C) 2008-2011 Reinhard Müller # Copyright (C) 2010 Jakim Friant -# Copyright (C) 2013 Paul Franklin +# Copyright (C) 2013-2015 Paul Franklin # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -91,11 +91,13 @@ def _find_death_date(db, person): return None def find_records(db, filter, top_size, callname, - trans_text=glocale.translation.sgettext): + trans_text=glocale.translation.sgettext, name_format=None): """ @param trans_text: allow deferred translation of strings @type trans_text: a GrampsLocale sgettext instance trans_text is a defined keyword (see po/update_po.py, po/genpot.sh) + :param name_format: optional format to control display of person's name + :type name_format: None or int """ today = datetime.date.today() @@ -139,7 +141,8 @@ def find_records(db, filter, top_size, callname, # Birth date unknown or incomplete, so we can't calculate any age. continue - name = _get_styled_primary_name(person, callname) + name = _get_styled_primary_name(person, callname, + name_format=name_format) if death_date is None: if probably_alive(person, db): @@ -238,8 +241,10 @@ def find_records(db, filter, top_size, callname, mother = db.get_person_from_handle(mother_handle) name = StyledText(trans_text("%(father)s and %(mother)s")) % { - 'father': _get_styled_primary_name(father, callname), - 'mother': _get_styled_primary_name(mother, callname)} + 'father': _get_styled_primary_name(father, callname, + name_format=name_format), + 'mother': _get_styled_primary_name(mother, callname, + name_format=name_format)} _record(None, family_mostchildren, len(family.get_child_ref_list()), @@ -349,7 +354,7 @@ CALLNAME_DONTUSE = 0 CALLNAME_REPLACE = 1 CALLNAME_UNDERLINE_ADD = 2 -def _get_styled(name, callname, placeholder=False): +def _get_styled(name, callname, placeholder=False, name_format=None): """ Return a StyledText object with the name formatted according to the parameters: @@ -383,7 +388,11 @@ def _get_styled(name, callname, placeholder=False): 'call': n.call, 'first': n.first_name} + real_format = name_displayer.get_default_format() + if name_format is not None: + name_displayer.set_default_format(name_format) text = name_displayer.display_name(n) + name_displayer.set_default_format(real_format) tags = [] if n.call: @@ -398,7 +407,8 @@ def _get_styled(name, callname, placeholder=False): return StyledText(text, tags) -def _get_styled_primary_name(person, callname, placeholder=False): +def _get_styled_primary_name(person, callname, + placeholder=False, name_format=None): """ Return a StyledText object with the person's name formatted according to the parameters: @@ -410,4 +420,5 @@ def _get_styled_primary_name(person, callname, placeholder=False): placeholder if first name or surname are missing. """ - return _get_styled(person.get_primary_name(), callname, placeholder) + return _get_styled(person.get_primary_name(), callname, + placeholder, name_format) diff --git a/gramps/plugins/textreport/recordsreport.py b/gramps/plugins/textreport/recordsreport.py index f4617a496..54d270756 100644 --- a/gramps/plugins/textreport/recordsreport.py +++ b/gramps/plugins/textreport/recordsreport.py @@ -4,7 +4,7 @@ # # Copyright (C) 2008-2011 Reinhard Müller # Copyright (C) 2010 Jakim Friant -# Copyright (C) 2013-2014 Paul Franklin +# Copyright (C) 2013-2015 Paul Franklin # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -84,13 +84,16 @@ class RecordsReport(Report): self._lang = options.menu.get_option_by_name('trans').get_value() self._locale = self.set_locale(self._lang) + self._nf = stdoptions.run_name_format_option(self, menu) + def write_report(self): """ Build the actual report. """ - records = find_records(self.database, self.filter, self.top_size, - self.callname, trans_text=self._) + records = find_records(self.database, self.filter, + self.top_size, self.callname, + trans_text=self._, name_format=self._nf) self.doc.start_paragraph('REC-Title') title = self._("Records") @@ -98,25 +101,9 @@ class RecordsReport(Report): self.doc.write_text(title, mark) self.doc.end_paragraph() - if self._lang == 'default': - self.doc.start_paragraph('REC-Subtitle') - self.doc.write_text(self.filter.get_name()) - self.doc.end_paragraph() - else: - # The only way which I thought of to get a desired non-English - # filter name if the starting UI is a non-English one, was to - # change ReportUtils.get_person_filters so that it creates the - # filters with English (untranslated) names, but that would mean - # changing every filter.get_name() in every place that the - # get_person_filters filters are used, to always translate the - # get_name, and I wasn't in the mood to do that to all of them, - # so until that happen -- assuming it works, since I didn't try - # it to see, since the person's name will be in get_person_filters - # but the deferred translation will be where the filter.get_name() - # is, so it might not work at all -- but until it does, or another - # way is found, there will be no translated subtitle, only a - # subtitle if the report's output is in the main/UI language - pass # FIXME + self.doc.start_paragraph('REC-Subtitle') + self.doc.write_text(self.filter.get_name(self._locale)) + self.doc.end_paragraph() for (text, varname, top) in records: if not self.include[varname]: @@ -184,7 +171,10 @@ class RecordsReportOptions(MenuReportOptions): self.__pid.set_help(_("The center person for the filter")) menu.add_option(category_name, "pid", self.__pid) self.__pid.connect('value-changed', self.__update_filters) - + + self._nf = stdoptions.add_name_format_option(menu, category_name) + self._nf.connect('value-changed', self.__update_filters) + self.__update_filters() top_size = NumberOption(_("Number of ranks to display"), 3, 1, 100) @@ -218,7 +208,10 @@ class RecordsReportOptions(MenuReportOptions): """ gid = self.__pid.get_value() person = self.__db.get_person_from_gramps_id(gid) - filter_list = ReportUtils.get_person_filters(person, False) + nfv = self._nf.get_value() + filter_list = ReportUtils.get_person_filters(person, + include_single=False, + name_format=nfv) self.__filter.set_filters(filter_list) def __filter_changed(self):