Added options to AgeStats; set order of options; aligned options; added copyright

svn: r11502
This commit is contained in:
Doug Blank 2008-12-22 01:48:42 +00:00
parent e95a318c1b
commit bb5f463a50
2 changed files with 77 additions and 14 deletions

View File

@ -217,6 +217,7 @@ class Gramplet(object):
self._need_to_update = False self._need_to_update = False
self._tags = [] self._tags = []
self.option_dict = {} self.option_dict = {}
self.option_order = []
self.tooltip = None self.tooltip = None
self.link_cursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR) self.link_cursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR)
self.standard_cursor = gtk.gdk.Cursor(gtk.gdk.XTERM) self.standard_cursor = gtk.gdk.Cursor(gtk.gdk.XTERM)
@ -488,6 +489,7 @@ class Gramplet(object):
widget, label = make_gui_option(option, None, self.dbstate, widget, label = make_gui_option(option, None, self.dbstate,
self.gui.uistate,None) self.gui.uistate,None)
self.option_dict.update({option.get_label(): (widget, option)}) self.option_dict.update({option.get_label(): (widget, option)})
self.option_order.append(option.get_label())
def save_update_options(self, obj): def save_update_options(self, obj):
self.save_options() self.save_options()
@ -746,12 +748,14 @@ class GuiGramplet:
hbox = gtk.HBox() hbox = gtk.HBox()
labels = gtk.VBox() labels = gtk.VBox()
options = gtk.VBox() options = gtk.VBox()
hbox.add(labels) hbox.pack_start(labels, False)
hbox.add(options) hbox.pack_start(options, True)
topbox.add(hbox) topbox.add(hbox)
self.gvoptions.add(topbox) self.gvoptions.add(topbox)
for item in self.pui.option_dict: for item in self.pui.option_order:
labels.add(gtk.Label(item + ":")) label = gtk.Label(item + ":")
label.set_alignment(1.0, 0.5)
labels.add(label)
options.add(self.pui.option_dict[item][0]) # widget options.add(self.pui.option_dict[item][0]) # widget
save_button = gtk.Button(stock=gtk.STOCK_SAVE) save_button = gtk.Button(stock=gtk.STOCK_SAVE)
topbox.add(save_button) topbox.add(save_button)

View File

