improve Statistics Chart pylint score from 6.75 to 8.94
This commit is contained in:
		@@ -6,7 +6,7 @@
 | 
			
		||||
# Copyright (C) 2007-2008 Brian G. Matherly
 | 
			
		||||
# Copyright (C) 2008      Peter Landgren
 | 
			
		||||
# Copyright (C) 2010      Jakim Friant
 | 
			
		||||
# Copyright (C) 2012-2015 Paul Franklin
 | 
			
		||||
# Copyright (C) 2012-2016 Paul Franklin
 | 
			
		||||
#
 | 
			
		||||
# 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
 | 
			
		||||
@@ -65,14 +65,14 @@ from gramps.gen.display.place import displayer as place_displayer
 | 
			
		||||
# Private Functions
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------
 | 
			
		||||
def draw_wedge(doc,  style,  centerx,  centery,  radius,  start_angle,
 | 
			
		||||
               end_angle,  short_radius=0):
 | 
			
		||||
def draw_wedge(doc, style, centerx, centery, radius, start_angle,
 | 
			
		||||
               end_angle, short_radius=0):
 | 
			
		||||
    from math import pi, cos, sin
 | 
			
		||||
 | 
			
		||||
    while end_angle < start_angle:
 | 
			
		||||
        end_angle += 360
 | 
			
		||||
 | 
			
		||||
    p = []
 | 
			
		||||
    path = []
 | 
			
		||||
 | 
			
		||||
    degreestoradians = pi / 180.0
 | 
			
		||||
    radiansdelta = degreestoradians / 2
 | 
			
		||||
