From fc6725852a9de26c9d14862ce29ad2ecfba6ebca Mon Sep 17 00:00:00 2001 From: Paul Franklin Date: Mon, 1 Jul 2013 16:59:55 +0000 Subject: [PATCH] 6818: Enable Relationships support on RelationshipGraph (GraphViz) svn: r22638 --- gramps/plugins/graph/gvrelgraph.py | 68 ++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/gramps/plugins/graph/gvrelgraph.py b/gramps/plugins/graph/gvrelgraph.py index 4f6bce270..e1dce2431 100644 --- a/gramps/plugins/graph/gvrelgraph.py +++ b/gramps/plugins/graph/gvrelgraph.py @@ -12,6 +12,7 @@ # Contribution 2009 by Bob Ham # Copyright (C) 2010 Jakim Friant # Copyright (C) 2013 Paul Franklin +# Copyright (C) 2013 Fedir Zinchuk # # 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 @@ -61,6 +62,7 @@ from gramps.gen.datehandler import get_date from gramps.gen.lib import ChildRefType, EventRoleType, EventType from gramps.gen.utils.file import media_path_full, find_file from gramps.gui.thumbnails import get_thumbnail_path +from gramps.gen.relationship import get_relationship_calculator from gramps.gen.utils.db import get_birth_or_fallback, get_death_or_fallback #------------------------------------------------------------------------ @@ -169,7 +171,20 @@ class RelGraphReport(Report): if name_format != 0: self._name_display.set_default_format(name_format) - self.set_locale(menu.get_option_by_name('trans').get_value()) + lang = menu.get_option_by_name('trans').get_value() + self._locale = self.set_locale(lang) + + self.center_person = database.get_person_from_gramps_id( + get_value('pid')) + self.increlname = get_value('increlname') + if self.increlname : + self.rel_calc = get_relationship_calculator(reinit=True, + clocale=self._locale) + + if __debug__: + self.advrelinfo = get_value('advrelinfo') + else: + self.advrelinfo = False def write_report(self): self.person_handles = self._filter.apply(self.database, @@ -340,6 +355,9 @@ class RelGraphReport(Report): elif gender == person.UNKNOWN: shape = "hexagon" + if person == self.center_person and self.increlname: + shape = "octagon" + if self.colorize == 'colored': if gender == person.MALE: color = self.colors['male'] @@ -423,6 +441,22 @@ class RelGraphReport(Report): label += '%s' % death label += ')' + if self.increlname and self.center_person != person: + # display relationship info + if self.advrelinfo: + (relationship, Ga, Gb) = self.rel_calc.get_one_relationship( + self.database, self.center_person, person, + extra_info=True, olocale=self._locale) + if relationship: + label += "%s(%s Ga=%d Gb=%d)" % (lineDelimiter, + relationship, Ga, Gb) + else: + relationship = self.rel_calc.get_one_relationship( + self.database, self.center_person, person, + olocale=self._locale) + if relationship: + label += "%s(%s)" % (lineDelimiter, relationship) + # see if we have a table that needs to be terminated if self.bUseHtmlOutput: label += '' @@ -483,6 +517,8 @@ class RelGraphOptions(MenuReportOptions): def __init__(self, name, dbase): self.__pid = None self.__filter = None + self.__show_relships = None + self.__show_GaGb = None self.__include_images = None self.__image_on_side = None self.__db = dbase @@ -500,8 +536,8 @@ class RelGraphOptions(MenuReportOptions): add_option("filter", self.__filter) self.__filter.connect('value-changed', self.__filter_changed) - self.__pid = PersonOption(_("Filter Person")) - self.__pid.set_help(_("The center person for the filter")) + self.__pid = PersonOption(_("Center Person")) + self.__pid.set_help(_("The center person for the report")) add_option("pid", self.__pid) self.__pid.connect('value-changed', self.__update_filters) @@ -540,6 +576,22 @@ class RelGraphOptions(MenuReportOptions): incid.set_help(_("Include individual and family IDs.")) add_option("incid", incid) + self.__show_relships = BooleanOption( + _("Include relationship to center person"), False) + self.__show_relships.set_help(_("Whether to show every " + "person's relationship to the center person")) + add_option("increlname", self.__show_relships) + self.__show_relships.connect('value-changed', + self.__show_relships_changed) + + if __debug__: + self.__show_GaGb = BooleanOption(_("Include relationship " + "debugging numbers also"), + False) + self.__show_GaGb.set_help(_("Whether to include 'Ga' and 'Gb' " + "also, to debug the relationship calculator")) + add_option("advrelinfo", self.__show_GaGb) + self.__include_images = BooleanOption( _('Include thumbnail images of people'), False) self.__include_images.set_help( @@ -638,6 +690,8 @@ class RelGraphOptions(MenuReportOptions): if filter_value in [1, 2, 3, 4]: # Filters 1, 2, 3 and 4 rely on the center person self.__pid.set_available(True) + elif self.__show_relships and self.__show_relships.get_value(): + self.__pid.set_available(True) else: # The rest don't self.__pid.set_available(False) @@ -648,3 +702,11 @@ class RelGraphOptions(MenuReportOptions): image location option unavailable. """ self.__image_on_side.set_available(self.__include_images.get_value()) + + def __show_relships_changed(self): + """ + Enable/disable menu items if relationships are required + """ + if self.__show_GaGb: + self.__show_GaGb.set_available(self.__show_relships.get_value()) + self.__filter_changed()