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: r12596
This commit is contained in:
parent
ed13f340d5
commit
cc38a53add
@ -3,6 +3,7 @@
|
||||
#
|
||||
# Copyright (C) 2007-2008 Brian G. Matherly
|
||||
# Copyright (C) 2007-2009 Stephane Charette
|
||||
# Copyright (C) 2009 Gary Burton
|
||||
#
|
||||
# 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
|
||||
@ -52,7 +53,8 @@ import Config
|
||||
from ReportBase import CATEGORY_GRAPHVIZ
|
||||
from _ReportDialog import ReportDialog
|
||||
from _PaperMenu import PaperFrame
|
||||
from gen.plug.menu import NumberOption, TextOption, EnumeratedListOption
|
||||
from gen.plug.menu import NumberOption, TextOption, EnumeratedListOption, \
|
||||
BooleanOption
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
@ -158,19 +160,20 @@ class GVDocBase(BaseDoc, GVDoc):
|
||||
|
||||
menu = options.menu
|
||||
|
||||
self.dpi = menu.get_option_by_name('dpi').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.hpages = menu.get_option_by_name('h_pages').get_value()
|
||||
self.nodesep = menu.get_option_by_name('nodesep').get_value()
|
||||
self.noteloc = menu.get_option_by_name('noteloc').get_value()
|
||||
self.notesize = menu.get_option_by_name('notesize').get_value()
|
||||
self.note = menu.get_option_by_name('note').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.ranksep = menu.get_option_by_name('ranksep').get_value()
|
||||
self.ratio = menu.get_option_by_name('ratio').get_value()
|
||||
self.vpages = menu.get_option_by_name('v_pages').get_value()
|
||||
self.dpi = menu.get_option_by_name('dpi').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.hpages = menu.get_option_by_name('h_pages').get_value()
|
||||
self.nodesep = menu.get_option_by_name('nodesep').get_value()
|
||||
self.noteloc = menu.get_option_by_name('noteloc').get_value()
|
||||
self.notesize = menu.get_option_by_name('notesize').get_value()
|
||||
self.note = menu.get_option_by_name('note').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.ranksep = menu.get_option_by_name('ranksep').get_value()
|
||||
self.ratio = menu.get_option_by_name('ratio').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()
|
||||
|
||||
@ -1019,6 +1022,13 @@ class GraphvizReportDialog(ReportDialog):
|
||||
"between columns."))
|
||||
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")
|
||||
################################
|
||||
|
@ -218,13 +218,6 @@ class FamilyLinesOptions(MenuReportOptions):
|
||||
'between women and men.'))
|
||||
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.set_help(_('Whether to include dates for people ' \
|
||||
'and families.'))
|
||||
|
@ -125,6 +125,7 @@ class RelGraphReport(Report):
|
||||
self.show_families = menu.get_option_by_name('showfamily').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_subgraphs = menu.get_option_by_name('usesubgraphs').get_value()
|
||||
|
||||
self.colorize = menu.get_option_by_name('color').get_value()
|
||||
color_males = menu.get_option_by_name('colormales').get_value()
|
||||
@ -243,48 +244,65 @@ class RelGraphReport(Report):
|
||||
if self.show_families:
|
||||
family_list = person.get_family_handle_list()
|
||||
for fam_handle in family_list:
|
||||
fam = self.database.get_family_from_handle(fam_handle)
|
||||
fam_id = fam.get_gramps_id()
|
||||
family = self.database.get_family_from_handle(fam_handle)
|
||||
fam_id = family.get_gramps_id()
|
||||
if fam_handle not in families_done:
|
||||
families_done[fam_handle] = 1
|
||||
label = ""
|
||||
for event_ref in fam.get_event_ref_list():
|
||||
event = self.database.get_event_from_handle(
|
||||
event_ref.ref)
|
||||
if event.type == gen.lib.EventType.MARRIAGE:
|
||||
label = self.get_event_string(event)
|
||||
break
|
||||
if self.includeid:
|
||||
label = "%s (%s)" % (label, fam_id)
|
||||
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)
|
||||
self.__add_family(fam_handle)
|
||||
# If subgraphs are not chosen then each parent is linked
|
||||
# separately to the family. This gives Graphviz greater
|
||||
# control over the layout of the whole graph but
|
||||
# may leave spouses not positioned together.
|
||||
if not self.use_subgraphs:
|
||||
self.doc.add_link(fam_id, p_id, "",
|
||||
self.arrowheadstyle,
|
||||
self.arrowtailstyle)
|
||||
|
||||
f_handle = fam.get_father_handle()
|
||||
m_handle = fam.get_mother_handle()
|
||||
self.doc.start_subgraph(fam_id)
|
||||
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 __add_family(self, fam_handle):
|
||||
"""Add a node for a family and optionally link the spouses to it"""
|
||||
fam = self.database.get_family_from_handle(fam_handle)
|
||||
fam_id = fam.get_gramps_id()
|
||||
|
||||
label = ""
|
||||
for event_ref in fam.get_event_ref_list():
|
||||
event = self.database.get_event_from_handle(event_ref.ref)
|
||||
if event.type == gen.lib.EventType.MARRIAGE:
|
||||
label = self.get_event_string(event)
|
||||
break
|
||||
if self.includeid:
|
||||
label = "%s (%s)" % (label, fam_id)
|
||||
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)
|
||||
|
||||
# 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):
|
||||
"return gender specific person style"
|
||||
|
Loading…
Reference in New Issue
Block a user