@@ -84,39 +84,39 @@ def draw_wedge(doc,  style,  centerx,  centery,  radius,  start_angle,
 | 
			
		||||
 | 
			
		||||
    if short_radius == 0:
 | 
			
		||||
        if (end_angle - start_angle) != 360:
 | 
			
		||||
            p.append((centerx, centery))
 | 
			
		||||
            path.append((centerx, centery))
 | 
			
		||||
    else:
 | 
			
		||||
        origx = (centerx + cos(angle) * short_radius)
 | 
			
		||||
        origy = (centery + sin(angle) * short_radius)
 | 
			
		||||
        p.append((origx, origy))
 | 
			
		||||
        path.append((origx, origy))
 | 
			
		||||
 | 
			
		||||
    while angle < eangle:
 | 
			
		||||
        x = centerx + cos(angle) * radius
 | 
			
		||||
        y = centery + sin(angle) * radius
 | 
			
		||||
        p.append((x, y))
 | 
			
		||||
        path.append((x, y))
 | 
			
		||||
        angle = angle + radiansdelta
 | 
			
		||||
    x = centerx + cos(eangle) * radius
 | 
			
		||||
    y = centery + sin(eangle) * radius
 | 
			
		||||
    p.append((x, y))
 | 
			
		||||
    path.append((x, y))
 | 
			
		||||
 | 
			
		||||
    if short_radius:
 | 
			
		||||
        x = centerx + cos(eangle) * short_radius
 | 
			
		||||
        y = centery + sin(eangle) * short_radius
 | 
			
		||||
        p.append((x, y))
 | 
			
		||||
        path.append((x, y))
 | 
			
		||||
 | 
			
		||||
        angle = eangle
 | 
			
		||||
        while angle >= sangle:
 | 
			
		||||
            x = centerx + cos(angle) * short_radius
 | 
			
		||||
            y = centery + sin(angle) * short_radius
 | 
			
		||||
            p.append((x, y))
 | 
			
		||||
            path.append((x, y))
 | 
			
		||||
            angle -= radiansdelta
 | 
			
		||||
    doc.draw_path(style, p)
 | 
			
		||||
    doc.draw_path(style, path)
 | 
			
		||||
 | 
			
		||||
    delta = (eangle - sangle) / 2.0
 | 
			
		||||
    rad = short_radius + (radius - short_radius) / 2.0
 | 
			
		||||
 | 
			
		||||
    return ( (centerx + cos(sangle + delta) * rad),
 | 
			
		||||
             (centery + sin(sangle + delta) * rad))
 | 
			
		||||
    return ((centerx + cos(sangle + delta) * rad),
 | 
			
		||||
            (centery + sin(sangle + delta) * rad))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def draw_pie_chart(doc, center_x, center_y, radius, data, start=0):
 | 
			
		||||
@@ -153,7 +153,8 @@ def draw_pie_chart(doc, center_x, center_y, radius, data, start=0):
 | 
			
		||||
 | 
			
		||||
    for item in data:
 | 
			
		||||
        incr = 360.0*(item[1]/total)
 | 
			
		||||
        draw_wedge(doc, item[0], center_x, center_y, radius, start, start + incr)
 | 
			
		||||
        draw_wedge(doc, item[0], center_x, center_y, radius,
 | 
			
		||||
                   start, start + incr)
 | 
			
		||||
        start += incr
 | 
			
		||||
 | 
			
		||||
def draw_legend(doc, start_x, start_y, data, title, label_style):
 | 
			
		||||
@@ -182,30 +183,33 @@ def draw_legend(doc, start_x, start_y, data, title, label_style):
 | 
			
		||||
        pstyle_name = gstyle.get_paragraph_style()
 | 
			
		||||
        pstyle = style_sheet.get_paragraph_style(pstyle_name)
 | 
			
		||||
        size = ReportUtils.pt2cm(pstyle.get_font().get_size())
 | 
			
		||||
        doc.draw_text(label_style, title, start_x + (3*size), start_y - (size*0.25))
 | 
			
		||||
        doc.draw_text(label_style, title,
 | 
			
		||||
                      start_x + (3*size), start_y - (size*0.25))
 | 
			
		||||
        start_y += size * 1.3
 | 
			
		||||
 | 
			
		||||
    for (format, size, legend) in data:
 | 
			
		||||
        gstyle = style_sheet.get_draw_style(format)
 | 
			
		||||
    for (sformat, size, legend) in data:
 | 
			
		||||
        gstyle = style_sheet.get_draw_style(sformat)
 | 
			
		||||
        pstyle_name = gstyle.get_paragraph_style()
 | 
			
		||||
        pstyle = style_sheet.get_paragraph_style(pstyle_name)
 | 
			
		||||
        size = ReportUtils.pt2cm(pstyle.get_font().get_size())
 | 
			
		||||
        doc.draw_box(format, "", start_x, start_y, (2*size), size)
 | 
			
		||||
        doc.draw_text(label_style, legend, start_x + (3*size), start_y - (size*0.25))
 | 
			
		||||
        doc.draw_box(sformat, "", start_x, start_y, (2*size), size)
 | 
			
		||||
        doc.draw_text(label_style, legend,
 | 
			
		||||
                      start_x + (3*size), start_y - (size*0.25))
 | 
			
		||||
        start_y += size * 1.3
 | 
			
		||||
 | 
			
		||||
_t = time.localtime(time.time())
 | 
			
		||||
_TODAY = parser.parse("%04d-%02d-%02d" % _t[:3])
 | 
			
		||||
 | 
			
		||||
def estimate_age(db, person, end_handle=None, start_handle=None, today=_TODAY):
 | 
			
		||||
def estimate_age(dbase, person,
 | 
			
		||||
                 end_handle=None, start_handle=None, today=_TODAY):
 | 
			
		||||
    """
 | 
			
		||||
    Estimates the age of a person based off the birth and death
 | 
			
		||||
    dates of the person. A tuple containing the estimated upper
 | 
			
		||||
    and lower bounds of the person's age is returned. If either
 | 
			
		||||
    the birth or death date is missing, a (-1, -1) is returned.
 | 
			
		||||
 | 
			
		||||
    @param db: GRAMPS database to which the Person object belongs
 | 
			
		||||
    @type db: DbBase
 | 
			
		||||
    @param dbase: GRAMPS database to which the Person object belongs
 | 
			
		||||
    @type dbase: DbBase
 | 
			
		||||
    @param person: Person object to calculate the age of
 | 
			
		||||
    @type person: Person
 | 
			
		||||
    @param end_handle: Determines the event handle that determines
 | 
			
		||||
@@ -240,9 +244,9 @@ def estimate_age(db, person, end_handle=None, start_handle=None, today=_TODAY):
 | 
			
		||||
    if not bhandle:
 | 
			
		||||
        return (-1, -1)
 | 
			
		||||
 | 
			
		||||
    bdata = db.get_event_from_handle(bhandle).get_date_object()
 | 
			
		||||
    bdata = dbase.get_event_from_handle(bhandle).get_date_object()
 | 
			
		||||
    if dhandle:
 | 
			
		||||
        ddata = db.get_event_from_handle(dhandle).get_date_object()
 | 
			
		||||
        ddata = dbase.get_event_from_handle(dhandle).get_date_object()
 | 
			
		||||
    else:
 | 
			
		||||
        if today is not None:
 | 
			
		||||
            ddata = today
 | 
			
		||||
@@ -258,10 +262,10 @@ def estimate_age(db, person, end_handle=None, start_handle=None, today=_TODAY):
 | 
			
		||||
        return (-1, -1)
 | 
			
		||||
 | 
			
		||||
    bstart = bdata.get_start_date()
 | 
			
		||||
    bstop  = bdata.get_stop_date()
 | 
			
		||||
    bstop = bdata.get_stop_date()
 | 
			
		||||
 | 
			
		||||
    dstart = ddata.get_start_date()
 | 
			
		||||
    dstop  = ddata.get_stop_date()
 | 
			
		||||
    dstop = ddata.get_stop_date()
 | 
			
		||||
 | 
			
		||||
    def _calc_diff(low, high):
 | 
			
		||||
        if (low[1], low[0]) > (high[1], high[0]):
 | 
			
		||||
@@ -331,9 +335,9 @@ class Extract(object):
 | 
			
		||||
            'data_gender': ("Gender", _T_("Gender"),
 | 
			
		||||
                            self.get_person, self.get_gender),
 | 
			
		||||
            'data_byear':  ("Birth year", _T_("Birth year"),
 | 
			
		||||
                             self.get_birth, self.get_year),
 | 
			
		||||
                            self.get_birth, self.get_year),
 | 
			
		||||
            'data_dyear':  ("Death year", _T_("Death year"),
 | 
			
		||||
                             self.get_death, self.get_year),
 | 
			
		||||
                            self.get_death, self.get_year),
 | 
			
		||||
            'data_bmonth': ("Birth month", _T_("Birth month"),
 | 
			
		||||
                            self.get_birth, self.get_month),
 | 
			
		||||
            'data_dmonth': ("Death month", _T_("Death month"),
 | 
			
		||||
@@ -341,25 +345,30 @@ class Extract(object):
 | 
			
		||||
            'data_bplace': ("Birth place", _T_("Birth place"),
 | 
			
		||||
                            self.get_birth, self.get_place),
 | 
			
		||||
            'data_dplace': ("Death place", _T_("Death place"),
 | 
			
		||||
                             self.get_death, self.get_place),
 | 
			
		||||
                            self.get_death, self.get_place),
 | 
			
		||||
            'data_mplace': ("Marriage place", _T_("Marriage place"),
 | 
			
		||||
                             self.get_marriage_handles, self.get_places),
 | 
			
		||||
            'data_mcount': ("Number of relationships", _T_("Number of relationships"),
 | 
			
		||||
                             self.get_family_handles, self.get_handle_count),
 | 
			
		||||
            'data_fchild': ("Age when first child born", _T_("Age when first child born"),
 | 
			
		||||
                             self.get_child_handles, self.get_first_child_age),
 | 
			
		||||
            'data_lchild': ("Age when last child born", _T_("Age when last child born"),
 | 
			
		||||
                             self.get_child_handles, self.get_last_child_age),
 | 
			
		||||
                            self.get_marriage_handles, self.get_places),
 | 
			
		||||
            'data_mcount': ("Number of relationships",
 | 
			
		||||
                            _T_("Number of relationships"),
 | 
			
		||||
                            self.get_any_family_handles,
 | 
			
		||||
                            self.get_handle_count),
 | 
			
		||||
            'data_fchild': ("Age when first child born",
 | 
			
		||||
                            _T_("Age when first child born"),
 | 
			
		||||
                            self.get_child_handles,
 | 
			
		||||
                            self.get_first_child_age),
 | 
			
		||||
            'data_lchild': ("Age when last child born",
 | 
			
		||||
                            _T_("Age when last child born"),
 | 
			
		||||
                            self.get_child_handles, self.get_last_child_age),
 | 
			
		||||
            'data_ccount': ("Number of children", _T_("Number of children"),
 | 
			
		||||
                             self.get_child_handles, self.get_handle_count),
 | 
			
		||||
                            self.get_child_handles, self.get_handle_count),
 | 
			
		||||
            'data_mage':   ("Age at marriage", _T_("Age at marriage"),
 | 
			
		||||
                             self.get_marriage_handles, self.get_event_ages),
 | 
			
		||||
                            self.get_marriage_handles, self.get_event_ages),
 | 
			
		||||
            'data_dage':   ("Age at death", _T_("Age at death"),
 | 
			
		||||
                             self.get_person, self.get_death_age),
 | 
			
		||||
                            self.get_person, self.get_death_age),
 | 
			
		||||
            'data_age':    ("Age", _T_("Age"),
 | 
			
		||||
                             self.get_person, self.get_person_age),
 | 
			
		||||
                            self.get_person, self.get_person_age),
 | 
			
		||||
            'data_etypes': ("Event type", _T_("Event type"),
 | 
			
		||||
                             self.get_event_handles, self.get_event_type)
 | 
			
		||||
                            self.get_event_handles, self.get_event_type)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    # ----------------- data extraction methods --------------------
 | 
			
		||||
@@ -473,8 +482,8 @@ class Extract(object):
 | 
			
		||||
        person, event_handles = data
 | 
			
		||||
        for event_handle in event_handles:
 | 
			
		||||
            event = self.db.get_event_from_handle(event_handle)
 | 
			
		||||
            evtType = self._(self._get_type(event.get_type()))
 | 
			
		||||
            types.append(evtType)
 | 
			
		||||
            event_type = self._(self._get_type(event.get_type()))
 | 
			
		||||
            types.append(event_type)
 | 
			
		||||
        if types:
 | 
			
		||||
            return types
 | 
			
		||||
        return [_T_("Events missing")]
 | 
			
		||||
@@ -496,7 +505,10 @@ class Extract(object):
 | 
			
		||||
        return [_T_("Children missing")]
 | 
			
		||||
 | 
			
		||||
    def get_handle_count(self, data):
 | 
			
		||||
        "return number of handles in given (person, handle_list) used for child count, family count"
 | 
			
		||||
        """
 | 
			
		||||
        return number of handles in given (person, handle_list)
 | 
			
		||||
        used for child count, family count
 | 
			
		||||
        """
 | 
			
		||||
        return ["%3d" % len(data[1])]
 | 
			
		||||
 | 
			
		||||
    # ------------------- utility methods -------------------------
 | 
			
		||||
@@ -575,15 +587,15 @@ class Extract(object):
 | 
			
		||||
            if int(family.get_relationship()) == FamilyRelType.MARRIED:
 | 
			
		||||
                for event_ref in family.get_event_ref_list():
 | 
			
		||||
                    event = self.db.get_event_from_handle(event_ref.ref)
 | 
			
		||||
                    if event.get_type() == EventType.MARRIAGE and \
 | 
			
		||||
                    (event_ref.get_role() == EventRoleType.FAMILY or
 | 
			
		||||
                    event_ref.get_role() == EventRoleType.PRIMARY ):
 | 
			
		||||
                    if (event.get_type() == EventType.MARRIAGE and
 | 
			
		||||
                            (event_ref.get_role() == EventRoleType.FAMILY or
 | 
			
		||||
                             event_ref.get_role() == EventRoleType.PRIMARY)):
 | 
			
		||||
                        marriages.append(event_ref.ref)
 | 
			
		||||
        if marriages:
 | 
			
		||||
            return (person, marriages)
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    def get_family_handles(self, person):
 | 
			
		||||
    def get_any_family_handles(self, person):
 | 
			
		||||
        "return list of family handles for given person or None"
 | 
			
		||||
        families = person.get_family_handle_list()
 | 
			
		||||
 | 
			
		||||
@@ -622,12 +634,12 @@ class Extract(object):
 | 
			
		||||
                    chart[1][key] = 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def collect_data(self, db, filter_func, menu, genders,
 | 
			
		||||
    def collect_data(self, dbase, filter_func, menu, genders,
 | 
			
		||||
                     year_from, year_to, no_years, cb_progress, rlocale):
 | 
			
		||||
        """goes through the database and collects the selected personal
 | 
			
		||||
        data persons fitting the filter and birth year criteria. The
 | 
			
		||||
        arguments are:
 | 
			
		||||
        db          - the GRAMPS database
 | 
			
		||||
        dbase       - the GRAMPS database
 | 
			
		||||
        filter_func - filtering function selected by the StatisticsDialog
 | 
			
		||||
        options     - report options_dict which sets which methods are used
 | 
			
		||||
        genders     - which gender(s) to include into statistics
 | 
			
		||||
@@ -642,7 +654,7 @@ class Extract(object):
 | 
			
		||||
        - Dict of values with their counts
 | 
			
		||||
        (- Method)
 | 
			
		||||
        """
 | 
			
		||||
        self.db = db        # store for use by methods
 | 
			
		||||
        self.db = dbase        # store for use by methods
 | 
			
		||||
        self._locale = rlocale
 | 
			
		||||
        self._ = rlocale.translation.sgettext
 | 
			
		||||
        self._get_type = rlocale.get_type
 | 
			
		||||
@@ -657,9 +669,11 @@ class Extract(object):
 | 
			
		||||
                data.append((ext[name][1], {}, ext[name][2], ext[name][3]))
 | 
			
		||||
 | 
			
		||||
        # go through the people and collect data
 | 
			
		||||
        for person_handle in filter_func.apply(db, db.iter_person_handles(), cb_progress):
 | 
			
		||||
        for person_handle in filter_func.apply(dbase,
 | 
			
		||||
                                               dbase.iter_person_handles(),
 | 
			
		||||
                                               cb_progress):
 | 
			
		||||
            cb_progress()
 | 
			
		||||
            person = db.get_person_from_handle(person_handle)
 | 
			
		||||
            person = dbase.get_person_from_handle(person_handle)
 | 
			
		||||
            # check whether person has suitable gender
 | 
			
		||||
            if person.gender != genders and genders != Person.UNKNOWN:
 | 
			
		||||
                continue
 | 
			
		||||
@@ -685,7 +699,7 @@ class Extract(object):
 | 
			
		||||
                            if deathdate.get_year() < year_from:
 | 
			
		||||
                                continue
 | 
			
		||||
                        if not no_years:
 | 
			
		||||
                            # do not accept people who are not known to be in range
 | 
			
		||||
                            # don't accept people not known to be in range
 | 
			
		||||
                            continue
 | 
			
		||||
                    else:
 | 
			
		||||
                        continue
 | 
			
		||||
@@ -717,7 +731,6 @@ class StatisticsChart(Report):
 | 
			
		||||
        options         - instance of the Options class for this report
 | 
			
		||||
        user            - a gen.user.User() instance
 | 
			
		||||
 | 
			
		||||
        To see what the options are, check the options help in the options class.
 | 
			
		||||
        """
 | 
			
		||||
        Report.__init__(self, database, options, user)
 | 
			
		||||
        menu = options.menu
 | 
			
		||||
@@ -759,8 +772,7 @@ class StatisticsChart(Report):
 | 
			
		||||
 | 
			
		||||
        if genders:
 | 
			
		||||
            span_string = self._("%(genders)s born "
 | 
			
		||||
                                 "%(year_from)04d-%(year_to)04d"
 | 
			
		||||
                                         % mapping )
 | 
			
		||||
                                 "%(year_from)04d-%(year_to)04d" % mapping)
 | 
			
		||||
        else:
 | 
			
		||||
            span_string = self._("Persons born "
 | 
			
		||||
                                 "%(year_from)04d-%(year_to)04d") % mapping
 | 
			
		||||