@ -1,10 +1,69 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2008 Douglas S. Blank
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""
This Gramplet shows textual distributions of age breakdowns of various types.
"""
from DataViews import register, Gramplet from DataViews import register, Gramplet
class AgeStatsGramplet(Gramplet): class AgeStatsGramplet(Gramplet):
def init(self):
self.max_age = 120
self.max_mother_diff = 60
self.max_father_diff = 60
self.chart_width = 60
def build_options(self):
from gen.plug.menu import NumberOption
self.add_option(NumberOption(_("Max age"),
self.max_age, 1, 150))
self.add_option(NumberOption(_("Max age of Mother at birth"),
self.max_mother_diff, 1, 150))
self.add_option(NumberOption(_("Max age of Father at birth"),
self.max_father_diff, 1, 150))
self.add_option(NumberOption(_("Chart width"),
self.chart_width, 1, 150))
def save_options(self):
self.max_age = int(self.get_option(_("Max age")).get_value())
self.max_mother_diff = int(self.get_option(_("Max age of Mother at birth")).get_value())
self.max_father_diff = int(self.get_option(_("Max age of Father at birth")).get_value())
self.chart_width = int(self.get_option(_("Chart width")).get_value())
def on_load(self): def on_load(self):
self.no_wrap() self.no_wrap()
tag = self.gui.buffer.create_tag("fixed") tag = self.gui.buffer.create_tag("fixed")
tag.set_property("font", "Courier 8") tag.set_property("font", "Courier 8")
# FIXME: something wrong saving ordered data list?!
# if len(self.gui.data) > 0:
# self.max_age = int(self.gui.data[0])
# if len(self.gui.data) > 1:
# self.max_mother_diff = int(self.gui.data[1])
# if len(self.gui.data) > 2:
# self.max_father_diff = int(self.gui.data[2])
# if len(self.gui.data) > 3:
# self.chart_width = int(self.gui.data[3])
# def on_save(self):
# self.gui.data = [self.max_age, self.max_mother_diff, self.max_father_diff, self.chart_width]
def db_changed(self): def db_changed(self):
self.update() self.update()
@ -14,9 +73,9 @@ class AgeStatsGramplet(Gramplet):
age_dict = {} age_dict = {}
mother_dict = {} mother_dict = {}
father_dict = {} father_dict = {}
age_handles = [[] for age in range(120)] age_handles = [[] for age in range(self.max_age)]
mother_handles = [[] for age in range(60)] mother_handles = [[] for age in range(self.max_mother_diff)]
father_handles = [[] for age in range(60)] father_handles = [[] for age in range(self.max_father_diff)]
text = "" text = ""
handles = self.dbstate.db.get_person_handles(sort_handles=False) handles = self.dbstate.db.get_person_handles(sort_handles=False)
for h in handles: for h in handles:
@ -35,7 +94,7 @@ class AgeStatsGramplet(Gramplet):
death_date = death_event.get_date_object() death_date = death_event.get_date_object()
if death_date and birth_date and birth_date.get_year() != 0: if death_date and birth_date and birth_date.get_year() != 0:
age = death_date.get_year() - birth_date.get_year() age = death_date.get_year() - birth_date.get_year()
if age >= 0 and age < 120: if age >= 0 and age < self.max_age:
age_dict[age] = age_dict.get(age, 0) + 1 age_dict[age] = age_dict.get(age, 0) + 1
age_handles[age].append(h) age_handles[age].append(h)
#else: #else:
@ -58,7 +117,7 @@ class AgeStatsGramplet(Gramplet):
bdate = bevent.get_date_object() bdate = bevent.get_date_object()
if bdate and birth_date and birth_date.get_year() != 0: if bdate and birth_date and birth_date.get_year() != 0:
diff = birth_date.get_year() - bdate.get_year() diff = birth_date.get_year() - bdate.get_year()
if diff >= 0 and diff < 60: if diff >= 0 and diff < self.max_father_diff:
father_dict[diff] = father_dict.get(diff, 0) + 1 father_dict[diff] = father_dict.get(diff, 0) + 1
father_handles[diff].append(f_handle) father_handles[diff].append(f_handle)
#else: #else:
@ -73,18 +132,18 @@ class AgeStatsGramplet(Gramplet):
bdate = bevent.get_date_object() bdate = bevent.get_date_object()
if bdate and birth_date and birth_date.get_year() != 0: if bdate and birth_date and birth_date.get_year() != 0:
diff = birth_date.get_year() - bdate.get_year() diff = birth_date.get_year() - bdate.get_year()
if diff >= 0 and diff < 60: if diff >= 0 and diff < self.max_mother_diff:
mother_dict[diff] = mother_dict.get(diff, 0) + 1 mother_dict[diff] = mother_dict.get(diff, 0) + 1
mother_handles[diff].append(m_handle) mother_handles[diff].append(m_handle)
#else: #else:
# print "Mother diff out of range: %d for %s" % (diff, # print "Mother diff out of range: %d for %s" % (diff,
# p.get_primary_name().get_first_name() # p.get_primary_name().get_first_name()
# + " " + p.get_primary_name().get_surname()) # + " " + p.get_primary_name().get_surname())
width = 60 width = self.chart_width
graph_width = width - 8 graph_width = width - 8
self.create_bargraph(age_dict, age_handles, "Lifespan Age Distribution", "Age", graph_width, 5, 120) self.create_bargraph(age_dict, age_handles, "Lifespan Age Distribution", "Age", graph_width, 5, self.max_age)
self.create_bargraph(father_dict, father_handles, "Father - Child Age Diff Distribution", "Diff", graph_width, 5, 60) self.create_bargraph(father_dict, father_handles, "Father - Child Age Diff Distribution", "Diff", graph_width, 5, self.max_father_diff)
self.create_bargraph(mother_dict, mother_handles, "Mother - Child Age Diff Distribution", "Diff", graph_width, 5, 60) self.create_bargraph(mother_dict, mother_handles, "Mother - Child Age Diff Distribution", "Diff", graph_width, 5, self.max_mother_diff)
start, end = self.gui.buffer.get_bounds() start, end = self.gui.buffer.get_bounds()
self.gui.buffer.apply_tag_by_name("fixed", start, end) self.gui.buffer.apply_tag_by_name("fixed", start, end)
self.append_text("", scroll_to="begin") self.append_text("", scroll_to="begin")