Proof of concept: adding a center person option instead of using active person in reports.

svn: r9652
This commit is contained in:
Brian Matherly 2007-12-31 06:21:58 +00:00
parent a37fc2bab3
commit f002f65c41
6 changed files with 102 additions and 13 deletions

View File

@ -1,3 +1,12 @@
2007-12-30 Brian Matherly <brian@gramps-project.org>
* src/PluginUtils/__init__.py:
* src/PluginUtils/MenuOptions.py:
* src/ReportBase/_BareReportDialog.py:
* src/ReportBase/_ReportDialog.py:
* src/plugins/AncestorChart.py:
Proof of concept: adding a center person option instead of
using active person
2007-12-30 Brian Matherly <brian@gramps-project.org>
* src/Bookmarks: Set dialog to modal.

View File

@ -586,6 +586,63 @@ class FilterListOption(Option):
self.__value = int(self.combo.get_active())
return self.__value
#-------------------------------------------------------------------------
#
# PersonOption class
#
#-------------------------------------------------------------------------
class PersonOption(Option):
"""
This class describes an option that allows a person from the
database to be selected.
"""
def __init__(self, label, value, dbstate):
"""
@param label: A friendly label to be applied to this option.
Example: "Center Person"
@type label: string
@param value: A default Gramps ID of a person for this option.
Example: "p11"
@type value: string
@param dbstate: The database state for the database to be used..
@type value: DbState
@return: nothing
"""
self.dbstate = dbstate
self.db = dbstate.get_database()
Option.__init__(self,label,value)
def make_gui_obj(self, gtk, dialog):
self.dialog = dialog
self.gobj = gtk.HBox()
person = self.db.get_person_from_gramps_id(self.get_value())
if not person:
person = self.dbstate.get_active_person()
name = _nd.display(person)
gid = person.get_gramps_id()
self.person_label = gtk.Label( "%s (%s)" % (name,gid) )
self.person_label.set_alignment(0.0,0.5)
self.change_button = gtk.Button("%s..." % _('C_hange') )
self.change_button.connect('clicked',self.on_change_clicked)
self.gobj.pack_start(self.person_label, False)
self.gobj.pack_end(self.change_button, False)
def parse(self):
return self.get_value()
def on_change_clicked(self, obj):
SelectPerson = selector_factory('Person')
sel = SelectPerson(self.dbstate, self.dialog.uistate,
self.dialog.track)
person = sel.run()
if person:
name = _nd.display(person)
gid = person.get_gramps_id()
self.person_label.set_text( "%s (%s)" % (name,gid) )
self.set_value(gid)
#-------------------------------------------------------------------------
#
# PersonListOption class

View File

@ -30,7 +30,7 @@
from _MenuOptions import MenuOptions, \
NumberOption, FloatOption, BooleanOption, TextOption, \
EnumeratedListOption, FilterListOption, StringOption, ColourButtonOption, \
PersonListOption
PersonOption, PersonListOption
from _PluginMgr import \
register_export, register_import, \
register_tool, register_report, \

View File

@ -103,7 +103,6 @@ class BareReportDialog(ManagedWindow.ManagedWindow):
return (_("Configuration"),self.report_name)
def init_interface(self):
self.extra_menu = None
self.widgets = []
self.frame_names = []
self.frames = {}
@ -115,6 +114,7 @@ class BareReportDialog(ManagedWindow.ManagedWindow):
window = gtk.Dialog('GRAMPS')
self.set_window(window,None,self.get_title())
self.window.set_has_separator(False)
self.window.set_modal(True)
if self.HELP_TOPIC:
self.help = self.window.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP)
@ -145,6 +145,7 @@ class BareReportDialog(ManagedWindow.ManagedWindow):
# frame and to create other frames
self.add_user_options()
self.setup_main_options()
self.setup_center_person()
self.setup_target_frame()
self.setup_format_frame()
@ -158,7 +159,6 @@ class BareReportDialog(ManagedWindow.ManagedWindow):
self.setup_other_frames()
self.notebook.set_current_page(0)
self.show()
#self.window.show_all()
def get_title(self):
"""The window title for this dialog"""
@ -397,6 +397,8 @@ class BareReportDialog(ManagedWindow.ManagedWindow):
def setup_other_frames(self):
for key in self.frame_names:
if key == "":
continue
flist = self.frames[key]
table = gtk.Table(3,len(flist))
table.set_col_spacings(12)
@ -420,6 +422,22 @@ class BareReportDialog(ManagedWindow.ManagedWindow):
yoptions=gtk.SHRINK)
row = row + 1
def setup_main_options(self):
if self.frames.has_key(""):
flist = self.frames[""]
for (text,widget) in flist:
label = gtk.Label("<b>%s</b>" % text)
label.set_use_markup(True)
label.set_alignment(0.0,0.5)
self.tbl.set_border_width(12)
self.tbl.attach(label,0,4,self.col,self.col+1)
self.col += 1
self.tbl.attach(widget,2,4,self.col,self.col+1)
self.col += 1
#------------------------------------------------------------------------
#
# Customization hooks for stand-alone reports (subclass ReportDialog)

View File

@ -101,12 +101,6 @@ class ReportDialog(BareReportDialog):
"""The header line to put at the top of the contents of the
dialog box. By default this will just be the name of the
report for the selected person. """
if name.strip():
return _("%(report_name)s for %(person_name)s") % {
'report_name' : self.report_name,
'person_name' : name}
else:
# No need to translate report_name, it is already translated
return self.report_name
#------------------------------------------------------------------------

View File

@ -39,7 +39,7 @@ from gettext import gettext as _
import BaseDoc
from SubstKeywords import SubstKeywords
from PluginUtils import register_report, \
NumberOption, BooleanOption, TextOption
NumberOption, BooleanOption, TextOption, PersonOption
from ReportBase import Report, ReportUtils, CATEGORY_DRAW, MenuReportOptions,\
MODE_GUI, MODE_BKI, MODE_CLI
from BasicUtils import name_displayer
@ -186,7 +186,10 @@ class AncestorChart(Report):
self.incblank = options_class.handler.options_dict['incblank']
self.compress = options_class.handler.options_dict['compress']
name = name_displayer.display_formal(person)
pid = options_class.handler.options_dict['pid']
center_person = database.get_person_from_gramps_id(pid)
name = name_displayer.display_formal(center_person)
self.title = _("Ancestor Graph for %s") % name
self.map = {}
@ -197,7 +200,7 @@ class AncestorChart(Report):
self.lines = 0
self.scale = 1
self.apply_filter(self.start_person.get_handle(),1)
self.apply_filter(center_person.get_handle(),1)
keys = self.map.keys()
keys.sort()
@ -448,6 +451,14 @@ class AncestorChartOptions(MenuReportOptions):
MenuReportOptions.__init__(self,name,dbstate)
def add_menu_options(self,menu,dbstate):
id = ""
if dbstate:
id = dbstate.get_active_person().get_gramps_id()
pid = PersonOption(_("Center Person"),id,dbstate)
pid.set_help(_("The center person for thereport"))
menu.add_option("","pid",pid)
category_name = _("Report Options")
max_gen = NumberOption(_("Generations"),10,1,15)