@@ -785,9 +797,8 @@ class StatisticsChart(Report):
 | 
			
		||||
            # generate sorted item lookup index index
 | 
			
		||||
            lookup = self.index_items(table[1], sortby, reverse)
 | 
			
		||||
            # document heading
 | 
			
		||||
            heading = "%(str1)s -- %(str2)s" % {
 | 
			
		||||
                        'str1' : self._(table[0]),
 | 
			
		||||
                        'str2' : span_string }
 | 
			
		||||
            heading = "%(str1)s -- %(str2)s" % {'str1' : self._(table[0]),
 | 
			
		||||
                                                'str2' : span_string}
 | 
			
		||||
            self.data.append((heading, filter_name, table[0], table[1], lookup))
 | 
			
		||||
            self._user.step_progress()
 | 
			
		||||
        self._user.end_progress()
 | 
			
		||||
@@ -833,7 +844,7 @@ class StatisticsChart(Report):
 | 
			
		||||
        # set layout variables
 | 
			
		||||
        middle_w = self.doc.get_usable_width() / 2
 | 
			
		||||
        middle_h = self.doc.get_usable_height() / 2
 | 
			
		||||
        middle = min(middle_w,middle_h)
 | 
			
		||||
        middle = min(middle_w, middle_h)
 | 
			
		||||
 | 
			
		||||
        # start output
 | 
			
		||||
        style_sheet = self.doc.get_style_sheet()
 | 
			
		||||
