Enhance name formats in the genealogytree reports
Allow the preferred name to be either: - the call name only. - all the given names. - the call name if specified, else all the given names. Added two more options to the name formats.
This commit is contained in:
parent
fa8cef2bf1
commit
36b01e25f2
@ -65,7 +65,13 @@ _DETAIL = [{'name': _("Full"), 'value': "full"},
|
|||||||
{'name': _("Short"), 'value': "short"}]
|
{'name': _("Short"), 'value': "short"}]
|
||||||
|
|
||||||
_NAME_FORMAT = [{'name': _("Given Nickname Surname"), 'value': "1"},
|
_NAME_FORMAT = [{'name': _("Given Nickname Surname"), 'value': "1"},
|
||||||
{'name': _("Surname Given Nickname"), 'value': "2"}]
|
{'name': _("Surname Given Nickname"), 'value': "2"},
|
||||||
|
{'name': _("Surname, Given Nickname"), 'value': "3"},
|
||||||
|
{'name': _("GivenNicknameSurname"), 'value': "4"}]
|
||||||
|
|
||||||
|
_PREFERRED_NAME = [{'name': _("Auto"), 'value': "1"},
|
||||||
|
{'name': _("Call Name Only"), 'value': "2"},
|
||||||
|
{'name': _("Whole Given Name"), 'value': "3"}]
|
||||||
|
|
||||||
_MARRIAGE = [{'name': _("Default"), 'value': ""},
|
_MARRIAGE = [{'name': _("Default"), 'value': ""},
|
||||||
{'name': _("Above"), 'value': "marriage above"},
|
{'name': _("Above"), 'value': "marriage above"},
|
||||||
@ -132,6 +138,24 @@ class TreeOptions:
|
|||||||
Defines all of the controls necessary
|
Defines all of the controls necessary
|
||||||
to configure the genealogy tree reports.
|
to configure the genealogy tree reports.
|
||||||
"""
|
"""
|
||||||
|
def __init__(self):
|
||||||
|
#Node Options
|
||||||
|
self.detail = None
|
||||||
|
self.marriage = None
|
||||||
|
self.nodesize = None
|
||||||
|
self.levelsize = None
|
||||||
|
self.nodecolor = None
|
||||||
|
|
||||||
|
#Tree Options
|
||||||
|
self.timeflow = None
|
||||||
|
self.edges = None
|
||||||
|
self.leveldist = None
|
||||||
|
|
||||||
|
#Note
|
||||||
|
self.note = None
|
||||||
|
self.noteloc = None
|
||||||
|
self.notesize = None
|
||||||
|
|
||||||
def add_menu_options(self, menu):
|
def add_menu_options(self, menu):
|
||||||
"""
|
"""
|
||||||
Add all graph related options to the menu.
|
Add all graph related options to the menu.
|
||||||
@ -149,6 +173,7 @@ class TreeOptions:
|
|||||||
detail.add_item(item["value"], item["name"])
|
detail.add_item(item["value"], item["name"])
|
||||||
detail.set_help(_("Detail of information to be shown in a node."))
|
detail.set_help(_("Detail of information to be shown in a node."))
|
||||||
menu.add_option(category, "detail", detail)
|
menu.add_option(category, "detail", detail)
|
||||||
|
self.detail = detail
|
||||||
|
|
||||||
name_format = EnumeratedListOption(_("Name Format"), "1")
|
name_format = EnumeratedListOption(_("Name Format"), "1")
|
||||||
for item in _NAME_FORMAT:
|
for item in _NAME_FORMAT:
|
||||||
@ -156,29 +181,42 @@ class TreeOptions:
|
|||||||
name_format.set_help(_("Select the format to display names"))
|
name_format.set_help(_("Select the format to display names"))
|
||||||
menu.add_option(category, "name_format", name_format)
|
menu.add_option(category, "name_format", name_format)
|
||||||
|
|
||||||
|
preferred_name = EnumeratedListOption(_("Preferred Name"), "1")
|
||||||
|
for item in _PREFERRED_NAME:
|
||||||
|
preferred_name.add_item(item["value"], item["name"])
|
||||||
|
preferred_name.set_help(_("Select the portion of the given name to be "
|
||||||
|
"marked as preferred. Auto sets the call "
|
||||||
|
"name if one exists, otherwise the whole "
|
||||||
|
"given name."))
|
||||||
|
menu.add_option(category, "preferred_name", preferred_name)
|
||||||
|
|
||||||
marriage = EnumeratedListOption(_("Marriage"), "")
|
marriage = EnumeratedListOption(_("Marriage"), "")
|
||||||
for item in _MARRIAGE:
|
for item in _MARRIAGE:
|
||||||
marriage.add_item(item["value"], item["name"])
|
marriage.add_item(item["value"], item["name"])
|
||||||
marriage.set_help(_("Position of marriage information."))
|
marriage.set_help(_("Position of marriage information."))
|
||||||
menu.add_option(category, "marriage", marriage)
|
menu.add_option(category, "marriage", marriage)
|
||||||
|
self.marriage = marriage
|
||||||
|
|
||||||
nodesize = NumberOption(_("Node size"), 25, 5, 100, 5)
|
nodesize = NumberOption(_("Node size"), 25, 5, 100, 5)
|
||||||
nodesize.set_help(_("One dimension of a node, in mm. If the timeflow "
|
nodesize.set_help(_("One dimension of a node, in mm. If the timeflow "
|
||||||
"is up or down then this is the width, otherwise "
|
"is up or down then this is the width, otherwise "
|
||||||
"it is the height."))
|
"it is the height."))
|
||||||
menu.add_option(category, "nodesize", nodesize)
|
menu.add_option(category, "nodesize", nodesize)
|
||||||
|
self.nodesize = nodesize
|
||||||
|
|
||||||
levelsize = NumberOption(_("Level size"), 35, 5, 100, 5)
|
levelsize = NumberOption(_("Level size"), 35, 5, 100, 5)
|
||||||
levelsize.set_help(_("One dimension of a node, in mm. If the timeflow "
|
levelsize.set_help(_("One dimension of a node, in mm. If the timeflow "
|
||||||
"is up or down then this is the height, otherwise "
|
"is up or down then this is the height, otherwise "
|
||||||
"it is the width."))
|
"it is the width."))
|
||||||
menu.add_option(category, "levelsize", levelsize)
|
menu.add_option(category, "levelsize", levelsize)
|
||||||
|
self.levelsize = levelsize
|
||||||
|
|
||||||
nodecolor = EnumeratedListOption(_("Color"), "none")
|
nodecolor = EnumeratedListOption(_("Color"), "none")
|
||||||
for item in _COLOR:
|
for item in _COLOR:
|
||||||
nodecolor.add_item(item["value"], item["name"])
|
nodecolor.add_item(item["value"], item["name"])
|
||||||
nodecolor.set_help(_("Node color."))
|
nodecolor.set_help(_("Node color."))
|
||||||
menu.add_option(category, "nodecolor", nodecolor)
|
menu.add_option(category, "nodecolor", nodecolor)
|
||||||
|
self.nodecolor = nodecolor
|
||||||
|
|
||||||
################################
|
################################
|
||||||
category = _("Tree Options")
|
category = _("Tree Options")
|
||||||
@ -189,12 +227,14 @@ class TreeOptions:
|
|||||||
timeflow.add_item(item["value"], item["name"])
|
timeflow.add_item(item["value"], item["name"])
|
||||||
timeflow.set_help(_("Direction that the graph will grow over time."))
|
timeflow.set_help(_("Direction that the graph will grow over time."))
|
||||||
menu.add_option(category, "timeflow", timeflow)
|
menu.add_option(category, "timeflow", timeflow)
|
||||||
|
self.timeflow = timeflow
|
||||||
|
|
||||||
edges = EnumeratedListOption(_("Edge style"), "")
|
edges = EnumeratedListOption(_("Edge style"), "")
|
||||||
for item in _EDGES:
|
for item in _EDGES:
|
||||||
edges.add_item(item["value"], item["name"])
|
edges.add_item(item["value"], item["name"])
|
||||||
edges.set_help(_("Style of the edges between nodes."))
|
edges.set_help(_("Style of the edges between nodes."))
|
||||||
menu.add_option(category, "edges", edges)
|
menu.add_option(category, "edges", edges)
|
||||||
|
self.edges = edges
|
||||||
|
|
||||||
leveldist = NumberOption(_("Level distance"), 5, 1, 20, 1)
|
leveldist = NumberOption(_("Level distance"), 5, 1, 20, 1)
|
||||||
leveldist.set_help(_("The minimum amount of free space, in mm, "
|
leveldist.set_help(_("The minimum amount of free space, in mm, "
|
||||||
@ -203,6 +243,7 @@ class TreeOptions:
|
|||||||
"horizontal graphs, this corresponds to spacing "
|
"horizontal graphs, this corresponds to spacing "
|
||||||
"between columns."))
|
"between columns."))
|
||||||
menu.add_option(category, "leveldist", leveldist)
|
menu.add_option(category, "leveldist", leveldist)
|
||||||
|
self.leveldist = leveldist
|
||||||
|
|
||||||
################################
|
################################
|
||||||
category = _("Note")
|
category = _("Note")
|
||||||
@ -210,7 +251,9 @@ class TreeOptions:
|
|||||||
|
|
||||||
note = TextOption(_("Note to add to the tree"), [""])
|
note = TextOption(_("Note to add to the tree"), [""])
|
||||||
note.set_help(_("This text will be added to the tree."))
|
note.set_help(_("This text will be added to the tree."))
|
||||||
|
note.set_available(False)
|
||||||
menu.add_option(category, "note", note)
|
menu.add_option(category, "note", note)
|
||||||
|
self.note = note
|
||||||
|
|
||||||
noteloc = EnumeratedListOption(_("Note location"), 't')
|
noteloc = EnumeratedListOption(_("Note location"), 't')
|
||||||
for item in _NOTELOC:
|
for item in _NOTELOC:
|
||||||
@ -218,12 +261,14 @@ class TreeOptions:
|
|||||||
noteloc.set_help(_("Whether note will appear on top "
|
noteloc.set_help(_("Whether note will appear on top "
|
||||||
"or bottom of the page."))
|
"or bottom of the page."))
|
||||||
menu.add_option(category, "noteloc", noteloc)
|
menu.add_option(category, "noteloc", noteloc)
|
||||||
|
self.noteloc = noteloc
|
||||||
|
|
||||||
notesize = EnumeratedListOption(_("Note size"), 'normalsize')
|
notesize = EnumeratedListOption(_("Note size"), 'normalsize')
|
||||||
for item in _NOTESIZE:
|
for item in _NOTESIZE:
|
||||||
notesize.add_item(item["value"], item["name"])
|
notesize.add_item(item["value"], item["name"])
|
||||||
notesize.set_help(_("The size of note text."))
|
notesize.set_help(_("The size of note text."))
|
||||||
menu.add_option(category, "notesize", notesize)
|
menu.add_option(category, "notesize", notesize)
|
||||||
|
self.notesize = notesize
|
||||||
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
@ -291,6 +336,7 @@ class TreeDocBase(BaseDoc, TreeDoc):
|
|||||||
|
|
||||||
self.detail = get_option('detail').get_value()
|
self.detail = get_option('detail').get_value()
|
||||||
self.name_format = get_option('name_format').get_value()
|
self.name_format = get_option('name_format').get_value()
|
||||||
|
self.preferred_name = get_option('preferred_name').get_value()
|
||||||
self.marriage = get_option('marriage').get_value()
|
self.marriage = get_option('marriage').get_value()
|
||||||
self.nodesize = get_option('nodesize').get_value()
|
self.nodesize = get_option('nodesize').get_value()
|
||||||
self.levelsize = get_option('levelsize').get_value()
|
self.levelsize = get_option('levelsize').get_value()
|
||||||
@ -443,12 +489,28 @@ class TreeDocBase(BaseDoc, TreeDoc):
|
|||||||
name_parts = [self.format_given_names(name),
|
name_parts = [self.format_given_names(name),
|
||||||
'\\nick{{{}}}'.format(escape(nick)) if nick else '',
|
'\\nick{{{}}}'.format(escape(nick)) if nick else '',
|
||||||
'\\surn{{{}}}'.format(escape(surn)) if surn else '']
|
'\\surn{{{}}}'.format(escape(surn)) if surn else '']
|
||||||
|
self.write(level+1, 'name = {{{}}},\n'.format(
|
||||||
|
' '.join([e for e in name_parts if e])))
|
||||||
elif self.name_format == "2":
|
elif self.name_format == "2":
|
||||||
name_parts = ['\\surn{{{}}}'.format(escape(surn)) if surn else '',
|
name_parts = ['\\surn{{{}}}'.format(escape(surn)) if surn else '',
|
||||||
self.format_given_names(name),
|
self.format_given_names(name),
|
||||||
'\\nick{{{}}}'.format(escape(nick)) if nick else '']
|
'\\nick{{{}}}'.format(escape(nick)) if nick else '']
|
||||||
self.write(level+1, 'name = {{{}}},\n'.format(
|
self.write(level+1, 'name = {{{}}},\n'.format(
|
||||||
' '.join([e for e in name_parts if e])))
|
' '.join([e for e in name_parts if e])))
|
||||||
|
elif self.name_format == "3":
|
||||||
|
name_parts1 = [self.format_given_names(name),
|
||||||
|
'\\nick{{{}}}'.format(escape(nick)) if nick else '']
|
||||||
|
given_nick = ' '.join([e for e in name_parts1 if e])
|
||||||
|
name_parts2 = ['\\surn{{{}}}'.format(escape(surn)) if surn else '',
|
||||||
|
given_nick]
|
||||||
|
self.write(level+1, 'name = {{{}}},\n'.format(
|
||||||
|
', '.join([e for e in name_parts2 if e])))
|
||||||
|
elif self.name_format == "4":
|
||||||
|
name_parts = [self.format_given_names(name),
|
||||||
|
'\\nick{{{}}}'.format(escape(nick)) if nick else '',
|
||||||
|
'\\surn{{{}}}'.format(escape(surn)) if surn else '']
|
||||||
|
self.write(level+1, 'name = {{{}}},\n'.format(
|
||||||
|
''.join([e for e in name_parts if e])))
|
||||||
for eventref in person.get_event_ref_list():
|
for eventref in person.get_event_ref_list():
|
||||||
if eventref.role == EventRoleType.PRIMARY:
|
if eventref.role == EventRoleType.PRIMARY:
|
||||||
event = db.get_event_from_handle(eventref.ref)
|
event = db.get_event_from_handle(eventref.ref)
|
||||||
@ -552,17 +614,16 @@ class TreeDocBase(BaseDoc, TreeDoc):
|
|||||||
"""
|
"""
|
||||||
first = name.get_first_name()
|
first = name.get_first_name()
|
||||||
call = name.get_call_name()
|
call = name.get_call_name()
|
||||||
if call:
|
if call and self.preferred_name != "3":
|
||||||
if call in first:
|
if call in first:
|
||||||
where = first.index(call)
|
where = first.index(call)
|
||||||
return '{before}\\pref{{{call}}}{after}'.format(
|
return '{before}\\pref{{{call}}}{after}'.format(
|
||||||
before=escape(first[:where]),
|
before=escape(first[:where]),
|
||||||
call=escape(call),
|
call=escape(call),
|
||||||
after=escape(first[where+len(call):]))
|
after=escape(first[where+len(call):]))
|
||||||
else:
|
elif self.preferred_name in ("1", "3"):
|
||||||
# ignore erroneous call name
|
return '\\pref{{{}}}'.format(escape(first))
|
||||||
return escape(first)
|
elif self.preferred_name == "2":
|
||||||
else:
|
|
||||||
return escape(first)
|
return escape(first)
|
||||||
|
|
||||||
def format_iso(self, date_tuple, calendar):
|
def format_iso(self, date_tuple, calendar):
|
||||||
|
@ -55,6 +55,53 @@ class TreeReportDialog(GraphReportDialog):
|
|||||||
"""
|
"""
|
||||||
return treedoc.TreeOptions()
|
return treedoc.TreeOptions()
|
||||||
|
|
||||||
|
def doc_type_changed(self, obj):
|
||||||
|
"""
|
||||||
|
This routine is called when the user selects a new file
|
||||||
|
format for the report. It adjusts the various dialog sections
|
||||||
|
to reflect the appropriate values for the currently selected
|
||||||
|
file format. For example, a HTML document doesn't need any
|
||||||
|
paper size/orientation options, but it does need a template
|
||||||
|
file. Those changes are made here.
|
||||||
|
"""
|
||||||
|
GraphReportDialog.doc_type_changed(self, obj)
|
||||||
|
|
||||||
|
output_format_str = obj.get_clname()
|
||||||
|
if output_format_str in ['graph']:
|
||||||
|
#Node Options
|
||||||
|
self._goptions.detail.set_available(False)
|
||||||
|
self._goptions.marriage.set_available(False)
|
||||||
|
self._goptions.nodesize.set_available(False)
|
||||||
|
self._goptions.levelsize.set_available(False)
|
||||||
|
self._goptions.nodecolor.set_available(False)
|
||||||
|
|
||||||
|
#Tree Options
|
||||||
|
self._goptions.timeflow.set_available(False)
|
||||||
|
self._goptions.edges.set_available(False)
|
||||||
|
self._goptions.leveldist.set_available(False)
|
||||||
|
|
||||||
|
#Note
|
||||||
|
self._goptions.note.set_available(False)
|
||||||
|
self._goptions.noteloc.set_available(False)
|
||||||
|
self._goptions.notesize.set_available(False)
|
||||||
|
else:
|
||||||
|
#Node Options
|
||||||
|
self._goptions.detail.set_available(True)
|
||||||
|
self._goptions.marriage.set_available(True)
|
||||||
|
self._goptions.nodesize.set_available(True)
|
||||||
|
self._goptions.levelsize.set_available(True)
|
||||||
|
self._goptions.nodecolor.set_available(True)
|
||||||
|
|
||||||
|
#Tree Options
|
||||||
|
self._goptions.timeflow.set_available(True)
|
||||||
|
self._goptions.edges.set_available(True)
|
||||||
|
self._goptions.leveldist.set_available(True)
|
||||||
|
|
||||||
|
#Note
|
||||||
|
self._goptions.note.set_available(True)
|
||||||
|
self._goptions.noteloc.set_available(True)
|
||||||
|
self._goptions.notesize.set_available(True)
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# TreeFormatComboBox
|
# TreeFormatComboBox
|
||||||
|
Loading…
Reference in New Issue
Block a user