Patch from Matt Keenan <matt.keenan@gmail.com> - 0005149: Provide Name Format option for some text reports

svn: r18118
This commit is contained in:
Brian Matherly 2011-09-07 02:49:08 +00:00
parent 147f74c3b1
commit c4d4762c30
11 changed files with 286 additions and 83 deletions

View File

@ -2070,7 +2070,7 @@ class Narrator(object):
return text return text
def get_married_string(self, family, is_first=True): def get_married_string(self, family, is_first=True, name_display=None):
""" """
Get a string narrating the marriage of the subject. Get a string narrating the marriage of the subject.
Example sentences: Example sentences:
@ -2085,7 +2085,9 @@ class Narrator(object):
:param is_first: Indicates whether this sentence represents the first :param is_first: Indicates whether this sentence represents the first
marriage. If it is not the first marriage, the sentence will marriage. If it is not the first marriage, the sentence will
include "also". include "also".
:type is_first: :class:`~gen.lib.family,Family` :type is_first: bool
:param name_display: An object to be used for displaying names
:type is_first: :class:`~gen.display.name,NameDisplay`
:returns: A sentence about the subject's marriage. :returns: A sentence about the subject's marriage.
:rtype: unicode :rtype: unicode
""" """
@ -2100,8 +2102,11 @@ class Narrator(object):
date = self.__empty_date date = self.__empty_date
place = self.__empty_place place = self.__empty_place
spouse_name = _nd.display(spouse) if not name_display:
spouse_name = _nd.display(spouse)
else:
spouse_name = name_display.display(spouse)
if event: if event:
if self.__use_fulldate : if self.__use_fulldate :
mdate = self.__get_date(event.get_date_object()) mdate = self.__get_date(event.get_date_object())

View File