@@ -866,7 +877,7 @@ class StatisticsChart(Report):
 | 
			
		||||
            yoffset = margin
 | 
			
		||||
 | 
			
		||||
        text = self._("%s (persons):") % self._(typename)
 | 
			
		||||
        draw_legend(self.doc, legendx, yoffset, chart_data, text,'SC-legend')
 | 
			
		||||
        draw_legend(self.doc, legendx, yoffset, chart_data, text, 'SC-legend')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def output_barchart(self, title1, title2, typename, data, lookup):
 | 
			
		||||
@@ -880,7 +891,7 @@ class StatisticsChart(Report):
 | 
			
		||||
        width = self.doc.get_usable_width()
 | 
			
		||||
        row_h = pt2cm(font.get_size())
 | 
			
		||||
        max_y = self.doc.get_usable_height() - row_h
 | 
			
		||||
        pad =  row_h * 0.5
 | 
			
		||||
        pad = row_h * 0.5
 | 
			
		||||
 | 
			
		||||
        # check maximum value
 | 
			
		||||
        max_value = max(data[k] for k in lookup) if lookup else 0
 | 
			
		||||
@@ -915,7 +926,8 @@ class StatisticsChart(Report):
 | 
			
		||||
            # right align bar to the text
 | 
			
		||||
            value = data[key]
 | 
			
		||||
            startx = stopx - (maxsize * value / max_value)
 | 
			
		||||
            self.doc.draw_box('SC-bar',"",startx,yoffset,stopx-startx,row_h)
 | 
			
		||||
            self.doc.draw_box('SC-bar', "",
 | 
			
		||||
                              startx, yoffset, stopx-startx, row_h)
 | 
			
		||||
            # text after bar
 | 
			
		||||
            text = "%s (%d)" % (self._(key), data[key])
 | 
			
		||||
            self.doc.draw_text('SC-text', text, textx, yoffset)
 | 
			
		||||
