add name-format option, and deferred translation to report's second line

This commit is contained in:
Paul Franklin 2015-03-30 12:31:25 -07:00
parent 0657680432
commit e25a2d23e2
2 changed files with 36 additions and 32 deletions

View File

@ -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)

View File

@ -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):