fix StatisticsChart.py chart output, improve code

svn: r3961
This commit is contained in:
Eero Tamminen 2005-01-25 19:56:23 +00:00
parent 149e351665
commit fc4502f33d
2 changed files with 37 additions and 38 deletions

View File

@ -1,3 +1,11 @@
2005-01-25 Eero Tamminen <eerot@sf>
* src/plugins/StatisticsChart.py:
- Comment out debug output
- Bugfix: each chart to its own page
- Move comparison function to report class
- Make strings about missing information more consistent/clearer
- Use capitalized gender names instead of Gramps (lowercase) consts
2005-01-24 Don Allingham <dallingham@users.sourceforge.net> 2005-01-24 Don Allingham <dallingham@users.sourceforge.net>
* gramps.spec.in: pkill gconfd to fix settings * gramps.spec.in: pkill gconfd to fix settings

View File

@ -57,18 +57,10 @@ from DateHandler import displayer as _dd
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# Module globals # Global options and their names
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# needs to be global for the lookup_value_compare()
_lookup_items = {}
# needs to be global for python sort
def lookup_value_compare(a, b):
"compare given keys according to corresponding _lookup_items values"
return cmp(_lookup_items[a],_lookup_items[b])
class _options: class _options:
# sort type identifiers # sort type identifiers
SORT_VALUE = 0 SORT_VALUE = 0
@ -152,12 +144,10 @@ class Extract:
# TODO: why there's no Person.getGenderName? # TODO: why there's no Person.getGenderName?
# It could be used by getDisplayInfo & this... # It could be used by getDisplayInfo & this...
if person.gender == Person.male: if person.gender == Person.male:
gender = const.male return [_("Men")]
elif person.gender == Person.female: if person.gender == Person.female:
gender = const.female return [_("Women")]
else: return [_("Gender unknown")]
gender = const.unknown
return [gender]
def get_year(self, event): def get_year(self, event):
"return year for given event" "return year for given event"
@ -166,7 +156,7 @@ class Extract:
year = date.get_year() year = date.get_year()
if year: if year:
return [str(year)] return [str(year)]
return [_("Date missing/inaccurate")] return [_("Date(s) missing")]
def get_month(self, event): def get_month(self, event):
"return month for given event" "return month for given event"
@ -175,7 +165,7 @@ class Extract:
month = date.get_month() month = date.get_month()
if month: if month:
return [_dd._months[month]] return [_dd._months[month]]
return [_("Date missing/inaccurate")] return [_("Date(s) missing")]
def get_cause(self, event): def get_cause(self, event):
"return cause for given event" "return cause for given event"
@ -198,14 +188,14 @@ class Extract:
death = self.get_death(person) death = self.get_death(person)
if not death: if not death:
return self.estimate_age(person) return self.estimate_age(person)
return [_("Dead")] return [_("Already dead")]
def get_death_age(self, person): def get_death_age(self, person):
"return age at death for given person, if dead" "return age at death for given person, if dead"
death = self.get_death(person) death = self.get_death(person)
if death: if death:
return self.estimate_age(person) return self.estimate_age(person)
return [_("Alive")] return [_("Still alive")]
def marriage_age(self, person): def marriage_age(self, person):
return "TODO: Marriage age stat unimplemented" return "TODO: Marriage age stat unimplemented"
@ -229,7 +219,7 @@ class Extract:
age = ReportUtils.estimate_age(self.db, person) age = ReportUtils.estimate_age(self.db, person)
if age[0] < 0 or age[1] < 0: if age[0] < 0 or age[1] < 0:
# inadequate information # inadequate information
return [_("Missing information")] return [_("Date(s) missing")]
if age[0] == age[1]: if age[0] == age[1]:
# exact year # exact year
return [str(age[0])] return [str(age[0])]
@ -272,7 +262,7 @@ class Extract:
if obj: if obj:
value = data_func(obj) # e.g. get_year() value = data_func(obj) # e.g. get_year()
else: else:
value = [_("Information missing")] value = [_("Personal information missing")]
# list of information found # list of information found
for key in value: for key in value:
if key in chart[1].keys(): if key in chart[1].keys():
@ -299,11 +289,11 @@ class Extract:
- Dict of values with their counts - Dict of values with their counts
(- Method) (- Method)
""" """
self.db = db # store for methods self.db = db # store for use by methods
data = [] data = []
ext = self.extractors ext = self.extractors
# initialize data # which methods to use
for key in options: for key in options:
if options[key] and key in self.extractors: if options[key] and key in self.extractors:
# localized data title, value dict and method # localized data title, value dict and method
@ -405,14 +395,17 @@ class StatisticsChart(Report.Report):
else: else:
heading = "Persons born %(year_from)04d-%(year_to)04d: %(title)s" % mapping heading = "Persons born %(year_from)04d-%(year_to)04d: %(title)s" % mapping
self.data.append((heading, table[1], lookup)) self.data.append((heading, table[1], lookup))
# DEBUG #DEBUG
print heading #print heading
print table[1] #print table[1]
def lookup_compare(self, a, b):
"compare given keys according to corresponding lookup values"
return cmp(self.lookup_items[a], self.lookup_items[b])
def index_items(self, data, sort, reverse): def index_items(self, data, sort, reverse):
"""creates & stores a sorted index for the items""" """creates & stores a sorted index for the items"""
global _lookup_items
# sort by item keys # sort by item keys
index = data.keys() index = data.keys()
@ -422,10 +415,10 @@ class StatisticsChart(Report.Report):
if sort == _options.SORT_VALUE: if sort == _options.SORT_VALUE:
# set for the sorting function # set for the sorting function
_lookup_items = data self.lookup_items = data
# then sort by value # then sort by value
index.sort(lookup_value_compare) index.sort(self.lookup_compare)
if reverse: if reverse:
index.reverse() index.reverse()
@ -468,12 +461,10 @@ class StatisticsChart(Report.Report):
def write_report(self): def write_report(self):
"output the selected statistics..." "output the selected statistics..."
self.doc.start_page()
for data in self.data: for data in self.data:
self.doc.start_page()
self.output_chart(data[0], data[1], data[2]) self.output_chart(data[0], data[1], data[2])
self.doc.end_page()
self.doc.end_page()
def output_chart(self, title, data, lookup): def output_chart(self, title, data, lookup):
@ -499,7 +490,7 @@ class StatisticsChart(Report.Report):
# start output # start output
self.doc.center_text('SC-title', title, width/2, 0) self.doc.center_text('SC-title', title, width/2, 0)
print title #print title
yoffset = pt2cm(self.doc.style_list['SC-Title'].get_font().get_size()) yoffset = pt2cm(self.doc.style_list['SC-Title'].get_font().get_size())
for key in lookup: for key in lookup:
@ -513,7 +504,7 @@ class StatisticsChart(Report.Report):
# right align the text to the value # right align the text to the value
x = start - pt2cm(self.doc.string_width(font, key)) - 1.0 x = start - pt2cm(self.doc.string_width(font, key)) - 1.0
self.doc.draw_text('SC-text', key, x, yoffset) self.doc.draw_text('SC-text', key, x, yoffset)
print key + ":", #print key + ":",
value = data[key] value = data[key]
stop = start + (size * value / max_value) stop = start + (size * value / max_value)
@ -523,7 +514,7 @@ class StatisticsChart(Report.Report):
(start, yoffset + row_h)) (start, yoffset + row_h))
self.doc.draw_path('SC-bar', path) self.doc.draw_path('SC-bar', path)
self.doc.draw_text('SC-text', str(value), stop + 0.5, yoffset) self.doc.draw_text('SC-text', str(value), stop + 0.5, yoffset)
print "%d/%d" % (value, max_value) #print "%d/%d" % (value, max_value)
return return