@@ -946,8 +958,8 @@ class StatisticsChartOptions(MenuReportOptions):
 | 
			
		||||
        ################################
 | 
			
		||||
 | 
			
		||||
        self.__filter = FilterOption(_("Filter"), 0)
 | 
			
		||||
        self.__filter.set_help(
 | 
			
		||||
                     _("Determines what people are included in the report."))
 | 
			
		||||
        self.__filter.set_help(_("Determines what people are included "
 | 
			
		||||
                                 "in the report."))
 | 
			
		||||
        add_option("filter", self.__filter)
 | 
			
		||||
        self.__filter.connect('value-changed', self.__filter_changed)
 | 
			
		||||
 | 
			
		||||
@@ -964,12 +976,12 @@ class StatisticsChartOptions(MenuReportOptions):
 | 
			
		||||
        stdoptions.add_private_data_option(menu, category_name)
 | 
			
		||||
 | 
			
		||||
        sortby = EnumeratedListOption(_('Sort chart items by'),
 | 
			
		||||
                                      _options.SORT_VALUE )
 | 
			
		||||
                                      _options.SORT_VALUE)
 | 
			
		||||
        for item_idx in range(len(_options.opt_sorts)):
 | 
			
		||||
            item = _options.opt_sorts[item_idx]
 | 
			
		||||
            sortby.add_item(item_idx,item[2])
 | 
			
		||||
        sortby.set_help( _("Select how the statistical data is sorted."))
 | 
			
		||||
        add_option("sortby",sortby)
 | 
			
		||||
            sortby.add_item(item_idx, item[2])
 | 
			
		||||
        sortby.set_help(_("Select how the statistical data is sorted."))
 | 
			
		||||
        add_option("sortby", sortby)
 | 
			
		||||
 | 
			
		||||
        reverse = BooleanOption(_("Sort in reverse order"), False)
 | 
			
		||||
        reverse.set_help(_("Check to reverse the sorting order."))
 | 
			
		||||
