Bug 2950. Made subgraph optional for Relationship Graph as discussed in bug report. Moved the option to GraphvizReportDialog and refactored FamilyLines to use it.
svn: r12595
This commit is contained in:
parent
1157557105
commit
ba01db947b
@ -3,6 +3,7 @@
|
|||||||
#
|
#
|
||||||
# Copyright (C) 2007-2008 Brian G. Matherly
|
# Copyright (C) 2007-2008 Brian G. Matherly
|
||||||
# Copyright (C) 2007-2009 Stephane Charette
|
# Copyright (C) 2007-2009 Stephane Charette
|
||||||
|
# Copyright (C) 2009 Gary Burton
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -53,7 +54,8 @@ import Config
|
|||||||
from ReportBase import CATEGORY_GRAPHVIZ
|
from ReportBase import CATEGORY_GRAPHVIZ
|
||||||
from _ReportDialog import ReportDialog
|
from _ReportDialog import ReportDialog
|
||||||
from _PaperMenu import PaperFrame
|
from _PaperMenu import PaperFrame
|
||||||
from gen.plug.menu import NumberOption, TextOption, EnumeratedListOption
|
from gen.plug.menu import NumberOption, TextOption, EnumeratedListOption, \
|
||||||
|
BooleanOption
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -159,19 +161,20 @@ class GVDocBase(BaseDoc.BaseDoc, BaseDoc.GVDoc):
|
|||||||
|
|
||||||
menu = options.menu
|
menu = options.menu
|
||||||
|
|
||||||
self.dpi = menu.get_option_by_name('dpi').get_value()
|
self.dpi = menu.get_option_by_name('dpi').get_value()
|
||||||
self.fontfamily = menu.get_option_by_name('font_family').get_value()
|
self.fontfamily = menu.get_option_by_name('font_family').get_value()
|
||||||
self.fontsize = menu.get_option_by_name('font_size').get_value()
|
self.fontsize = menu.get_option_by_name('font_size').get_value()
|
||||||
self.hpages = menu.get_option_by_name('h_pages').get_value()
|
self.hpages = menu.get_option_by_name('h_pages').get_value()
|
||||||
self.nodesep = menu.get_option_by_name('nodesep').get_value()
|
self.nodesep = menu.get_option_by_name('nodesep').get_value()
|
||||||
self.noteloc = menu.get_option_by_name('noteloc').get_value()
|
self.noteloc = menu.get_option_by_name('noteloc').get_value()
|
||||||
self.notesize = menu.get_option_by_name('notesize').get_value()
|
self.notesize = menu.get_option_by_name('notesize').get_value()
|
||||||
self.note = menu.get_option_by_name('note').get_value()
|
self.note = menu.get_option_by_name('note').get_value()
|
||||||
self.pagedir = menu.get_option_by_name('page_dir').get_value()
|
self.pagedir = menu.get_option_by_name('page_dir').get_value()
|
||||||
self.rankdir = menu.get_option_by_name('rank_dir').get_value()
|
self.rankdir = menu.get_option_by_name('rank_dir').get_value()
|
||||||
self.ranksep = menu.get_option_by_name('ranksep').get_value()
|
self.ranksep = menu.get_option_by_name('ranksep').get_value()
|
||||||
self.ratio = menu.get_option_by_name('ratio').get_value()
|
self.ratio = menu.get_option_by_name('ratio').get_value()
|
||||||
self.vpages = menu.get_option_by_name('v_pages').get_value()
|
self.vpages = menu.get_option_by_name('v_pages').get_value()
|
||||||
|
self.usesubgraphs = menu.get_option_by_name('usesubgraphs').get_value()
|
||||||
|
|
||||||
paper_size = paper_style.get_size()
|
paper_size = paper_style.get_size()
|
||||||
|
|
||||||
@ -1035,6 +1038,13 @@ class GraphvizReportDialog(ReportDialog):
|
|||||||
"between columns."))
|
"between columns."))
|
||||||
self.options.add_menu_option(category, "ranksep", ranksep)
|
self.options.add_menu_option(category, "ranksep", ranksep)
|
||||||
|
|
||||||
|
use_subgraphs = BooleanOption(_('Use subgraphs'), True)
|
||||||
|
use_subgraphs.set_help(_("Subgraphs can help GraphViz position "
|
||||||
|
"spouses together, but with non-trivial "
|
||||||
|
"graphs will result in longer lines and "
|
||||||
|
"larger graphs."))
|
||||||
|
self.options.add_menu_option(category, "usesubgraphs", use_subgraphs)
|
||||||
|
|
||||||
################################
|
################################
|
||||||
category = _("Note")
|
category = _("Note")
|
||||||
################################
|
################################
|
||||||
|
@ -218,13 +218,6 @@ class FamilyLinesOptions(MenuReportOptions):
|
|||||||
'between women and men.'))
|
'between women and men.'))
|
||||||
menu.add_option(category, "useroundedcorners", use_roundedcorners)
|
menu.add_option(category, "useroundedcorners", use_roundedcorners)
|
||||||
|
|
||||||
use_subgraphs = BooleanOption(_('Use subgraphs'), False)
|
|
||||||
use_subgraphs.set_help(_("Subgraphs can help GraphViz position "
|
|
||||||
"certain linked nodes closer together, "
|
|
||||||
"but with non-trivial graphs will result "
|
|
||||||
"in longer lines and larger graphs."))
|
|
||||||
menu.add_option(category, "usesubgraphs", use_subgraphs)
|
|
||||||
|
|
||||||
self.include_dates = BooleanOption(_('Include dates'), True)
|
self.include_dates = BooleanOption(_('Include dates'), True)
|
||||||
self.include_dates.set_help(_('Whether to include dates for people ' \
|
self.include_dates.set_help(_('Whether to include dates for people ' \
|
||||||
'and families.'))
|
'and families.'))
|
||||||
|
@ -125,6 +125,7 @@ class RelGraphReport(Report):
|
|||||||
self.show_families = menu.get_option_by_name('showfamily').get_value()
|
self.show_families = menu.get_option_by_name('showfamily').get_value()
|
||||||
self.just_years = menu.get_option_by_name('justyears').get_value()
|
self.just_years = menu.get_option_by_name('justyears').get_value()
|
||||||
self.use_place = menu.get_option_by_name('use_place').get_value()
|
self.use_place = menu.get_option_by_name('use_place').get_value()
|
||||||
|
self.use_subgraphs = menu.get_option_by_name('usesubgraphs').get_value()
|
||||||
|
|
||||||
self.colorize = menu.get_option_by_name('color').get_value()
|
self.colorize = menu.get_option_by_name('color').get_value()
|
||||||
color_males = menu.get_option_by_name('colormales').get_value()
|
color_males = menu.get_option_by_name('colormales').get_value()
|
||||||
@ -243,48 +244,65 @@ class RelGraphReport(Report):
|
|||||||
if self.show_families:
|
if self.show_families:
|
||||||
family_list = person.get_family_handle_list()
|
family_list = person.get_family_handle_list()
|
||||||
for fam_handle in family_list:
|
for fam_handle in family_list:
|
||||||
fam = self.database.get_family_from_handle(fam_handle)
|
family = self.database.get_family_from_handle(fam_handle)
|
||||||
fam_id = fam.get_gramps_id()
|
fam_id = family.get_gramps_id()
|
||||||
if fam_handle not in families_done:
|
if fam_handle not in families_done:
|
||||||
families_done[fam_handle] = 1
|
families_done[fam_handle] = 1
|
||||||
label = ""
|
self.__add_family(fam_handle)
|
||||||
for event_ref in fam.get_event_ref_list():
|
# If subgraphs are not chosen then each parent is linked
|
||||||
event = self.database.get_event_from_handle(
|
# separately to the family. This gives Graphviz greater
|
||||||
event_ref.ref)
|
# control over the layout of the whole graph but
|
||||||
if event.type == gen.lib.EventType.MARRIAGE:
|
# may leave spouses not positioned together.
|
||||||
label = self.get_event_string(event)
|
if not self.use_subgraphs:
|
||||||
break
|
self.doc.add_link(fam_id, p_id, "",
|
||||||
if self.includeid:
|
self.arrowheadstyle,
|
||||||
label = "%s (%s)" % (label, fam_id)
|
self.arrowtailstyle)
|
||||||
color = ""
|
|
||||||
fill = ""
|
|
||||||
style = "solid"
|
|
||||||
if self.colorize == 'colored':
|
|
||||||
color = self.colors['family']
|
|
||||||
elif self.colorize == 'filled':
|
|
||||||
fill = self.colors['family']
|
|
||||||
style = "filled"
|
|
||||||
self.doc.add_node(fam_id, label, "ellipse",
|
|
||||||
color, style, fill)
|
|
||||||
|
|
||||||
f_handle = fam.get_father_handle()
|
def __add_family(self, fam_handle):
|
||||||
m_handle = fam.get_mother_handle()
|
"""Add a node for a family and optionally link the spouses to it"""
|
||||||
self.doc.start_subgraph(fam_id)
|
fam = self.database.get_family_from_handle(fam_handle)
|
||||||
if f_handle:
|
fam_id = fam.get_gramps_id()
|
||||||
father = \
|
|
||||||
self.database.get_person_from_handle(f_handle)
|
label = ""
|
||||||
self.doc.add_link(fam_id,
|
for event_ref in fam.get_event_ref_list():
|
||||||
father.get_gramps_id(), "",
|
event = self.database.get_event_from_handle(event_ref.ref)
|
||||||
self.arrowheadstyle,
|
if event.type == gen.lib.EventType.MARRIAGE:
|
||||||
self.arrowtailstyle )
|
label = self.get_event_string(event)
|
||||||
if m_handle:
|
break
|
||||||
mother = \
|
if self.includeid:
|
||||||
self.database.get_person_from_handle(m_handle)
|
label = "%s (%s)" % (label, fam_id)
|
||||||
self.doc.add_link(fam_id,
|
color = ""
|
||||||
mother.get_gramps_id(), "",
|
fill = ""
|
||||||
self.arrowheadstyle,
|
style = "solid"
|
||||||
self.arrowtailstyle )
|
if self.colorize == 'colored':
|
||||||
self.doc.end_subgraph()
|
color = self.colors['family']
|
||||||
|
elif self.colorize == 'filled':
|
||||||
|
fill = self.colors['family']
|
||||||
|
style = "filled"
|
||||||
|
self.doc.add_node(fam_id, label, "ellipse", color, style, fill)
|
||||||
|
|
||||||
|
# If subgraphs are used then we add both spouses here and Graphviz
|
||||||
|
# will attempt to position both spouses closely together.
|
||||||
|
# TODO: A person who is a parent in more than one family may only be
|
||||||
|
# positioned next to one of their spouses. The code currently
|
||||||
|
# does not take into account multiple spouses.
|
||||||
|
if self.use_subgraphs:
|
||||||
|
self.doc.start_subgraph(fam_id)
|
||||||
|
f_handle = fam.get_father_handle()
|
||||||
|
m_handle = fam.get_mother_handle()
|
||||||
|
if f_handle:
|
||||||
|
father = self.database.get_person_from_handle(f_handle)
|
||||||
|
self.doc.add_link(fam_id,
|
||||||
|
father.get_gramps_id(), "",
|
||||||
|
self.arrowheadstyle,
|
||||||
|
self.arrowtailstyle)
|
||||||
|
if m_handle:
|
||||||
|
mother = self.database.get_person_from_handle(m_handle)
|
||||||
|
self.doc.add_link(fam_id,
|
||||||
|
mother.get_gramps_id(), "",
|
||||||
|
self.arrowheadstyle,
|
||||||
|
self.arrowtailstyle)
|
||||||
|
self.doc.end_subgraph()
|
||||||
|
|
||||||
def get_gender_style(self, person):
|
def get_gender_style(self, person):
|
||||||
"return gender specific person style"
|
"return gender specific person style"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user