fix StatisticsChart.py chart output, improve code
svn: r3961
This commit is contained in:
parent
149e351665
commit
fc4502f33d
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user