@@ -982,7 +994,7 @@ class StatisticsChartOptions(MenuReportOptions):
 | 
			
		||||
        add_option("year_from", year_from)
 | 
			
		||||
 | 
			
		||||
        year_to = NumberOption(_("People Born Before"),
 | 
			
		||||
                                 this_year, 1, this_year)
 | 
			
		||||
                               this_year, 1, this_year)
 | 
			
		||||
        year_to.set_help(_("Birth year until which to include people"))
 | 
			
		||||
        add_option("year_to", year_to)
 | 
			
		||||
 | 
			
		||||
@@ -993,13 +1005,13 @@ class StatisticsChartOptions(MenuReportOptions):
 | 
			
		||||
        add_option("no_years", no_years)
 | 
			
		||||
 | 
			
		||||
        gender = EnumeratedListOption(_('Genders included'),
 | 
			
		||||
                                      Person.UNKNOWN )
 | 
			
		||||
                                      Person.UNKNOWN)
 | 
			
		||||
        for item_idx in range(len(_options.opt_genders)):
 | 
			
		||||
            item = _options.opt_genders[item_idx]
 | 
			
		||||
            gender.add_item(item[0],item[2])
 | 
			
		||||
        gender.set_help( _("Select which genders are included into "
 | 
			
		||||
                           "statistics."))
 | 
			
		||||
        add_option("gender",gender)
 | 
			
		||||
            gender.add_item(item[0], item[2])
 | 
			
		||||
        gender.set_help(_("Select which genders are included into "
 | 
			
		||||
                          "statistics."))
 | 
			
		||||
        add_option("gender", gender)
 | 
			
		||||
 | 
			
		||||
        bar_items = NumberOption(_("Max. items for a pie"), 8, 0, 20)
 | 
			
		||||
        bar_items.set_help(_("With fewer items pie chart and legend will be "
 | 
			
		||||
@@ -1013,17 +1025,18 @@ class StatisticsChartOptions(MenuReportOptions):
 | 
			
		||||
        idx = 0
 | 
			
		||||
        half = len(_Extract.extractors) // 2
 | 
			
		||||
        chart_types = []
 | 
			
		||||
        for (chart_opt, tuple) in _Extract.extractors.items():
 | 
			
		||||
            chart_types.append((_(tuple[1]), chart_opt, tuple))
 | 
			
		||||
        sorted_chart_types = sorted(chart_types, key=lambda x:glocale.sort_key(x[0]))
 | 
			
		||||
        for (translated_option_name, opt_name, tuple) in sorted_chart_types:
 | 
			
		||||
        for (chart_opt, ctuple) in _Extract.extractors.items():
 | 
			
		||||
            chart_types.append((_(ctuple[1]), chart_opt, ctuple))
 | 
			
		||||
        sorted_chart_types = sorted(chart_types,
 | 
			
		||||
                                    key=lambda x: glocale.sort_key(x[0]))
 | 
			
		||||
        for (translated_option_name, opt_name, ctuple) in sorted_chart_types:
 | 
			
		||||
            if idx <= half:
 | 
			
		||||
                category_name = _("Charts 1")
 | 
			
		||||
            else:
 | 
			
		||||
                category_name = _("Charts 2")
 | 
			
		||||
            opt = BooleanOption(translated_option_name, False)
 | 
			
		||||
            opt.set_help(_("Include charts with indicated data."))
 | 
			
		||||
            menu.add_option(category_name,opt_name,opt)
 | 
			
		||||
            menu.add_option(category_name, opt_name, opt)
 | 
			
		||||
            idx += 1
 | 
			
		||||
 | 
			
		||||
        # Enable a couple of charts by default
 | 
			
		||||
@@ -1059,23 +1072,23 @@ class StatisticsChartOptions(MenuReportOptions):
 | 
			
		||||
    def make_default_style(self, default_style):
 | 
			
		||||
        """Make the default output style for the Statistics report."""
 | 
			
		||||
        # Paragraph Styles
 | 
			
		||||
        f = FontStyle()
 | 
			
		||||
        f.set_size(10)
 | 
			
		||||
        f.set_type_face(FONT_SERIF)
 | 
			
		||||
        p = ParagraphStyle()
 | 
			
		||||
        p.set_font(f)
 | 
			
		||||
        p.set_alignment(PARA_ALIGN_LEFT)
 | 
			
		||||
        p.set_description(_("The style used for the items and values."))
 | 
			
		||||
        default_style.add_paragraph_style("SC-Text",p)
 | 
			
		||||
        fstyle = FontStyle()
 | 
			
		||||
        fstyle.set_size(10)
 | 
			
		||||
        fstyle.set_type_face(FONT_SERIF)
 | 
			
		||||
        pstyle = ParagraphStyle()
 | 
			
		||||
        pstyle.set_font(fstyle)
 | 
			
		||||
        pstyle.set_alignment(PARA_ALIGN_LEFT)
 | 
			
		||||
        pstyle.set_description(_("The style used for the items and values."))
 | 
			
		||||
        default_style.add_paragraph_style("SC-Text", pstyle)
 | 
			
		||||
 | 
			
		||||
        f = FontStyle()
 | 
			
		||||
        f.set_size(14)
 | 
			
		||||
        f.set_type_face(FONT_SANS_SERIF)
 | 
			
		||||
        p = ParagraphStyle()
 | 
			
		||||
        p.set_font(f)
 | 
			
		||||
        p.set_alignment(PARA_ALIGN_CENTER)
 | 
			
		||||
        p.set_description(_("The style used for the title of the page."))
 | 
			
		||||
        default_style.add_paragraph_style("SC-Title",p)
 | 
			
		||||
        fstyle = FontStyle()
 | 
			
		||||
        fstyle.set_size(14)
 | 
			
		||||
        fstyle.set_type_face(FONT_SANS_SERIF)
 | 
			
		||||
        pstyle = ParagraphStyle()
 | 
			
		||||
        pstyle.set_font(fstyle)
 | 
			
		||||
        pstyle.set_alignment(PARA_ALIGN_CENTER)
 | 
			
		||||
        pstyle.set_description(_("The style used for the title of the page."))
 | 
			
		||||
        default_style.add_paragraph_style("SC-Title", pstyle)
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        Graphic Styles:
 | 
			
		||||
@@ -1086,81 +1099,81 @@ class StatisticsChartOptions(MenuReportOptions):
 | 
			
		||||
            SC-color-N - The colors for drawing pies.
 | 
			
		||||
            SC-bar - A red bar with 0.5pt black line.
 | 
			
		||||
        """
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style("SC-Title")
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((255,255,255))
 | 
			
		||||
        g.set_line_width(0)
 | 
			
		||||
        default_style.add_draw_style("SC-title",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_paragraph_style("SC-Title")
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((255, 255, 255))
 | 
			
		||||
        gstyle.set_line_width(0)
 | 
			
		||||
        default_style.add_draw_style("SC-title", gstyle)
 | 
			
		||||
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style("SC-Text")
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((255,255,255))
 | 
			
		||||
        g.set_line_width(0)
 | 
			
		||||
        default_style.add_draw_style("SC-text",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_paragraph_style("SC-Text")
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((255, 255, 255))
 | 
			
		||||
        gstyle.set_line_width(0)
 | 
			
		||||
        default_style.add_draw_style("SC-text", gstyle)
 | 
			
		||||
 | 
			
		||||
        width = 0.8
 | 
			
		||||
        # red
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style('SC-Text')
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((255,0,0))
 | 
			
		||||
        g.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-0",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_paragraph_style('SC-Text')
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((255, 0, 0))
 | 
			
		||||
        gstyle.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-0", gstyle)
 | 
			
		||||
        # orange
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style('SC-Text')
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((255,158,33))
 | 
			
		||||
        g.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-1",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_paragraph_style('SC-Text')
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((255, 158, 33))
 | 
			
		||||
        gstyle.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-1", gstyle)
 | 
			
		||||
        # green
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style('SC-Text')
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((0,178,0))
 | 
			
		||||
        g.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-2",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_paragraph_style('SC-Text')
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((0, 178, 0))
 | 
			
		||||
        gstyle.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-2", gstyle)
 | 
			
		||||
        # violet
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style('SC-Text')
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((123,0,123))
 | 
			
		||||
        g.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-3",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_paragraph_style('SC-Text')
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((123, 0, 123))
 | 
			
		||||
        gstyle.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-3", gstyle)
 | 
			
		||||
        # yellow
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style('SC-Text')
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((255,255,0))
 | 
			
		||||
        g.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-4",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_paragraph_style('SC-Text')
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((255, 255, 0))
 | 
			
		||||
        gstyle.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-4", gstyle)
 | 
			
		||||
        # blue
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style('SC-Text')
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((0,105,214))
 | 
			
		||||
        g.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-5",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_paragraph_style('SC-Text')
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((0, 105, 214))
 | 
			
		||||
        gstyle.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-5", gstyle)
 | 
			
		||||
        # gray
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style('SC-Text')
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((210,204,210))
 | 
			
		||||
        g.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-6",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_paragraph_style('SC-Text')
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((210, 204, 210))
 | 
			
		||||
        gstyle.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-color-6", gstyle)
 | 
			
		||||
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((255,0,0))
 | 
			
		||||
        g.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-bar",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((255, 0, 0))
 | 
			
		||||
        gstyle.set_line_width(width)
 | 
			
		||||
        default_style.add_draw_style("SC-bar", gstyle)
 | 
			
		||||
 | 
			
		||||
        # legend
 | 
			
		||||
        g = GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style('SC-Text')
 | 
			
		||||
        g.set_color((0,0,0))
 | 
			
		||||
        g.set_fill_color((255,255,255))
 | 
			
		||||
        g.set_line_width(0)
 | 
			
		||||
        default_style.add_draw_style("SC-legend",g)
 | 
			
		||||
        gstyle = GraphicsStyle()
 | 
			
		||||
        gstyle.set_paragraph_style('SC-Text')
 | 
			
		||||
        gstyle.set_color((0, 0, 0))
 | 
			
		||||
        gstyle.set_fill_color((255, 255, 255))
 | 
			
		||||
        gstyle.set_line_width(0)
 | 
			
		||||
        default_style.add_draw_style("SC-legend", gstyle)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user