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> 2007-12-30 Brian Matherly <brian@gramps-project.org>
* src/Bookmarks: Set dialog to modal. * src/Bookmarks: Set dialog to modal.

View File

@ -586,6 +586,63 @@ class FilterListOption(Option):
self.__value = int(self.combo.get_active()) self.__value = int(self.combo.get_active())
return self.__value 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 # PersonListOption class

View File

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

View File

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

View File

@ -101,13 +101,7 @@ class ReportDialog(BareReportDialog):
"""The header line to put at the top of the contents of the """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 dialog box. By default this will just be the name of the
report for the selected person. """ report for the selected person. """
if name.strip(): return self.report_name
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 import BaseDoc
from SubstKeywords import SubstKeywords from SubstKeywords import SubstKeywords
from PluginUtils import register_report, \ from PluginUtils import register_report, \
NumberOption, BooleanOption, TextOption NumberOption, BooleanOption, TextOption, PersonOption
from ReportBase import Report, ReportUtils, CATEGORY_DRAW, MenuReportOptions,\ from ReportBase import Report, ReportUtils, CATEGORY_DRAW, MenuReportOptions,\
MODE_GUI, MODE_BKI, MODE_CLI MODE_GUI, MODE_BKI, MODE_CLI
from BasicUtils import name_displayer from BasicUtils import name_displayer
@ -186,7 +186,10 @@ class AncestorChart(Report):
self.incblank = options_class.handler.options_dict['incblank'] self.incblank = options_class.handler.options_dict['incblank']
self.compress = options_class.handler.options_dict['compress'] 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.title = _("Ancestor Graph for %s") % name
self.map = {} self.map = {}
@ -197,7 +200,7 @@ class AncestorChart(Report):
self.lines = 0 self.lines = 0
self.scale = 1 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 = self.map.keys()
keys.sort() keys.sort()
@ -448,6 +451,14 @@ class AncestorChartOptions(MenuReportOptions):
MenuReportOptions.__init__(self,name,dbstate) MenuReportOptions.__init__(self,name,dbstate)
def add_menu_options(self,menu,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") category_name = _("Report Options")
max_gen = NumberOption(_("Generations"),10,1,15) max_gen = NumberOption(_("Generations"),10,1,15)