@ -30,6 +30,7 @@
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import math import math
import copy
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@ -37,7 +38,7 @@ from gen.ggettext import gettext as _
# gramps modules # gramps modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gen.display.name import displayer as name_displayer from gen.display.name import displayer as global_name_display
from Errors import ReportError from Errors import ReportError
from gen.lib import ChildRefType from gen.lib import ChildRefType
from gen.plug.menu import (BooleanOption, NumberOption, PersonOption, from gen.plug.menu import (BooleanOption, NumberOption, PersonOption,
@ -87,9 +88,9 @@ class AncestorReport(Report):
gen - Maximum number of generations to include. gen - Maximum number of generations to include.
pagebbg - Whether to include page breaks between generations. pagebbg - Whether to include page breaks between generations.
name_format - Preferred format to display names
""" """
Report.__init__(self, database, options_class) Report.__init__(self, database, options_class)
self.map = {} self.map = {}
@ -104,6 +105,14 @@ class AncestorReport(Report):
raise ReportError(_("Person %s is not in the Database") % pid ) raise ReportError(_("Person %s is not in the Database") % pid )
language = menu.get_option_by_name('trans').get_value() language = menu.get_option_by_name('trans').get_value()
translator = Translator(language) translator = Translator(language)
# Copy the global NameDisplay so that we don't change application
# defaults.
self._name_display = copy.deepcopy(global_name_display)
name_format = menu.get_option_by_name("name_format").get_value()
if name_format != 0:
self._name_display.set_default_format(name_format)
self._ = translator.gettext self._ = translator.gettext
self.__narrator = Narrator(self.database, use_fulldate=True, self.__narrator = Narrator(self.database, use_fulldate=True,
translator=translator) translator=translator)
@ -177,7 +186,7 @@ class AncestorReport(Report):
# Write the title line. Set in INDEX marker so that this section will be # Write the title line. Set in INDEX marker so that this section will be
# identified as a major category if this is included in a Book report. # identified as a major category if this is included in a Book report.
name = name_displayer.display_formal(self.center_person) name = self._name_display.display_formal(self.center_person)
title = self._("Ahnentafel Report for %s") % name title = self._("Ahnentafel Report for %s") % name
mark = IndexMark(title, INDEX_TYPE_TOC, 1) mark = IndexMark(title, INDEX_TYPE_TOC, 1)
self.doc.start_paragraph("AHN-Title") self.doc.start_paragraph("AHN-Title")
@ -208,7 +217,7 @@ class AncestorReport(Report):
self.doc.start_paragraph("AHN-Entry","%d." % key) self.doc.start_paragraph("AHN-Entry","%d." % key)
person = self.database.get_person_from_handle(self.map[key]) person = self.database.get_person_from_handle(self.map[key])
name = name_displayer.display(person) name = self._name_display.display(person)
mark = ReportUtils.get_person_mark(self.database, person) mark = ReportUtils.get_person_mark(self.database, person)
# write the name in bold # write the name in bold
@ -234,7 +243,7 @@ class AncestorReport(Report):
self.doc.write_text(self.__narrator.get_buried_string()) self.doc.write_text(self.__narrator.get_buried_string())
self.doc.end_paragraph() self.doc.end_paragraph()
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# AncestorOptions # AncestorOptions
@ -258,6 +267,16 @@ class AncestorOptions(MenuReportOptions):
pid = PersonOption(_("Center Person")) pid = PersonOption(_("Center Person"))
pid.set_help(_("The center person for the report")) pid.set_help(_("The center person for the report"))
menu.add_option(category_name, "pid", pid) menu.add_option(category_name, "pid", pid)
# We must figure out the value of the first option before we can
# create the EnumeratedListOption
fmt_list = global_name_display.get_name_format()
name_format = EnumeratedListOption(_("Name format"), 0)
name_format.add_item(0, _("Default"))
for num, name, fmt_str, act in fmt_list:
name_format.add_item(num, name)
name_format.set_help(_("Select the format to display names"))
menu.add_option(category_name, "name_format", name_format)
maxgen = NumberOption(_("Generations"), 10, 1, 100) maxgen = NumberOption(_("Generations"), 10, 1, 100)
maxgen.set_help(_("The number of generations to include in the report")) maxgen.set_help(_("The number of generations to include in the report"))

View File

@ -27,6 +27,7 @@
# python modules # python modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import copy
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
from gen.ggettext import ngettext from gen.ggettext import ngettext
import datetime, time import datetime, time
@ -36,7 +37,7 @@ import datetime, time
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gen.display.name import displayer as _nd from gen.display.name import displayer as global_name_display
from Errors import ReportError from Errors import ReportError
from gen.lib import NameType, EventType, Name, Date, Person from gen.lib import NameType, EventType, Name, Date, Person
import Relationship import Relationship
@ -72,7 +73,6 @@ class CalendarReport(Report):
self.titletext = mgobn('titletext') self.titletext = mgobn('titletext')
self.relationships = mgobn('relationships') self.relationships = mgobn('relationships')
self.year = mgobn('year') self.year = mgobn('year')
self.name_format = mgobn('name_format')
self.country = mgobn('country') self.country = mgobn('country')
self.anniversaries = mgobn('anniversaries') self.anniversaries = mgobn('anniversaries')
self.start_dow = mgobn('start_dow') self.start_dow = mgobn('start_dow')
@ -85,6 +85,14 @@ class CalendarReport(Report):
self.filter_option = menu.get_option_by_name('filter') self.filter_option = menu.get_option_by_name('filter')
self.filter = self.filter_option.get_filter() self.filter = self.filter_option.get_filter()
pid = mgobn('pid') pid = mgobn('pid')
# Copy the global NameDisplay so that we don't change application
# defaults.
self._name_display = copy.deepcopy(global_name_display)
name_format = menu.get_option_by_name("name_format").get_value()
if name_format != 0:
self._name_display.set_default_format(name_format)
self.center_person = database.get_person_from_gramps_id(pid) self.center_person = database.get_person_from_gramps_id(pid)
if (self.center_person == None) : if (self.center_person == None) :
raise ReportError(_("Person %s is not in the Database") % pid ) raise ReportError(_("Person %s is not in the Database") % pid )
@ -112,8 +120,7 @@ class CalendarReport(Report):
surname_obj.set_surname(maiden_name) surname_obj.set_surname(maiden_name)
else: else:
name = Name(primary_name) name = Name(primary_name)
name.set_display_as(self.name_format) return self._name_display.display_name(name)
return _nd.display_name(name)
def add_day_item(self, text, month, day): def add_day_item(self, text, month, day):
""" Add an item to a day. """ """ Add an item to a day. """
@ -359,10 +366,9 @@ class CalendarOptions(MenuReportOptions):
self.__update_filters() self.__update_filters()
# We must figure out the value of the first option before we can fmt_list = global_name_display.get_name_format()
# create the EnumeratedListOption name_format = EnumeratedListOption(_("Name format"), 0)
fmt_list = _nd.get_name_format() name_format.add_item(0, _("Default"))
name_format = EnumeratedListOption(_("Name format"), fmt_list[0][0])
for num, name, fmt_str, act in fmt_list: for num, name, fmt_str, act in fmt_list:
name_format.add_item(num, name) name_format.add_item(num, name)
name_format.set_help(_("Select the format to display names")) name_format.set_help(_("Select the format to display names"))

View File

@ -33,6 +33,7 @@ Reports/Text Reports/Descendant Report.
# standard python modules # standard python modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import copy
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@ -42,8 +43,9 @@ from gen.ggettext import gettext as _
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF, INDEX_TYPE_TOC, PARA_ALIGN_CENTER) FONT_SANS_SERIF, INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.menu import NumberOption, PersonOption, BooleanOption, EnumeratedListOption from gen.plug.menu import (NumberOption, PersonOption, BooleanOption,
from gen.display.name import displayer as _nd EnumeratedListOption)
from gen.display.name import displayer as global_name_display
from Errors import ReportError from Errors import ReportError
from gen.plug.report import Report from gen.plug.report import Report
from gen.plug.report import utils as ReportUtils from gen.plug.report import utils as ReportUtils
@ -125,8 +127,10 @@ class Printinfo():
A base class used to help make the individual numbering system classes. A base class used to help make the individual numbering system classes.
This class must first be initialized with set_class_vars This class must first be initialized with set_class_vars
""" """
def __init__(self, doc, database, numbering, showmarriage, showdivorce): def __init__(self, doc, database, numbering, showmarriage, showdivorce,\
name_display):
#classes #classes
self._name_display = name_display
self.doc = doc self.doc = doc
self.database = database self.database = database
self.numbering = numbering self.numbering = numbering
@ -184,7 +188,7 @@ class Printinfo():
display_num = self.numbering.number(level) display_num = self.numbering.number(level)
self.doc.start_paragraph("DR-Level%d" % min(level, 32), display_num) self.doc.start_paragraph("DR-Level%d" % min(level, 32), display_num)
mark = ReportUtils.get_person_mark(self.database, person) mark = ReportUtils.get_person_mark(self.database, person)
self.doc.write_text(_nd.display(person), mark) self.doc.write_text(self._name_display.display(person), mark)
self.dump_string(person) self.dump_string(person)
self.doc.end_paragraph() self.doc.end_paragraph()
@ -194,7 +198,7 @@ class Printinfo():
spouse = self.database.get_person_from_handle(spouse_handle) spouse = self.database.get_person_from_handle(spouse_handle)
mark = ReportUtils.get_person_mark(self.database, spouse) mark = ReportUtils.get_person_mark(self.database, spouse)
self.doc.start_paragraph("DR-Spouse%d" % min(level, 32)) self.doc.start_paragraph("DR-Spouse%d" % min(level, 32))
name = _nd.display(spouse) name = self._name_display.display(spouse)
self.doc.write_text(_("sp. %(spouse)s") % {'spouse':name}, mark) self.doc.write_text(_("sp. %(spouse)s") % {'spouse':name}, mark)
self.dump_string(spouse, family_handle) self.dump_string(spouse, family_handle)
self.doc.end_paragraph() self.doc.end_paragraph()
@ -260,6 +264,7 @@ class DescendantReport(Report):
that come in the options class. that come in the options class.
gen - Maximum number of generations to include. gen - Maximum number of generations to include.
name_format - Preferred format to display names
""" """
Report.__init__(self, database, options_class) Report.__init__(self, database, options_class)
@ -288,11 +293,18 @@ class DescendantReport(Report):
marrs = menu.get_option_by_name('marrs').get_value() marrs = menu.get_option_by_name('marrs').get_value()
divs = menu.get_option_by_name('divs').get_value() divs = menu.get_option_by_name('divs').get_value()
self.objPrint = Printinfo(self.doc, database, obj, marrs, divs) # Copy the global NameDisplay so that we don't change application defaults.
self._name_display = copy.deepcopy(global_name_display)
name_format = menu.get_option_by_name("name_format").get_value()
if name_format != 0:
self._name_display.set_default_format(name_format)
self.objPrint = Printinfo(self.doc, database, obj, marrs, divs,
self._name_display)
def write_report(self): def write_report(self):
self.doc.start_paragraph("DR-Title") self.doc.start_paragraph("DR-Title")
name = _nd.display(self.center_person) name = self._name_display.display(self.center_person)
title = _("Descendants of %s") % name title = _("Descendants of %s") % name
mark = IndexMark(title, INDEX_TYPE_TOC, 1) mark = IndexMark(title, INDEX_TYPE_TOC, 1)
self.doc.write_text(title, mark) self.doc.write_text(title, mark)
@ -322,6 +334,16 @@ class DescendantOptions(MenuReportOptions):
pid.set_help(_("The center person for the report")) pid.set_help(_("The center person for the report"))
menu.add_option(category_name, "pid", pid) menu.add_option(category_name, "pid", pid)
# We must figure out the value of the first option before we can
# create the EnumeratedListOption
fmt_list = global_name_display.get_name_format()
name_format = EnumeratedListOption(_("Name format"), 0)
name_format.add_item(0, _("Default"))
for num, name, fmt_str, act in fmt_list:
name_format.add_item(num, name)
name_format.set_help(_("Select the format to display names"))
menu.add_option(category_name, "name_format", name_format)
numbering = EnumeratedListOption(_("Numbering system"), "Simple") numbering = EnumeratedListOption(_("Numbering system"), "Simple")
numbering.set_items([ numbering.set_items([
("Simple", _("Simple numbering")), ("Simple", _("Simple numbering")),

View File

@ -33,6 +33,7 @@
# standard python modules # standard python modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import copy
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@ -40,7 +41,7 @@ from gen.ggettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gen.display.name import displayer as _nd from gen.display.name import displayer as global_name_display
from Errors import ReportError from Errors import ReportError
from gen.lib import EventType, FamilyRelType, Person, NoteType from gen.lib import EventType, FamilyRelType, Person, NoteType
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
@ -101,6 +102,7 @@ class DetAncestorReport(Report):
childref - Whether to add descendant references in child list. childref - Whether to add descendant references in child list.
addimages - Whether to include images. addimages - Whether to include images.
pid - The Gramps ID of the center person for the report. pid - The Gramps ID of the center person for the report.
name_format - Preferred format to display names
""" """
Report.__init__(self, database, options_class) Report.__init__(self, database, options_class)
@ -136,6 +138,13 @@ class DetAncestorReport(Report):
if (self.center_person == None) : if (self.center_person == None) :
raise ReportError(_("Person %s is not in the Database") % pid ) raise ReportError(_("Person %s is not in the Database") % pid )
# Copy the global NameDisplay so that we don't change application
# defaults.
self._name_display = copy.deepcopy(global_name_display)
name_format = menu.get_option_by_name("name_format").get_value()
if name_format != 0:
self._name_display.set_default_format(name_format)
self.gen_handles = {} self.gen_handles = {}
self.prev_gen_handles = {} self.prev_gen_handles = {}
@ -179,7 +188,7 @@ class DetAncestorReport(Report):
def write_report(self): def write_report(self):
self.apply_filter(self.center_person.get_handle(), 1) self.apply_filter(self.center_person.get_handle(), 1)
name = _nd.display_name(self.center_person.get_primary_name()) name = self._name_display.display_name(self.center_person.get_primary_name())
self.doc.start_paragraph("DAR-Title") self.doc.start_paragraph("DAR-Title")
title = self._("Ancestral Report for %s") % name title = self._("Ancestral Report for %s") % name
mark = IndexMark(title, INDEX_TYPE_TOC, 1) mark = IndexMark(title, INDEX_TYPE_TOC, 1)
@ -242,7 +251,7 @@ class DetAncestorReport(Report):
self.doc.start_paragraph("DAR-First-Entry","%s." % str(key)) self.doc.start_paragraph("DAR-First-Entry","%s." % str(key))
name = _nd.display_formal(person) name = self._name_display.display_formal(person)
mark = ReportUtils.get_person_mark(self.database, person) mark = ReportUtils.get_person_mark(self.database, person)
self.doc.start_bold() self.doc.start_bold()
@ -341,7 +350,7 @@ class DetAncestorReport(Report):
if first: if first:
self.doc.start_paragraph('DAR-MoreHeader') self.doc.start_paragraph('DAR-MoreHeader')
self.doc.write_text(self._('More about %(person_name)s:') % { self.doc.write_text(self._('More about %(person_name)s:') % {
'person_name' : _nd.display(person) }) 'person_name' : self._name_display.display(person) })
self.doc.end_paragraph() self.doc.end_paragraph()
first = 0 first = 0
@ -471,14 +480,16 @@ class DetAncestorReport(Report):
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
if mother_handle: if mother_handle:
mother = self.database.get_person_from_handle(mother_handle) mother = self.database.get_person_from_handle(mother_handle)
mother_name = _nd.display_name(mother.get_primary_name()) mother_name = \
self._name_display.display_name(mother.get_primary_name())
mother_mark = ReportUtils.get_person_mark(self.database, mother) mother_mark = ReportUtils.get_person_mark(self.database, mother)
else: else:
mother_name = "" mother_name = ""
mother_mark = "" mother_mark = ""
if father_handle: if father_handle:
father = self.database.get_person_from_handle(father_handle) father = self.database.get_person_from_handle(father_handle)
father_name = _nd.display_name(father.get_primary_name()) father_name = \
self._name_display.display_name(father.get_primary_name())
father_mark = ReportUtils.get_person_mark(self.database, father) father_mark = ReportUtils.get_person_mark(self.database, father)
else: else:
father_name = "" father_name = ""
@ -501,10 +512,14 @@ class DetAncestorReport(Report):
family = self.database.get_family_from_handle(family_handle) family = self.database.get_family_from_handle(family_handle)
spouse_handle = ReportUtils.find_spouse(person,family) spouse_handle = ReportUtils.find_spouse(person,family)
spouse = self.database.get_person_from_handle(spouse_handle) spouse = self.database.get_person_from_handle(spouse_handle)
if spouse:
name = self._name_display.display_formal(spouse)
else:
name = ""
text = "" text = ""
spouse_mark = ReportUtils.get_person_mark(self.database, spouse) spouse_mark = ReportUtils.get_person_mark(self.database, spouse)
text = self.__narrator.get_married_string(family, is_first) text = self.__narrator.get_married_string(family, is_first, self._name_display)
if text: if text:
self.doc.write_text_citation(text, spouse_mark) self.doc.write_text_citation(text, spouse_mark)
@ -520,14 +535,14 @@ class DetAncestorReport(Report):
mother_handle = family.get_mother_handle() mother_handle = family.get_mother_handle()
if mother_handle: if mother_handle:
mother = self.database.get_person_from_handle(mother_handle) mother = self.database.get_person_from_handle(mother_handle)
mother_name = _nd.display(mother) mother_name = self._name_display.display(mother)
else: else:
mother_name = self._("unknown") mother_name = self._("unknown")
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
if father_handle: if father_handle:
father = self.database.get_person_from_handle(father_handle) father = self.database.get_person_from_handle(father_handle)
father_name = _nd.display(father) father_name = self._name_display.display(father)
else: else:
father_name = self._("unknown") father_name = self._("unknown")
@ -542,7 +557,7 @@ class DetAncestorReport(Report):
for child_ref in family.get_child_ref_list(): for child_ref in family.get_child_ref_list():
child_handle = child_ref.ref child_handle = child_ref.ref
child = self.database.get_person_from_handle(child_handle) child = self.database.get_person_from_handle(child_handle)
child_name = _nd.display(child) child_name = self._name_display.display(child)
child_mark = ReportUtils.get_person_mark(self.database, child) child_mark = ReportUtils.get_person_mark(self.database, child)
if self.childref and self.prev_gen_handles.get(child_handle): if self.childref and self.prev_gen_handles.get(child_handle):
@ -570,14 +585,14 @@ class DetAncestorReport(Report):
mother_handle = family.get_mother_handle() mother_handle = family.get_mother_handle()
if mother_handle: if mother_handle:
mother = self.database.get_person_from_handle(mother_handle) mother = self.database.get_person_from_handle(mother_handle)
mother_name = _nd.display(mother) mother_name = self._name_display.display(mother)
else: else:
mother_name = self._("unknown") mother_name = self._("unknown")
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
if father_handle: if father_handle:
father = self.database.get_person_from_handle(father_handle) father = self.database.get_person_from_handle(father_handle)
father_name = _nd.display(father) father_name = self._name_display.display(father)
else: else:
father_name = self._("unknown") father_name = self._("unknown")
@ -634,7 +649,7 @@ class DetAncestorReport(Report):
photo = plist[0] photo = plist[0]
ReportUtils.insert_image(self.database, self.doc, photo) ReportUtils.insert_image(self.database, self.doc, photo)
name = _nd.display_formal(ind) name = self._name_display.display_formal(ind)
mark = ReportUtils.get_person_mark(self.database, ind) mark = ReportUtils.get_person_mark(self.database, ind)
if family.get_relationship() == FamilyRelType.MARRIED: if family.get_relationship() == FamilyRelType.MARRIED:
@ -707,6 +722,16 @@ class DetAncestorOptions(MenuReportOptions):
pid = PersonOption(_("Center Person")) pid = PersonOption(_("Center Person"))
pid.set_help(_("The center person for the report")) pid.set_help(_("The center person for the report"))
addopt("pid", pid) addopt("pid", pid)
# We must figure out the value of the first option before we can
# create the EnumeratedListOption
fmt_list = global_name_display.get_name_format()
name_format = EnumeratedListOption(_("Name format"), 0)
name_format.add_item(0, _("Default"))
for num, name, fmt_str, act in fmt_list:
name_format.add_item(num, name)
name_format.set_help(_("Select the format to display names"))
addopt("name_format", name_format)
gen = NumberOption(_("Generations"),10,1,100) gen = NumberOption(_("Generations"),10,1,100)
gen.set_help(_("The number of generations to include in the report")) gen.set_help(_("The number of generations to include in the report"))

View File

@ -34,6 +34,7 @@
# standard python modules # standard python modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import copy
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
from functools import partial from functools import partial
@ -42,7 +43,7 @@ from functools import partial
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gen.display.name import displayer as _nd from gen.display.name import displayer as global_name_display
from Errors import ReportError from Errors import ReportError
from gen.lib import FamilyRelType, Person, NoteType from gen.lib import FamilyRelType, Person, NoteType
from gen.plug.menu import (BooleanOption, NumberOption, PersonOption, from gen.plug.menu import (BooleanOption, NumberOption, PersonOption,
@ -113,6 +114,7 @@ class DetDescendantReport(Report):
incpaths - Whether to include the path of descendancy from the start-person to each descendant. incpaths - Whether to include the path of descendancy from the start-person to each descendant.
incssign - Whether to include a sign ('+') before the descendant number in the child-list to indicate a child has succession. incssign - Whether to include a sign ('+') before the descendant number in the child-list to indicate a child has succession.
pid - The Gramps ID of the center person for the report. pid - The Gramps ID of the center person for the report.
name_format - Preferred format to display names
""" """
Report.__init__(self, database, options_class) Report.__init__(self, database, options_class)
@ -170,6 +172,13 @@ class DetDescendantReport(Report):
translator = Translator(language) translator = Translator(language)
self._ = translator.gettext self._ = translator.gettext
# Copy the global NameDisplay so that we don't change application
# defaults.
self._name_display = copy.deepcopy(global_name_display)
name_format = menu.get_option_by_name("name_format").get_value()
if name_format != 0:
self._name_display.set_default_format(name_format)
self.__narrator = Narrator(self.database, self.verbose, self.__narrator = Narrator(self.database, self.verbose,
use_call, use_fulldate, use_call, use_fulldate,
empty_date, empty_place, empty_date, empty_place,
@ -266,7 +275,7 @@ class DetDescendantReport(Report):
else: else:
raise AttributeError("no such numbering: '%s'" % self.numbering) raise AttributeError("no such numbering: '%s'" % self.numbering)
name = _nd.display_name(self.center_person.get_primary_name()) name = self._name_display.display_name(self.center_person.get_primary_name())
self.doc.start_paragraph("DDR-Title") self.doc.start_paragraph("DDR-Title")
@ -313,11 +322,13 @@ class DetDescendantReport(Report):
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
if mother_handle and mother_handle in self.dnumber: if mother_handle and mother_handle in self.dnumber:
person = self.database.get_person_from_handle(mother_handle) person = self.database.get_person_from_handle(mother_handle)
person_name = _nd.display_name(person.get_primary_name()) person_name = \
self._name_display.display_name(person.get_primary_name())
path.append(person_name) path.append(person_name)
elif father_handle and father_handle in self.dnumber: elif father_handle and father_handle in self.dnumber:
person = self.database.get_person_from_handle(father_handle) person = self.database.get_person_from_handle(father_handle)
person_name = _nd.display_name(person.get_primary_name()) person_name = \
self._name_display.display_name(person.get_primary_name())
path.append(person_name) path.append(person_name)
else: else:
break break
@ -345,7 +356,7 @@ class DetDescendantReport(Report):
val = self.dnumber[person_handle] val = self.dnumber[person_handle]
self.doc.start_paragraph("DDR-First-Entry","%s." % val) self.doc.start_paragraph("DDR-First-Entry","%s." % val)
name = _nd.display_formal(person) name = self._name_display.display_formal(person)
mark = ReportUtils.get_person_mark(self.database, person) mark = ReportUtils.get_person_mark(self.database, person)
self.doc.start_bold() self.doc.start_bold()
@ -471,14 +482,16 @@ class DetDescendantReport(Report):
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
if mother_handle: if mother_handle:
mother = self.database.get_person_from_handle(mother_handle) mother = self.database.get_person_from_handle(mother_handle)
mother_name = _nd.display_name(mother.get_primary_name()) mother_name = \
self._name_display.display_name(mother.get_primary_name())
mother_mark = ReportUtils.get_person_mark(self.database, mother) mother_mark = ReportUtils.get_person_mark(self.database, mother)
else: else:
mother_name = "" mother_name = ""
mother_mark = "" mother_mark = ""
if father_handle: if father_handle:
father = self.database.get_person_from_handle(father_handle) father = self.database.get_person_from_handle(father_handle)
father_name = _nd.display_name(father.get_primary_name()) father_name = \
self._name_display.display_name(father.get_primary_name())
father_mark = ReportUtils.get_person_mark(self.database, father) father_mark = ReportUtils.get_person_mark(self.database, father)
else: else:
father_name = "" father_name = ""
@ -500,10 +513,14 @@ class DetDescendantReport(Report):
family = self.database.get_family_from_handle(family_handle) family = self.database.get_family_from_handle(family_handle)
spouse_handle = ReportUtils.find_spouse(person, family) spouse_handle = ReportUtils.find_spouse(person, family)
spouse = self.database.get_person_from_handle(spouse_handle) spouse = self.database.get_person_from_handle(spouse_handle)
if spouse:
name = self._name_display.display_formal(spouse)
else:
name = ""
text = "" text = ""
spouse_mark = ReportUtils.get_person_mark(self.database, spouse) spouse_mark = ReportUtils.get_person_mark(self.database, spouse)
text = self.__narrator.get_married_string(family, is_first) text = self.__narrator.get_married_string(family, is_first, self._name_display)
if text: if text:
self.doc.write_text_citation(text, spouse_mark) self.doc.write_text_citation(text, spouse_mark)
@ -522,7 +539,7 @@ class DetDescendantReport(Report):
mate = self.database.get_person_from_handle(mate_handle) mate = self.database.get_person_from_handle(mate_handle)
self.doc.start_paragraph("DDR-MoreHeader") self.doc.start_paragraph("DDR-MoreHeader")
name = _nd.display_formal(mate) name = self._name_display.display_formal(mate)
mark = ReportUtils.get_person_mark(self.database, mate) mark = ReportUtils.get_person_mark(self.database, mate)
if family.get_relationship() == FamilyRelType.MARRIED: if family.get_relationship() == FamilyRelType.MARRIED:
self.doc.write_text(self._("Spouse: %s") % name, mark) self.doc.write_text(self._("Spouse: %s") % name, mark)
@ -539,14 +556,14 @@ class DetDescendantReport(Report):
mother_handle = family.get_mother_handle() mother_handle = family.get_mother_handle()
if mother_handle: if mother_handle:
mother = self.database.get_person_from_handle(mother_handle) mother = self.database.get_person_from_handle(mother_handle)
mother_name = _nd.display(mother) mother_name = self._name_display.display(mother)
else: else:
mother_name = self._("unknown") mother_name = self._("unknown")
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
if father_handle: if father_handle:
father = self.database.get_person_from_handle(father_handle) father = self.database.get_person_from_handle(father_handle)
father_name = _nd.display(father) father_name = self._name_display.display(father)
else: else:
father_name = self._("unknown") father_name = self._("unknown")
@ -573,7 +590,7 @@ class DetDescendantReport(Report):
for child_ref in family.get_child_ref_list(): for child_ref in family.get_child_ref_list():
child_handle = child_ref.ref child_handle = child_ref.ref
child = self.database.get_person_from_handle(child_handle) child = self.database.get_person_from_handle(child_handle)
child_name = _nd.display(child) child_name = self._name_display.display(child)
child_mark = ReportUtils.get_person_mark(self.database, child) child_mark = ReportUtils.get_person_mark(self.database, child)
if self.childref and self.prev_gen_handles.get(child_handle): if self.childref and self.prev_gen_handles.get(child_handle):
@ -689,7 +706,7 @@ class DetDescendantReport(Report):
def write_person_info(self, person): def write_person_info(self, person):
name = _nd.display_formal(person) name = self._name_display.display_formal(person)
self.__narrator.set_subject(person) self.__narrator.set_subject(person)
plist = person.get_media_list() plist = person.get_media_list()
@ -762,7 +779,7 @@ class DetDescendantReport(Report):
if first: if first:
self.doc.start_paragraph('DDR-MoreHeader') self.doc.start_paragraph('DDR-MoreHeader')
self.doc.write_text(self._('More about %(person_name)s:') % { self.doc.write_text(self._('More about %(person_name)s:') % {
'person_name' : _nd.display(person) }) 'person_name' : self._name_display.display(person) })
self.doc.end_paragraph() self.doc.end_paragraph()
first = 0 first = 0
@ -847,6 +864,16 @@ class DetDescendantOptions(MenuReportOptions):
pid.set_help(_("The center person for the report")) pid.set_help(_("The center person for the report"))
add_option("pid", pid) add_option("pid", pid)
# We must figure out the value of the first option before we can
# create the EnumeratedListOption
fmt_list = global_name_display.get_name_format()
name_format = EnumeratedListOption(_("Name format"), 0)
name_format.add_item(0, _("Default"))
for num, name, fmt_str, act in fmt_list:
name_format.add_item(num, name)
name_format.set_help(_("Select the format to display names"))
add_option("name_format", name_format)
numbering = EnumeratedListOption(_("Numbering system"), "Henry") numbering = EnumeratedListOption(_("Numbering system"), "Henry")
numbering.set_items([ numbering.set_items([
("Henry", _("Henry numbering")), ("Henry", _("Henry numbering")),

View File

@ -28,6 +28,7 @@
# python modules # python modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import copy
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@ -35,12 +36,12 @@ from gen.ggettext import gettext as _
# gramps modules # gramps modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gen.display.name import displayer as name_displayer from gen.display.name import displayer as global_name_display
from Errors import ReportError from Errors import ReportError
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, TableStyle, from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, TableStyle,
TableCellStyle, FONT_SANS_SERIF, INDEX_TYPE_TOC, TableCellStyle, FONT_SANS_SERIF, INDEX_TYPE_TOC,
PARA_ALIGN_CENTER) PARA_ALIGN_CENTER)
from gen.plug.menu import PersonOption from gen.plug.menu import (PersonOption, EnumeratedListOption)
from gen.plug.report import Report from gen.plug.report import Report
from gen.plug.report import utils as ReportUtils from gen.plug.report import utils as ReportUtils
from gen.plug.report import MenuReportOptions from gen.plug.report import MenuReportOptions
@ -65,6 +66,7 @@ class EndOfLineReport(Report):
This report needs the following parameters (class variables) This report needs the following parameters (class variables)
that come in the options class. that come in the options class.
name_format - Preferred format to display names
""" """
Report.__init__(self, database, options_class) Report.__init__(self, database, options_class)
@ -74,6 +76,13 @@ class EndOfLineReport(Report):
if (self.center_person == None) : if (self.center_person == None) :
raise ReportError(_("Person %s is not in the Database") % pid ) raise ReportError(_("Person %s is not in the Database") % pid )
# Copy the global NameDisplay so that we don't change application
# defaults.
self._name_display = copy.deepcopy(global_name_display)
name_format = menu.get_option_by_name("name_format").get_value()
if name_format != 0:
self._name_display.set_default_format(name_format)
# eol_map is a map whose: # eol_map is a map whose:
# keys are the generations of the people # keys are the generations of the people
# values are a map whose: # values are a map whose:
@ -134,7 +143,7 @@ class EndOfLineReport(Report):
The routine the actually creates the report. At this point, the document The routine the actually creates the report. At this point, the document
is opened and ready for writing. is opened and ready for writing.
""" """
pname = name_displayer.display(self.center_person) pname = self._name_display.display(self.center_person)
self.doc.start_paragraph("EOL-Title") self.doc.start_paragraph("EOL-Title")
title = _("End of Line Report for %s") % pname title = _("End of Line Report for %s") % pname
@ -173,7 +182,7 @@ class EndOfLineReport(Report):
""" """
person = self.database.get_person_from_handle(person_handle) person = self.database.get_person_from_handle(person_handle)
name = name_displayer.display(person) name = self._name_display.display(person)
mark = ReportUtils.get_person_mark(self.database, person) mark = ReportUtils.get_person_mark(self.database, person)
birth_date = "" birth_date = ""
birth_ref = person.get_birth_ref() birth_ref = person.get_birth_ref()
@ -208,7 +217,7 @@ class EndOfLineReport(Report):
names = [] names = []
for person_handle in pedigree: for person_handle in pedigree:
person = self.database.get_person_from_handle(person_handle) person = self.database.get_person_from_handle(person_handle)
names.append(name_displayer.display(person)) names.append(self._name_display.display(person))
text = " -- ".join(names) text = " -- ".join(names)
self.doc.start_row() self.doc.start_row()
self.doc.start_cell('EOL-TableCell') self.doc.start_cell('EOL-TableCell')
@ -243,6 +252,17 @@ class EndOfLineOptions(MenuReportOptions):
pid.set_help(_("The center person for the report")) pid.set_help(_("The center person for the report"))
menu.add_option(category_name, "pid", pid) menu.add_option(category_name, "pid", pid)
# We must figure out the value of the first option before we can
# create the EnumeratedListOption
fmt_list = global_name_display.get_name_format()
name_format = EnumeratedListOption(_("Name format"), 0)
name_format.add_item(0, _("Default"))
for num, name, fmt_str, act in fmt_list:
name_format.add_item(num, name)
name_format.set_help(_("Select the format to display names"))
menu.add_option(category_name, "name_format", name_format)
def make_default_style(self, default_style): def make_default_style(self, default_style):
"""Make the default output style for the End of Line Report.""" """Make the default output style for the End of Line Report."""
# Paragraph Styles # Paragraph Styles

View File

@ -29,6 +29,7 @@
# Python Library # Python Library
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import copy
from functools import partial from functools import partial
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@ -37,7 +38,7 @@ from functools import partial
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import gen.lib import gen.lib
from gen.plug.menu import BooleanOption, FamilyOption from gen.plug.menu import (BooleanOption, FamilyOption, EnumeratedListOption)
from gen.plug.report import Report from gen.plug.report import Report
from gen.plug.report import utils as ReportUtils from gen.plug.report import utils as ReportUtils
from gen.plug.report import MenuReportOptions from gen.plug.report import MenuReportOptions
@ -46,7 +47,7 @@ from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, TableStyle,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER) INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
import DateHandler import DateHandler
from gen.ggettext import sgettext as _ from gen.ggettext import sgettext as _
from gen.display.name import displayer as _nd from gen.display.name import displayer as global_name_display
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -70,6 +71,7 @@ class FamilyGroup(Report):
family_handle - Handle of the family to write report on. family_handle - Handle of the family to write report on.
includeAttrs - Whether to include attributes includeAttrs - Whether to include attributes
name_format - Preferred format to display names
""" """
Report.__init__(self, database, options_class) Report.__init__(self, database, options_class)
menu = options_class.menu menu = options_class.menu
@ -83,6 +85,13 @@ class FamilyGroup(Report):
else: else:
self.family_handle = None self.family_handle = None
# Copy the global NameDisplay so that we don't change application
# defaults.
self._name_display = copy.deepcopy(global_name_display)
name_format = menu.get_option_by_name("name_format").get_value()
if name_format != 0:
self._name_display.set_default_format(name_format)
get_option_by_name = menu.get_option_by_name get_option_by_name = menu.get_option_by_name
get_value = lambda name:get_option_by_name(name).get_value() get_value = lambda name:get_option_by_name(name).get_value()
self.recursive = get_value('recursive') self.recursive = get_value('recursive')
@ -160,7 +169,7 @@ class FamilyGroup(Report):
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
if father_handle: if father_handle:
father = self.database.get_person_from_handle(father_handle) father = self.database.get_person_from_handle(father_handle)
father_name = _nd.display(father) father_name = self._name_display.display(father)
if self.incRelDates: if self.incRelDates:
birth_ref = father.get_birth_ref() birth_ref = father.get_birth_ref()
birth = " " birth = " "
@ -177,7 +186,7 @@ class FamilyGroup(Report):
mother_handle = family.get_mother_handle() mother_handle = family.get_mother_handle()
if mother_handle: if mother_handle:
mother = self.database.get_person_from_handle(mother_handle) mother = self.database.get_person_from_handle(mother_handle)
mother_name = _nd.display(mother) mother_name = self._name_display.display(mother)
if self.incRelDates: if self.incRelDates:
birth_ref = mother.get_birth_ref() birth_ref = mother.get_birth_ref()
birth = " " birth = " "
@ -264,7 +273,7 @@ class FamilyGroup(Report):
person = gen.lib.Person() person = gen.lib.Person()
else: else:
person = self.database.get_person_from_handle(person_handle) person = self.database.get_person_from_handle(person_handle)
name = _nd.display(person) name = self._name_display.display(person)
self.doc.start_table(title,'FGR-ParentTable') self.doc.start_table(title,'FGR-ParentTable')
self.doc.start_row() self.doc.start_row()
@ -339,7 +348,7 @@ class FamilyGroup(Report):
if self.incParNames: if self.incParNames:
for alt_name in person.get_alternate_names(): for alt_name in person.get_alternate_names():
name_type = str( alt_name.get_type() ) name_type = str( alt_name.get_type() )
name = _nd.display_name(alt_name) name = self._name_display.display_name(alt_name)
self.dump_parent_line(name_type, name) self.dump_parent_line(name_type, name)
self.doc.end_table() self.doc.end_table()
@ -454,7 +463,7 @@ class FamilyGroup(Report):
self.doc.end_paragraph() self.doc.end_paragraph()
self.doc.end_cell() self.doc.end_cell()
name = _nd.display(person) name = self._name_display.display(person)
mark = ReportUtils.get_person_mark(self.database,person) mark = ReportUtils.get_person_mark(self.database,person)
self.doc.start_cell('FGR-ChildName',3) self.doc.start_cell('FGR-ChildName',3)
self.doc.start_paragraph('FGR-ChildText') self.doc.start_paragraph('FGR-ChildText')
@ -514,7 +523,7 @@ class FamilyGroup(Report):
self.doc.start_paragraph('FGR-Normal') self.doc.start_paragraph('FGR-Normal')
spouse = self.database.get_person_from_handle(spouse_id) spouse = self.database.get_person_from_handle(spouse_id)
spouse_name = _nd.display(spouse) spouse_name = self._name_display.display(spouse)
if self.incRelDates: if self.incRelDates:
birth = " " birth = " "
birth_ref = spouse.get_birth_ref() birth_ref = spouse.get_birth_ref()
@ -621,6 +630,17 @@ class FamilyGroupOptions(MenuReportOptions):
family_id = FamilyOption(_("Center Family")) family_id = FamilyOption(_("Center Family"))
family_id.set_help(_("The center family for the report")) family_id.set_help(_("The center family for the report"))
add_option("family_id", family_id) add_option("family_id", family_id)
# We must figure out the value of the first option before we can
# create the EnumeratedListOption
fmt_list = global_name_display.get_name_format()
name_format = EnumeratedListOption(_("Name format"), 0)
name_format.add_item(0, _("Default"))
for num, name, fmt_str, act in fmt_list:
name_format.add_item(num, name)
name_format.set_help(_("Select the format to display names"))
add_option("name_format", name_format)
recursive = BooleanOption(_('Recursive'),False) recursive = BooleanOption(_('Recursive'),False)
recursive.set_help(_("Create reports for all descendants " recursive.set_help(_("Create reports for all descendants "

View File

@ -30,6 +30,7 @@
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import os import os
import copy
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
from collections import defaultdict from collections import defaultdict
@ -44,13 +45,13 @@ from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, TableStyle,
PARA_ALIGN_CENTER) PARA_ALIGN_CENTER)
import DateHandler import DateHandler
from gen.plug.menu import (BooleanOption, FilterOption, PersonOption, from gen.plug.menu import (BooleanOption, FilterOption, PersonOption,
BooleanListOption) BooleanListOption, EnumeratedListOption)
from gen.plug.report import Report from gen.plug.report import Report
from gen.plug.report import utils as ReportUtils from gen.plug.report import utils as ReportUtils
from gen.plug.report import MenuReportOptions from gen.plug.report import MenuReportOptions
from gen.plug.report import Bibliography from gen.plug.report import Bibliography
from gen.plug.report import endnotes as Endnotes from gen.plug.report import endnotes as Endnotes
from gen.display.name import displayer as _nd from gen.display.name import displayer as global_name_display
from Utils import media_path_full from Utils import media_path_full
from QuestionDialog import WarningDialog from QuestionDialog import WarningDialog
@ -160,6 +161,7 @@ class IndivCompleteReport(Report):
cites - Whether or not to include source information. cites - Whether or not to include source information.
sort - Whether ot not to sort events into chronological order. sort - Whether ot not to sort events into chronological order.
sections - Which event groups should be given separate sections. sections - Which event groups should be given separate sections.
name_format - Preferred format to display names
""" """
Report.__init__(self, database, options_class) Report.__init__(self, database, options_class)
@ -177,6 +179,13 @@ class IndivCompleteReport(Report):
self.section_list = menu.get_option_by_name('sections').get_selected() self.section_list = menu.get_option_by_name('sections').get_selected()
# Copy the global NameDisplay so that we don't change application
# defaults.
self._name_display = copy.deepcopy(global_name_display)
name_format = menu.get_option_by_name("name_format").get_value()
if name_format != 0:
self._name_display.set_default_format(name_format)
def write_fact(self, event_ref, event, event_group): def write_fact(self, event_ref, event, event_group):
""" """
Writes a single event. Writes a single event.
@ -306,7 +315,7 @@ class IndivCompleteReport(Report):
father_handle = family.get_father_handle() father_handle = family.get_father_handle()
if father_handle: if father_handle:
father = self.database.get_person_from_handle(father_handle) father = self.database.get_person_from_handle(father_handle)
fname = _nd.display(father) fname = self._name_display.display(father)
mark = ReportUtils.get_person_mark(self.database, father) mark = ReportUtils.get_person_mark(self.database, father)
self.write_p_entry(_('Father'), fname, frel, mark) self.write_p_entry(_('Father'), fname, frel, mark)
else: else:
@ -315,7 +324,7 @@ class IndivCompleteReport(Report):
mother_handle = family.get_mother_handle() mother_handle = family.get_mother_handle()
if mother_handle: if mother_handle:
mother = self.database.get_person_from_handle(mother_handle) mother = self.database.get_person_from_handle(mother_handle)
mname = _nd.display(mother) mname = self._name_display.display(mother)
mark = ReportUtils.get_person_mark(self.database, mother) mark = ReportUtils.get_person_mark(self.database, mother)
self.write_p_entry(_('Mother'), mname, mrel, mark) self.write_p_entry(_('Mother'), mname, mrel, mark)
else: else:
@ -343,7 +352,7 @@ class IndivCompleteReport(Report):
name_type = str( name.get_type() ) name_type = str( name.get_type() )
self.doc.start_row() self.doc.start_row()
self.normal_cell(name_type) self.normal_cell(name_type)
text = _nd.display_name(name) text = self._name_display.display_name(name)
endnotes = "" endnotes = ""
if self.use_srcs: if self.use_srcs:
endnotes = Endnotes.cite_source(self.bibli, name) endnotes = Endnotes.cite_source(self.bibli, name)
@ -408,7 +417,7 @@ class IndivCompleteReport(Report):
self.doc.start_paragraph("IDS-Spouse") self.doc.start_paragraph("IDS-Spouse")
if spouse_id: if spouse_id:
spouse = self.database.get_person_from_handle(spouse_id) spouse = self.database.get_person_from_handle(spouse_id)
text = _nd.display(spouse) text = self._name_display.display(spouse)
mark = ReportUtils.get_person_mark(self.database, spouse) mark = ReportUtils.get_person_mark(self.database, spouse)
else: else:
text = _("unknown") text = _("unknown")
@ -432,7 +441,7 @@ class IndivCompleteReport(Report):
for child_ref in child_ref_list: for child_ref in child_ref_list:
self.doc.start_paragraph("IDS-Normal") self.doc.start_paragraph("IDS-Normal")
child = self.database.get_person_from_handle(child_ref.ref) child = self.database.get_person_from_handle(child_ref.ref)
name = _nd.display(child) name = self._name_display.display(child)
mark = ReportUtils.get_person_mark(self.database, child) mark = ReportUtils.get_person_mark(self.database, child)
self.doc.write_text(name, mark) self.doc.write_text(name, mark)
self.doc.end_paragraph() self.doc.end_paragraph()
@ -531,7 +540,7 @@ class IndivCompleteReport(Report):
self.bibli = Bibliography(Bibliography.MODE_DATE|Bibliography.MODE_PAGE) self.bibli = Bibliography(Bibliography.MODE_DATE|Bibliography.MODE_PAGE)
media_list = self.person.get_media_list() media_list = self.person.get_media_list()
name = _nd.display(self.person) name = self._name_display.display(self.person)
title = _("Summary of %s") % name title = _("Summary of %s") % name
mark = IndexMark(title, INDEX_TYPE_TOC, 1) mark = IndexMark(title, INDEX_TYPE_TOC, 1)
self.doc.start_paragraph("IDS-Title") self.doc.start_paragraph("IDS-Title")
@ -560,7 +569,7 @@ class IndivCompleteReport(Report):
self.doc.start_row() self.doc.start_row()
self.normal_cell("%s:" % _("Name")) self.normal_cell("%s:" % _("Name"))
name = self.person.get_primary_name() name = self.person.get_primary_name()
text = _nd.display_name(name) text = self._name_display.display_name(name)
mark = ReportUtils.get_person_mark(self.database, self.person) mark = ReportUtils.get_person_mark(self.database, self.person)
endnotes = "" endnotes = ""
if self.use_srcs: if self.use_srcs:
@ -585,7 +594,7 @@ class IndivCompleteReport(Report):
if father_inst_id: if father_inst_id:
father_inst = self.database.get_person_from_handle( father_inst = self.database.get_person_from_handle(
father_inst_id) father_inst_id)
father = _nd.display(father_inst) father = self._name_display.display(father_inst)
fmark = ReportUtils.get_person_mark(self.database, father_inst) fmark = ReportUtils.get_person_mark(self.database, father_inst)
else: else:
father = "" father = ""
@ -594,7 +603,7 @@ class IndivCompleteReport(Report):
if mother_inst_id: if mother_inst_id:
mother_inst = self.database.get_person_from_handle( mother_inst = self.database.get_person_from_handle(
mother_inst_id) mother_inst_id)
mother = _nd.display(mother_inst) mother = self._name_display.display(mother_inst)
mmark = ReportUtils.get_person_mark(self.database, mother_inst) mmark = ReportUtils.get_person_mark(self.database, mother_inst)
else: else:
mother = "" mother = ""
@ -661,6 +670,17 @@ class IndivCompleteOptions(MenuReportOptions):
self.__pid.set_help(_("The center person for the filter.")) self.__pid.set_help(_("The center person for the filter."))
menu.add_option(category_name, "pid", self.__pid) menu.add_option(category_name, "pid", self.__pid)
self.__pid.connect('value-changed', self.__update_filters) self.__pid.connect('value-changed', self.__update_filters)
# We must figure out the value of the first option before we can
# create the EnumeratedListOption
fmt_list = global_name_display.get_name_format()
name_format = EnumeratedListOption(_("Name format"), 0)
name_format.add_item(0, _("Default"))
for num, name, fmt_str, act in fmt_list:
name_format.add_item(num, name)
name_format.set_help(_("Select the format to display names"))
menu.add_option(category_name, "name_format", name_format)
self.__update_filters() self.__update_filters()

View File

@ -30,6 +30,7 @@
# python modules # python modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import copy
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@ -37,12 +38,13 @@ from gen.ggettext import gettext as _
# gramps modules # gramps modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gen.display.name import displayer as name_displayer from gen.display.name import displayer as global_name_display
from Errors import ReportError from Errors import ReportError
import Relationship import Relationship
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF, INDEX_TYPE_TOC, PARA_ALIGN_CENTER) FONT_SANS_SERIF, INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.menu import NumberOption, BooleanOption, PersonOption from gen.plug.menu import (NumberOption, BooleanOption, PersonOption,
EnumeratedListOption)
from gen.plug.report import Report from gen.plug.report import Report
from gen.plug.report import utils as ReportUtils from gen.plug.report import utils as ReportUtils
from gen.plug.report import MenuReportOptions from gen.plug.report import MenuReportOptions
@ -74,6 +76,7 @@ class KinshipReport(Report):
inccousins - Whether to include cousins. inccousins - Whether to include cousins.
incaunts - Whether to include aunts/uncles/nephews/nieces. incaunts - Whether to include aunts/uncles/nephews/nieces.
pid - The Gramps ID of the center person for the report. pid - The Gramps ID of the center person for the report.
name_format - Preferred format to display names
""" """
Report.__init__(self, database, options_class) Report.__init__(self, database, options_class)
@ -88,6 +91,13 @@ class KinshipReport(Report):
if (self.person == None) : if (self.person == None) :
raise ReportError(_("Person %s is not in the Database") % pid ) raise ReportError(_("Person %s is not in the Database") % pid )
# Copy the global NameDisplay so that we don't change application
# defaults.
self._name_display = copy.deepcopy(global_name_display)
name_format = menu.get_option_by_name("name_format").get_value()
if name_format != 0:
self._name_display.set_default_format(name_format)
self.__db = database self.__db = database
self.rel_calc = Relationship.get_relationship_calculator() self.rel_calc = Relationship.get_relationship_calculator()
@ -99,7 +109,7 @@ class KinshipReport(Report):
The routine the actually creates the report. At this point, the document The routine the actually creates the report. At this point, the document
is opened and ready for writing. is opened and ready for writing.
""" """
pname = name_displayer.display(self.person) pname = self._name_display.display(self.person)
self.doc.start_paragraph("KIN-Title") self.doc.start_paragraph("KIN-Title")
title = _("Kinship Report for %s") % pname title = _("Kinship Report for %s") % pname
@ -285,7 +295,7 @@ class KinshipReport(Report):
""" """
person = self.database.get_person_from_handle(person_handle) person = self.database.get_person_from_handle(person_handle)
name = name_displayer.display(person) name = self._name_display.display(person)
mark = ReportUtils.get_person_mark(self.database, person) mark = ReportUtils.get_person_mark(self.database, person)
birth_date = "" birth_date = ""
birth = get_birth_or_fallback(self.database, person) birth = get_birth_or_fallback(self.database, person)
@ -328,7 +338,17 @@ class KinshipOptions(MenuReportOptions):
pid = PersonOption(_("Center Person")) pid = PersonOption(_("Center Person"))
pid.set_help(_("The center person for the report")) pid.set_help(_("The center person for the report"))
menu.add_option(category_name, "pid", pid) menu.add_option(category_name, "pid", pid)
# We must figure out the value of the first option before we can
# create the EnumeratedListOption
fmt_list = global_name_display.get_name_format()
name_format = EnumeratedListOption(_("Name format"), 0)
name_format.add_item(0, _("Default"))
for num, name, fmt_str, act in fmt_list:
name_format.add_item(num, name)
name_format.set_help(_("Select the format to display names"))
menu.add_option(category_name, "name_format", name_format)
maxdescend = NumberOption(_("Max Descendant Generations"), 2, 1, 20) maxdescend = NumberOption(_("Max Descendant Generations"), 2, 1, 20)
maxdescend.set_help(_("The maximum number of descendant generations")) maxdescend.set_help(_("The maximum number of descendant generations"))
menu.add_option(category_name, "maxdescend", maxdescend) menu.add_option(category_name, "maxdescend", maxdescend)

View File

@ -31,6 +31,7 @@
# standard python modules # standard python modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import copy
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
from gen.ggettext import ngettext from gen.ggettext import ngettext
import locale import locale
@ -41,9 +42,9 @@ import math
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gen.display.name import displayer as name_displayer from gen.display.name import displayer as global_name_display
from Errors import ReportError from Errors import ReportError
from gen.plug.menu import PersonOption from gen.plug.menu import PersonOption, EnumeratedListOption
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF, PARA_ALIGN_CENTER, FONT_SANS_SERIF, PARA_ALIGN_CENTER,
INDEX_TYPE_TOC) INDEX_TYPE_TOC)
@ -69,6 +70,7 @@ class NumberOfAncestorsReport(Report):
database - the GRAMPS database instance database - the GRAMPS database instance
person - currently selected person person - currently selected person
options_class - instance of the Options class for this report options_class - instance of the Options class for this report
name_format - Preferred format to display names
""" """
Report.__init__(self, database, options_class) Report.__init__(self, database, options_class)
self.__db = database self.__db = database
@ -77,6 +79,13 @@ class NumberOfAncestorsReport(Report):
if (self.__person == None) : if (self.__person == None) :
raise ReportError(_("Person %s is not in the Database") % pid ) raise ReportError(_("Person %s is not in the Database") % pid )
# Copy the global NameDisplay so that we don't change application
# defaults.
self._name_display = copy.deepcopy(global_name_display)
name_format = menu.get_option_by_name("name_format").get_value()
if name_format != 0:
self._name_display.set_default_format(name_format)
def write_report(self): def write_report(self):
""" """
The routine the actually creates the report. At this point, the document The routine the actually creates the report. At this point, the document
@ -88,7 +97,7 @@ class NumberOfAncestorsReport(Report):
thisgen[self.__person.get_handle()]=1 thisgen[self.__person.get_handle()]=1
self.doc.start_paragraph("NOA-Title") self.doc.start_paragraph("NOA-Title")
name = name_displayer.display(self.__person) name = self._name_display.display(self.__person)
title = _("Number of Ancestors for %s") % name title = _("Number of Ancestors for %s") % name
mark = IndexMark(title, INDEX_TYPE_TOC, 1) mark = IndexMark(title, INDEX_TYPE_TOC, 1)
self.doc.write_text(title, mark) self.doc.write_text(title, mark)
@ -183,6 +192,16 @@ class NumberOfAncestorsOptions(MenuReportOptions):
pid.set_help(_("The center person for the report")) pid.set_help(_("The center person for the report"))
menu.add_option(category_name, "pid", pid) menu.add_option(category_name, "pid", pid)
# We must figure out the value of the first option before we can
# create the EnumeratedListOption
fmt_list = global_name_display.get_name_format()
name_format = EnumeratedListOption(_("Name format"), 0)
name_format.add_item(0, _("Default"))
for num, name, fmt_str, act in fmt_list:
name_format.add_item(num, name)
name_format.set_help(_("Select the format to display names"))
menu.add_option(category_name, "name_format", name_format)
def make_default_style(self, default_style): def make_default_style(self, default_style):
"""Make the default output style for the Number of Ancestors Report.""" """Make the default output style for the Number of Ancestors Report."""
font = FontStyle() font = FontStyle()