* src/RelLib.py (Family.set_mother_handle): Typo.

* src/Report.py: Use gen and pagebbg.
* src/ReportOptions.py: Use gen and pagebbg.
* src/plugins/Ancestors.py: Use gen and pagebbg.
* src/plugins/AncestorReport.py: Use gen and pagebbg.
* src/plugins/DescendReport.py: Use gen and pagebbg.
* src/plugins/FtmStyleDescendants.py: Use gen and pagebbg.
* src/plugins/FtmStyleAncestors.py: Use gen and pagebbg.
* src/plugins/IndivComplete.py: Convert to new scheme.
* src/plugins/TimeLine.py: Add custom filters to the pool.
* src/plugins/DetAncestralReport.py: Convert to new scheme.


svn: r3849
This commit is contained in:
Alex Roitman 2005-01-01 02:17:17 +00:00
parent b932aefbf2
commit 6494d8e7bb
12 changed files with 673 additions and 1227 deletions

View File

@ -1,3 +1,16 @@
2004-12-31 Alex Roitman <shura@alex.neuro.umn.edu>
* src/RelLib.py (Family.set_mother_handle): Typo.
* src/Report.py: Use gen and pagebbg.
* src/ReportOptions.py: Use gen and pagebbg.
* src/plugins/Ancestors.py: Use gen and pagebbg.
* src/plugins/AncestorReport.py: Use gen and pagebbg.
* src/plugins/DescendReport.py: Use gen and pagebbg.
* src/plugins/FtmStyleDescendants.py: Use gen and pagebbg.
* src/plugins/FtmStyleAncestors.py: Use gen and pagebbg.
* src/plugins/IndivComplete.py: Convert to new scheme.
* src/plugins/TimeLine.py: Add custom filters to the pool.
* src/plugins/DetAncestralReport.py: Convert to new scheme.
2004-12-30 Alex Roitman <shura@alex.neuro.umn.edu> 2004-12-30 Alex Roitman <shura@alex.neuro.umn.edu>
* src/Report.py: Change finish_report to end_report. * src/Report.py: Change finish_report to end_report.
* src/plugins/BookReport.py (cl_report): * src/plugins/BookReport.py (cl_report):

View File

@ -1256,7 +1256,7 @@ class Family(PrimaryObject,SourceNote):
@param person_handle: L{Person} database handle @param person_handle: L{Person} database handle
@type person_handle: str @type person_handle: str
""" """
self.mother_handle = person self.mother_handle = person_handle
def get_mother_handle(self): def get_mother_handle(self):
""" """

View File

@ -56,7 +56,7 @@ import StyleEditor
import GrampsGconfKeys import GrampsGconfKeys
import PaperMenu import PaperMenu
import Errors import Errors
import GenericFilter
from QuestionDialog import ErrorDialog, OptionDialog from QuestionDialog import ErrorDialog, OptionDialog
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
@ -433,19 +433,13 @@ class BareReportDialog:
It is called immediately before the window is displayed. All It is called immediately before the window is displayed. All
calls to add_option or add_frame_option should be called in calls to add_option or add_frame_option should be called in
this task.""" this task."""
try: self.options.add_user_options(self)
self.options.add_user_options(self)
except AttributeError:
pass
def parse_user_options(self): def parse_user_options(self):
"""Called to allow parsing of added widgets. """Called to allow parsing of added widgets.
It is called when OK is pressed in a dialog. It is called when OK is pressed in a dialog.
All custom widgets should provide a parsing code here.""" All custom widgets should provide a parsing code here."""
try: self.options.parse_user_options(self)
self.options.parse_user_options(self)
except AttributeError:
pass
def add_option(self,label_text,widget,tooltip=None): def add_option(self,label_text,widget,tooltip=None):
"""Takes a text string and a Gtk Widget, and stores them to be """Takes a text string and a Gtk Widget, and stores them to be
@ -597,8 +591,6 @@ class BareReportDialog:
generations fields and the filter combo box are used in most generations fields and the filter combo box are used in most
(but not all) dialog boxes.""" (but not all) dialog boxes."""
import GenericFilter
(em_label, extra_map, preset, em_tip) = self.get_report_extra_menu_info() (em_label, extra_map, preset, em_tip) = self.get_report_extra_menu_info()
(et_label, string, et_tip) = self.get_report_extra_textbox_info() (et_label, string, et_tip) = self.get_report_extra_textbox_info()
@ -1002,7 +994,7 @@ class ReportDialog(BareReportDialog):
self.doc = self.format(self.selected_style,self.paper, self.doc = self.format(self.selected_style,self.paper,
self.template_name,self.orien) self.template_name,self.orien)
self.options.handler.doc = self.doc self.options.set_document(self.doc)
if self.print_report.get_active (): if self.print_report.get_active ():
self.doc.print_requested () self.doc.print_requested ()
@ -1565,8 +1557,8 @@ class CommandLineReport:
'template' : ["=name","Template name (HTML only)."], 'template' : ["=name","Template name (HTML only)."],
'id' : ["=ID","Gramps ID of a central person. MANDATORY"], 'id' : ["=ID","Gramps ID of a central person. MANDATORY"],
'filter' : ["=num","Filter number."], 'filter' : ["=num","Filter number."],
'max_gen' : ["=num","Number generations to follow."], 'gen' : ["=num","Number of generations to follow."],
'page_breaks': ["=0/1","Page break between generations."], 'pagebbg' : ["=0/1","Page break between generations."],
} }
# Add report-specific options # Add report-specific options
@ -1580,8 +1572,6 @@ class CommandLineReport:
self.options_help[key] = self.option_class.options_help[key] self.options_help[key] = self.option_class.options_help[key]
def parse_option_str(self): def parse_option_str(self):
import GenericFilter
for opt in self.options_str_dict.keys(): for opt in self.options_str_dict.keys():
if opt in self.options_dict.keys(): if opt in self.options_dict.keys():
converter = Utils.get_type_converter(self.options_dict[opt]) converter = Utils.get_type_converter(self.options_dict[opt])
@ -1612,13 +1602,13 @@ class CommandLineReport:
self.options_help['filter'].append(filt_list) self.options_help['filter'].append(filt_list)
self.options_help['filter'].append(True) self.options_help['filter'].append(True)
if self.options_dict.has_key('max_gen'): if self.options_dict.has_key('gen'):
max_gen = self.options_dict['max_gen'] max_gen = self.options_dict['gen']
page_breaks = self.options_dict['page_breaks'] page_breaks = self.options_dict['pagebbg']
self.option_class.handler.set_report_generations(max_gen,page_breaks) self.option_class.handler.set_report_generations(max_gen,page_breaks)
self.options_help['max_gen'].append("Whatever Number You Wish") self.options_help['gen'].append("Whatever Number You Wish")
self.options_help['page_breaks'].append([ self.options_help['pagebbg'].append([
"No page break","Page break"]) "No page break","Page break"])
self.options_help['page_breaks'].append(True) self.options_help['page_breaks'].append(True)

View File

@ -541,18 +541,18 @@ class OptionHandler:
self.option_list_collection.save() self.option_list_collection.save()
def get_report_generations(self): def get_report_generations(self):
if self.default_options_dict.has_key('max_gen'): if self.default_options_dict.has_key('gen'):
max_gen = self.options_dict.get('max_gen', max_gen = self.options_dict.get('gen',
self.default_options_dict['max_gen']) self.default_options_dict['gen'])
page_breaks = self.options_dict.get('page_breaks', page_breaks = self.options_dict.get('pagebbg',
self.default_options_dict['page_breaks']) self.default_options_dict['pagebbg'])
return (max_gen,page_breaks) return (max_gen,page_breaks)
else: else:
return (0,0) return (0,0)
def set_report_generations(self,max_gen,page_breaks): def set_report_generations(self,max_gen,page_breaks):
self.options_dict['max_gen'] = max_gen self.options_dict['gen'] = max_gen
self.options_dict['page_breaks'] = page_breaks self.options_dict['pagebbg'] = page_breaks
def get_stylesheet_savefile(self): def get_stylesheet_savefile(self):
"""Where to save user defined styles for this report.""" """Where to save user defined styles for this report."""
@ -667,13 +667,13 @@ class ReportOptions:
but not common enough to be present in all reports. Here's the list but not common enough to be present in all reports. Here's the list
of possible keys for semi-commons: of possible keys for semi-commons:
'filter' - Filter number, selected among filters 'filter' - Filter number, selected among filters
available for this report. If defined, available for this report. If defined,
get_report_filters() method must be defined get_report_filters() method must be defined
which returns the list of available filters. which returns the list of available filters.
'max_gen' - Maximum number of generations to consider. 'gen' - Maximum number of generations to consider.
'page_breaks' - Whether or not make page breaks between generations. 'pagebbg' - Whether or not make page breaks between generations.
A self.enable_dict dictionary MUST be defined here, whose keys A self.enable_dict dictionary MUST be defined here, whose keys

View File

@ -40,13 +40,11 @@ import Report
import BaseDoc import BaseDoc
import RelLib import RelLib
import Errors import Errors
import DateHandler from DateHandler import displayer as _dd
from QuestionDialog import ErrorDialog from QuestionDialog import ErrorDialog
import ReportOptions import ReportOptions
import const import const
_dd = DateHandler.displayer
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# AncestorReport # AncestorReport
@ -270,8 +268,8 @@ class AncestorOptions(ReportOptions.ReportOptions):
def enable_options(self): def enable_options(self):
# Semi-common options that should be enabled for this report # Semi-common options that should be enabled for this report
self.enable_dict = { self.enable_dict = {
'max_gen' : 10, 'gen' : 10,
'page_breaks' : 0, 'pagebbg' : 0,
} }
def make_default_style(self,default_style): def make_default_style(self,default_style):

View File

@ -46,11 +46,10 @@ import BaseDoc
import RelLib import RelLib
import Errors import Errors
import Plugins import Plugins
import DateHandler
from QuestionDialog import ErrorDialog from QuestionDialog import ErrorDialog
import ReportOptions import ReportOptions
from DateHandler import displayer as _dd
_dd = DateHandler.displayer
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# ComprehensiveAncestorsReport # ComprehensiveAncestorsReport
@ -59,7 +58,22 @@ _dd = DateHandler.displayer
class ComprehensiveAncestorsReport (Report.Report): class ComprehensiveAncestorsReport (Report.Report):
def __init__(self,database,person,options_class): def __init__(self,database,person,options_class):
#,max,pgbrk,cite,doc,output,newpage=0): """
Creates ComprehensiveAncestorsReport object that produces the report.
The arguments are:
database - the GRAMPS database instance
person - currently selected person
options_class - instance of the Options class for this report
This report needs the following parameters (class variables)
that come in the options class.
gen - Maximum number of generations to include.
pagebbg - Whether to include page breaks between generations.
cites - Whether or not to include source informaiton.
"""
Report.Report.__init__(self,database,person,options_class) Report.Report.__init__(self,database,person,options_class)
@ -67,7 +81,6 @@ class ComprehensiveAncestorsReport (Report.Report):
(self.max_generations,self.pgbrk) \ (self.max_generations,self.pgbrk) \
= options_class.get_report_generations() = options_class.get_report_generations()
#self.opt_cite = cite
self.opt_cite = options_class.handler.options_dict['cites'] self.opt_cite = options_class.handler.options_dict['cites']
self.output = options_class.get_output() self.output = options_class.get_output()
@ -900,8 +913,8 @@ class ComprehensiveAncestorsOptions(ReportOptions.ReportOptions):
def enable_options(self): def enable_options(self):
# Semi-common options that should be enabled for this report # Semi-common options that should be enabled for this report
self.enable_dict = { self.enable_dict = {
'max_gen' : 10, 'gen' : 10,
'page_breaks' : 0, 'pagebbg' : 0,
} }
def make_default_style(self,default_style): def make_default_style(self,default_style):
@ -966,14 +979,14 @@ class ComprehensiveAncestorsOptions(ReportOptions.ReportOptions):
""" """
self.cb_cite = gtk.CheckButton (_("Cite sources")) self.cb_cite = gtk.CheckButton (_("Cite sources"))
self.cb_cite.set_active (gtk.TRUE) self.cb_cite.set_active (self.options_dict['cites'])
dialog.add_option ('', self.cb_cite) dialog.add_option ('', self.cb_cite)
def parse_user_options(self,dialog): def parse_user_options(self,dialog):
""" """
Parses the custom options that we have added. Parses the custom options that we have added.
""" """
self.options_dict['cites'] = self.cb_cite.get_active () self.options_dict['cites'] = int(self.cb_cite.get_active ())
#------------------------------------------------------------------------ #------------------------------------------------------------------------

View File

@ -165,8 +165,8 @@ class DescendantOptions(ReportOptions.ReportOptions):
def enable_options(self): def enable_options(self):
# Semi-common options that should be enabled for this report # Semi-common options that should be enabled for this report
self.enable_dict = { self.enable_dict = {
'max_gen' : 10, 'gen' : 10,
'page_breaks' : 0, 'pagebbg' : 0,
} }
def make_default_style(self,default_style): def make_default_style(self,default_style):

File diff suppressed because it is too large Load Diff

View File

@ -70,16 +70,8 @@ class FtmAncestorReport(Report.Report):
This report needs the following parameters (class variables) This report needs the following parameters (class variables)
that come in the options class. that come in the options class.
max_gen - Maximum number of generations to include. gen - Maximum number of generations to include.
pg_breaks - Whether to include page breaks between generations. pagebgg - Whether to include page breaks between generations.
document - BaseDoc instance for the output file. Any class derived
from BaseDoc may be used
output - name of the output file.
None if report is not a standalone, in which case
somebody must take care of opening and initializing report
prior to writing.
newpage - if True, newpage is made before writing a report
""" """
Report.Report.__init__(self,database,person,options_class) Report.Report.__init__(self,database,person,options_class)
@ -1057,8 +1049,8 @@ class FtmAncestorOptions(ReportOptions.ReportOptions):
def enable_options(self): def enable_options(self):
# Semi-common options that should be enabled for this report # Semi-common options that should be enabled for this report
self.enable_dict = { self.enable_dict = {
'max_gen' : 10, 'gen' : 10,
'page_breaks' : 0, 'pagebbg' : 0,
} }
def make_default_style(self,default_style): def make_default_style(self,default_style):

View File

@ -74,16 +74,8 @@ class FtmDescendantReport(Report.Report):
This report needs the following parameters (class variables) This report needs the following parameters (class variables)
that come in the options class. that come in the options class.
max_gen - Maximum number of generations to include. gen - Maximum number of generations to include.
pg_breaks - Whether to include page breaks between generations. pagebbg - Whether to include page breaks between generations.
document - BaseDoc instance for the output file. Any class derived
from BaseDoc may be used
output - name of the output file.
None if report is not a standalone, in which case
somebody must take care of opening and initializing report
prior to writing.
newpage - if True, newpage is made before writing a report
""" """
Report.Report.__init__(self,database,person,options_class) Report.Report.__init__(self,database,person,options_class)
@ -1481,8 +1473,8 @@ class FtmDescendantOptions(ReportOptions.ReportOptions):
def enable_options(self): def enable_options(self):
# Semi-common options that should be enabled for this report # Semi-common options that should be enabled for this report
self.enable_dict = { self.enable_dict = {
'max_gen' : 10, 'gen' : 10,
'page_breaks' : 0, 'pagebbg' : 0,
} }
def make_default_style(self,default_style): def make_default_style(self,default_style):

View File

@ -28,6 +28,13 @@
import os import os
from gettext import gettext as _ from gettext import gettext as _
#------------------------------------------------------------------------
#
# Gnome/GTK modules
#
#------------------------------------------------------------------------
import gtk
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# GRAMPS modules # GRAMPS modules
@ -41,49 +48,47 @@ import Report
import GenericFilter import GenericFilter
import Errors import Errors
from QuestionDialog import ErrorDialog from QuestionDialog import ErrorDialog
import ReportOptions
#------------------------------------------------------------------------
#
# Gnome/GTK modules
#
#------------------------------------------------------------------------
import gtk
#------------------------------------------------------------------------
#
# Set up sane defaults for the book_item
#
#------------------------------------------------------------------------
_person_handle = ""
_filter_num = 0
_use_srcs = 0
_options = ( _person_handle, _filter_num, _use_srcs )
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# IndivComplete # IndivComplete
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
class IndivComplete(Report.Report): class IndivCompleteReport(Report.Report):
def __init__(self,database,person,options_class):
"""
Creates the IndivCompleteReport object that produces the report.
The arguments are:
database - the GRAMPS database instance
person - currently selected person
options_class - instance of the Options class for this report
This report needs the following parameters (class variables)
that come in the options class.
filter - Filter to be applied to the people of the database.
The option class carries its number, and the function
returning the list of filters.
cites - Whether or not to include source informaiton.
"""
Report.Report.__init__(self,database,person,options_class)
self.use_srcs = options_class.handler.options_dict['cites']
filter_num = options_class.get_filter_number()
filters = options_class.get_report_filters(person)
filters.extend(GenericFilter.CustomFilters.get_filters())
self.filter = filters[filter_num]
def __init__(self,database,person,output,document,filter,use_srcs,newpage=0):
self.d = document
self.use_srcs = use_srcs
self.filter = filter
c = database.get_researcher().get_name() c = database.get_researcher().get_name()
self.d.creator(c) self.doc.creator(c)
self.map = {} self.map = {}
self.database = database
self.person = person
self.output = output
self.setup() self.setup()
self.newpage = newpage
if output:
self.standalone = 1
self.d.open(output)
self.d.init()
else:
self.standalone = 0
def setup(self): def setup(self):
tbl = BaseDoc.TableStyle() tbl = BaseDoc.TableStyle()
@ -91,30 +96,26 @@ class IndivComplete(Report.Report):
tbl.set_columns(2) tbl.set_columns(2)
tbl.set_column_width(0,20) tbl.set_column_width(0,20)
tbl.set_column_width(1,80) tbl.set_column_width(1,80)
self.d.add_table_style("IDS-IndTable",tbl) self.doc.add_table_style("IDS-IndTable",tbl)
tbl = BaseDoc.TableStyle() tbl = BaseDoc.TableStyle()
tbl.set_width(100) tbl.set_width(100)
tbl.set_columns(2) tbl.set_columns(2)
tbl.set_column_width(0,50) tbl.set_column_width(0,50)
tbl.set_column_width(1,50) tbl.set_column_width(1,50)
self.d.add_table_style("IDS-ParentsTable",tbl) self.doc.add_table_style("IDS-ParentsTable",tbl)
cell = BaseDoc.TableCellStyle() cell = BaseDoc.TableCellStyle()
cell.set_top_border(1) cell.set_top_border(1)
cell.set_bottom_border(1) cell.set_bottom_border(1)
self.d.add_cell_style("IDS-TableHead",cell) self.doc.add_cell_style("IDS-TableHead",cell)
cell = BaseDoc.TableCellStyle() cell = BaseDoc.TableCellStyle()
self.d.add_cell_style("IDS-NormalCell",cell) self.doc.add_cell_style("IDS-NormalCell",cell)
cell = BaseDoc.TableCellStyle() cell = BaseDoc.TableCellStyle()
cell.set_longlist(1) cell.set_longlist(1)
self.d.add_cell_style("IDS-ListCell",cell) self.doc.add_cell_style("IDS-ListCell",cell)
def end(self):
if self.standalone:
self.d.close()
def write_fact(self,event): def write_fact(self,event):
if event == None: if event == None:
@ -140,7 +141,7 @@ class IndivComplete(Report.Report):
'place' : place } 'place' : place }
text = '%s %s' % (text,description) text = '%s %s' % (text,description)
self.d.start_row() self.doc.start_row()
self.normal_cell(name) self.normal_cell(name)
if self.use_srcs: if self.use_srcs:
for s in event.get_source_references(): for s in event.get_source_references():
@ -149,10 +150,10 @@ class IndivComplete(Report.Report):
text = "%s [%s]" % (text,src.get_gramps_id()) text = "%s [%s]" % (text,src.get_gramps_id())
self.slist.append(s) self.slist.append(s)
self.normal_cell(text) self.normal_cell(text)
self.d.end_row() self.doc.end_row()
def write_p_entry(self,label,parent,rel): def write_p_entry(self,label,parent,rel):
self.d.start_row() self.doc.start_row()
self.normal_cell(label) self.normal_cell(label)
if parent: if parent:
@ -160,48 +161,48 @@ class IndivComplete(Report.Report):
{ 'parent' : parent, 'relation' : rel }) { 'parent' : parent, 'relation' : rel })
else: else:
self.normal_cell('') self.normal_cell('')
self.d.end_row() self.doc.end_row()
def write_note(self): def write_note(self):
note = self.person.get_note() note = self.start_person.get_note()
if note == '': if note == '':
return return
self.d.start_table('note','IDS-IndTable') self.doc.start_table('note','IDS-IndTable')
self.d.start_row() self.doc.start_row()
self.d.start_cell('IDS-TableHead',2) self.doc.start_cell('IDS-TableHead',2)
self.d.start_paragraph('IDS-TableTitle') self.doc.start_paragraph('IDS-TableTitle')
self.d.write_text(_('Notes')) self.doc.write_text(_('Notes'))
self.d.end_paragraph() self.doc.end_paragraph()
self.d.end_cell() self.doc.end_cell()
self.d.end_row() self.doc.end_row()
self.d.start_row() self.doc.start_row()
self.d.start_cell('IDS-NormalCell',2) self.doc.start_cell('IDS-NormalCell',2)
format = self.person.get_note_format() format = self.start_person.get_note_format()
self.d.write_note(note,format,'IDS-Normal') self.doc.write_note(note,format,'IDS-Normal')
self.d.end_cell() self.doc.end_cell()
self.d.end_row() self.doc.end_row()
self.d.end_table() self.doc.end_table()
self.d.start_paragraph("IDS-Normal") self.doc.start_paragraph("IDS-Normal")
self.d.end_paragraph() self.doc.end_paragraph()
def write_alt_parents(self): def write_alt_parents(self):
if len(self.person.get_parent_family_handle_list()) < 2: if len(self.start_person.get_parent_family_handle_list()) < 2:
return return
self.d.start_table("altparents","IDS-IndTable") self.doc.start_table("altparents","IDS-IndTable")
self.d.start_row() self.doc.start_row()
self.d.start_cell("IDS-TableHead",2) self.doc.start_cell("IDS-TableHead",2)
self.d.start_paragraph("IDS-TableTitle") self.doc.start_paragraph("IDS-TableTitle")
self.d.write_text(_("Alternate Parents")) self.doc.write_text(_("Alternate Parents"))
self.d.end_paragraph() self.doc.end_paragraph()
self.d.end_cell() self.doc.end_cell()
self.d.end_row() self.doc.end_row()
for (family_handle,mrel,frel) in self.person.get_parent_family_handle_list(): for (family_handle,mrel,frel) in self.start_person.get_parent_family_handle_list():
if family_handle == self.person.get_main_parents_family_handle(): if family_handle == self.start_person.get_main_parents_family_handle():
continue continue
family = self.database.get_family_from_handle(family_handle) family = self.database.get_family_from_handle(family_handle)
@ -223,27 +224,27 @@ class IndivComplete(Report.Report):
else: else:
self.write_p_entry(_('Mother'),'','') self.write_p_entry(_('Mother'),'','')
self.d.end_table() self.doc.end_table()
self.d.start_paragraph("IDS-Normal") self.doc.start_paragraph("IDS-Normal")
self.d.end_paragraph() self.doc.end_paragraph()
def write_alt_names(self): def write_alt_names(self):
if len(self.person.get_alternate_names()) < 1: if len(self.start_person.get_alternate_names()) < 1:
return return
self.d.start_table("altparents","IDS-IndTable") self.doc.start_table("altparents","IDS-IndTable")
self.d.start_row() self.doc.start_row()
self.d.start_cell("IDS-TableHead",2) self.doc.start_cell("IDS-TableHead",2)
self.d.start_paragraph("IDS-TableTitle") self.doc.start_paragraph("IDS-TableTitle")
self.d.write_text(_("Alternate Names")) self.doc.write_text(_("Alternate Names"))
self.d.end_paragraph() self.doc.end_paragraph()
self.d.end_cell() self.doc.end_cell()
self.d.end_row() self.doc.end_row()
for name in self.person.get_alternate_names(): for name in self.start_person.get_alternate_names():
type = const.NameTypesMap.find_value(name.get_type()) type = const.NameTypesMap.find_value(name.get_type())
self.d.start_row() self.doc.start_row()
self.normal_cell(type) self.normal_cell(type)
text = name.get_regular_name() text = name.get_regular_name()
if self.use_srcs: if self.use_srcs:
@ -253,43 +254,43 @@ class IndivComplete(Report.Report):
text = "%s [%s]" % (text,src.get_gramps_id()) text = "%s [%s]" % (text,src.get_gramps_id())
self.slist.append(s) self.slist.append(s)
self.normal_cell(text) self.normal_cell(text)
self.d.end_row() self.doc.end_row()
self.d.end_table() self.doc.end_table()
self.d.start_paragraph('IDS-Normal') self.doc.start_paragraph('IDS-Normal')
self.d.end_paragraph() self.doc.end_paragraph()
def write_families(self): def write_families(self):
if not len(self.person.get_family_handle_list()): if not len(self.start_person.get_family_handle_list()):
return return
self.d.start_table("three","IDS-IndTable") self.doc.start_table("three","IDS-IndTable")
self.d.start_row() self.doc.start_row()
self.d.start_cell("IDS-TableHead",2) self.doc.start_cell("IDS-TableHead",2)
self.d.start_paragraph("IDS-TableTitle") self.doc.start_paragraph("IDS-TableTitle")
self.d.write_text(_("Marriages/Children")) self.doc.write_text(_("Marriages/Children"))
self.d.end_paragraph() self.doc.end_paragraph()
self.d.end_cell() self.doc.end_cell()
self.d.end_row() self.doc.end_row()
for family_handle in self.person.get_family_handle_list(): for family_handle in self.start_person.get_family_handle_list():
family = self.database.get_family_from_handle(family_handle) family = self.database.get_family_from_handle(family_handle)
if self.person.get_handle() == family.get_father_handle(): if self.start_person.get_handle() == family.get_father_handle():
spouse_id = family.get_mother_handle() spouse_id = family.get_mother_handle()
else: else:
spouse_id = family.get_father_handle() spouse_id = family.get_father_handle()
self.d.start_row() self.doc.start_row()
self.d.start_cell("IDS-NormalCell",2) self.doc.start_cell("IDS-NormalCell",2)
self.d.start_paragraph("IDS-Spouse") self.doc.start_paragraph("IDS-Spouse")
if spouse_id: if spouse_id:
spouse = self.database.get_person_from_handle(spouse_id) spouse = self.database.get_person_from_handle(spouse_id)
text = spouse.get_primary_name().get_regular_name() text = spouse.get_primary_name().get_regular_name()
else: else:
text = _("unknown") text = _("unknown")
self.d.write_text(text) self.doc.write_text(text)
self.d.end_paragraph() self.doc.end_paragraph()
self.d.end_cell() self.doc.end_cell()
self.d.end_row() self.doc.end_row()
for event_handle in family.get_event_list(): for event_handle in family.get_event_list():
if event_handle: if event_handle:
@ -298,82 +299,78 @@ class IndivComplete(Report.Report):
child_handle_list = family.get_child_handle_list() child_handle_list = family.get_child_handle_list()
if len(child_handle_list): if len(child_handle_list):
self.d.start_row() self.doc.start_row()
self.normal_cell(_("Children")) self.normal_cell(_("Children"))
self.d.start_cell("IDS-ListCell") self.doc.start_cell("IDS-ListCell")
self.d.start_paragraph("IDS-Normal") self.doc.start_paragraph("IDS-Normal")
first = 1 first = 1
for child_handle in child_handle_list: for child_handle in child_handle_list:
if first == 1: if first == 1:
first = 0 first = 0
else: else:
self.d.write_text('\n') self.doc.write_text('\n')
child = self.database.get_person_from_handle(child_handle) child = self.database.get_person_from_handle(child_handle)
self.d.write_text(child.get_primary_name().get_regular_name()) self.doc.write_text(child.get_primary_name().get_regular_name())
self.d.end_paragraph() self.doc.end_paragraph()
self.d.end_cell() self.doc.end_cell()
self.d.end_row() self.doc.end_row()
self.d.end_table() self.doc.end_table()
self.d.start_paragraph('IDS-Normal') self.doc.start_paragraph('IDS-Normal')
self.d.end_paragraph() self.doc.end_paragraph()
def write_sources(self): def write_sources(self):
if len(self.slist) == 0: if len(self.slist) == 0:
return return
self.d.start_table("three","IDS-IndTable") self.doc.start_table("three","IDS-IndTable")
self.d.start_row() self.doc.start_row()
self.d.start_cell("IDS-TableHead",2) self.doc.start_cell("IDS-TableHead",2)
self.d.start_paragraph("IDS-TableTitle") self.doc.start_paragraph("IDS-TableTitle")
self.d.write_text(_("Sources")) self.doc.write_text(_("Sources"))
self.d.end_paragraph() self.doc.end_paragraph()
self.d.end_cell() self.doc.end_cell()
self.d.end_row() self.doc.end_row()
for source in self.slist: for source in self.slist:
self.d.start_row() self.doc.start_row()
s_handle = source.get_base_handle() s_handle = source.get_base_handle()
src = self.database.get_source_from_handle(s_handle) src = self.database.get_source_from_handle(s_handle)
self.normal_cell(src.get_gramps_id()) self.normal_cell(src.get_gramps_id())
self.normal_cell(src.get_title()) self.normal_cell(src.get_title())
self.d.end_row() self.doc.end_row()
self.d.end_table() self.doc.end_table()
def write_facts(self): def write_facts(self):
self.d.start_table("two","IDS-IndTable") self.doc.start_table("two","IDS-IndTable")
self.d.start_row() self.doc.start_row()
self.d.start_cell("IDS-TableHead",2) self.doc.start_cell("IDS-TableHead",2)
self.d.start_paragraph("IDS-TableTitle") self.doc.start_paragraph("IDS-TableTitle")
self.d.write_text(_("Individual Facts")) self.doc.write_text(_("Individual Facts"))
self.d.end_paragraph() self.doc.end_paragraph()
self.d.end_cell() self.doc.end_cell()
self.d.end_row() self.doc.end_row()
event_handle_list = [ self.person.get_birth_handle(), self.person.get_death_handle() ] event_handle_list = [ self.start_person.get_birth_handle(), self.start_person.get_death_handle() ]
event_handle_list = event_handle_list + self.person.get_event_list() event_handle_list = event_handle_list + self.start_person.get_event_list()
for event_handle in event_handle_list: for event_handle in event_handle_list:
if event_handle: if event_handle:
event = self.database.get_event_from_handle(event_handle) event = self.database.get_event_from_handle(event_handle)
self.write_fact(event) self.write_fact(event)
self.d.end_table() self.doc.end_table()
self.d.start_paragraph("IDS-Normal") self.doc.start_paragraph("IDS-Normal")
self.d.end_paragraph() self.doc.end_paragraph()
def normal_cell(self,text): def normal_cell(self,text):
self.d.start_cell('IDS-NormalCell') self.doc.start_cell('IDS-NormalCell')
self.d.start_paragraph('IDS-Normal') self.doc.start_paragraph('IDS-Normal')
self.d.write_text(text) self.doc.write_text(text)
self.d.end_paragraph() self.doc.end_paragraph()
self.d.end_cell() self.doc.end_cell()
def write_report(self): def write_report(self):
if self.newpage:
self.d.page_break()
#plist = self.database.get_person_handle_map().values()
plist = self.database.get_person_handles(sort_handles=False) plist = self.database.get_person_handles(sort_handles=False)
if self.filter: if self.filter:
ind_list = self.filter.apply(self.database,plist) ind_list = self.filter.apply(self.database,plist)
@ -382,39 +379,38 @@ class IndivComplete(Report.Report):
count = 0 count = 0
for person_handle in ind_list: for person_handle in ind_list:
self.person = self.database.get_person_from_handle(person_handle) self.start_person = self.database.get_person_from_handle(person_handle)
self.write_person(count) self.write_person(count)
count = count + 1 count = count + 1
self.end()
def write_person(self,count): def write_person(self,count):
if count != 0: if count != 0:
self.d.page_break() self.doc.page_break()
self.slist = [] self.slist = []
media_list = self.person.get_media_list() media_list = self.start_person.get_media_list()
name = self.person.get_primary_name().get_regular_name() name = self.start_person.get_primary_name().get_regular_name()
self.d.start_paragraph("IDS-Title") self.doc.start_paragraph("IDS-Title")
self.d.write_text(_("Summary of %s") % name) self.doc.write_text(_("Summary of %s") % name)
self.d.end_paragraph() self.doc.end_paragraph()
self.d.start_paragraph("IDS-Normal") self.doc.start_paragraph("IDS-Normal")
self.d.end_paragraph() self.doc.end_paragraph()
if len(media_list) > 0: if len(media_list) > 0:
object_handle = media_list[0].get_reference_handle() object_handle = media_list[0].get_reference_handle()
object = self.database.get_object_from_handle(object_handle) object = self.database.get_object_from_handle(object_handle)
if object.get_mime_type()[0:5] == "image": if object.get_mime_type()[0:5] == "image":
file = object.get_path() file = object.get_path()
self.d.start_paragraph("IDS-Normal") self.doc.start_paragraph("IDS-Normal")
self.d.add_media_object(file,"row",4.0,4.0) self.doc.add_media_object(file,"row",4.0,4.0)
self.d.end_paragraph() self.doc.end_paragraph()
self.d.start_table("one","IDS-IndTable") self.doc.start_table("one","IDS-IndTable")
self.d.start_row() self.doc.start_row()
self.normal_cell("%s:" % _("Name")) self.normal_cell("%s:" % _("Name"))
name = self.person.get_primary_name() name = self.start_person.get_primary_name()
text = name.get_regular_name() text = name.get_regular_name()
if self.use_srcs: if self.use_srcs:
for s in name.get_source_references(): for s in name.get_source_references():
@ -423,17 +419,17 @@ class IndivComplete(Report.Report):
src = self.database.get_source_from_handle(src_handle) src = self.database.get_source_from_handle(src_handle)
text = "%s [%s]" % (text,src.get_gramps_id()) text = "%s [%s]" % (text,src.get_gramps_id())
self.normal_cell(text) self.normal_cell(text)
self.d.end_row() self.doc.end_row()
self.d.start_row() self.doc.start_row()
self.normal_cell("%s:" % _("Gender")) self.normal_cell("%s:" % _("Gender"))
if self.person.get_gender() == RelLib.Person.male: if self.start_person.get_gender() == RelLib.Person.male:
self.normal_cell(_("Male")) self.normal_cell(_("Male"))
else: else:
self.normal_cell(_("Female")) self.normal_cell(_("Female"))
self.d.end_row() self.doc.end_row()
family_handle = self.person.get_main_parents_family_handle() family_handle = self.start_person.get_main_parents_family_handle()
if family_handle: if family_handle:
family = self.database.get_family_from_handle(family_handle) family = self.database.get_family_from_handle(family_handle)
father_inst_id = family.get_father_handle() father_inst_id = family.get_father_handle()
@ -452,19 +448,19 @@ class IndivComplete(Report.Report):
father = "" father = ""
mother = "" mother = ""
self.d.start_row() self.doc.start_row()
self.normal_cell("%s:" % _("Father")) self.normal_cell("%s:" % _("Father"))
self.normal_cell(father) self.normal_cell(father)
self.d.end_row() self.doc.end_row()
self.d.start_row() self.doc.start_row()
self.normal_cell("%s:" % _("Mother")) self.normal_cell("%s:" % _("Mother"))
self.normal_cell(mother) self.normal_cell(mother)
self.d.end_row() self.doc.end_row()
self.d.end_table() self.doc.end_table()
self.d.start_paragraph("IDS-Normal") self.doc.start_paragraph("IDS-Normal")
self.d.end_paragraph() self.doc.end_paragraph()
self.write_alt_names() self.write_alt_names()
self.write_facts() self.write_facts()
@ -478,300 +474,130 @@ class IndivComplete(Report.Report):
# #
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
class IndivCompleteDialog(Report.TextReportDialog): class IndivCompleteOptions(ReportOptions.ReportOptions):
report_options = {} """
Defines options and provides handling interface.
"""
def __init__(self,database,person): def __init__(self,name,person_id=None):
Report.TextReportDialog.__init__(self,database,person,self.report_options) ReportOptions.ReportOptions.__init__(self,name,person_id)
def add_user_options(self): def set_new_options(self):
self.use_srcs = gtk.CheckButton(_('Include Source Information')) # Options specific for this report
self.use_srcs.show() self.options_dict = {
self.add_option('',self.use_srcs) 'cites' : 1,
}
self.options_help = {
'cites' : ("=0/1","Whether to cite sources.",
["Do not cite sources","Cite sources"],
True),
}
#------------------------------------------------------------------------ def enable_options(self):
# # Semi-common options that should be enabled for this report
# Customization hooks self.enable_dict = {
# 'filter' : 0,
#------------------------------------------------------------------------ }
def get_title(self):
"""The window title for this dialog"""
return "%s - %s - GRAMPS" %(_("Complete Individual Report"),_("Text Reports"))
def get_header(self, name): def get_report_filters(self,person):
"""The header line at the top of the dialog contents"""
return _("Complete Individual Report")
def get_target_browser_title(self):
"""The title of the window created when the 'browse' button is
clicked in the 'Save As' frame."""
return _("Save Complete Individual Report")
def get_stylesheet_savefile(self):
"""Where to save styles for this report."""
return "indiv_complete.xml"
def doc_uses_tables(self):
"""This report requires table support."""
return 1
def get_report_filters(self):
"""Set up the list of possible content filters.""" """Set up the list of possible content filters."""
return _get_report_filters(self.person) if person:
name = person.get_primary_name().get_name()
#------------------------------------------------------------------------ handle = person.get_handle()
#
# Create output styles appropriate to this report.
#
#------------------------------------------------------------------------
def make_default_style(self):
"""Make the default output style for the Individual Complete Report."""
_make_default_style(self.default_style)
def setup_report_options(self):
"""The 'Report Options' frame is not used in this dialog."""
pass
def make_report(self):
"""Create the object that will produce the Ancestor Chart.
All user dialog has already been handled and the output file
opened."""
act = self.use_srcs.get_active()
try:
MyReport = IndivComplete(self.db, self.person, self.target_path,
self.doc, self.filter, act)
MyReport.setup()
MyReport.write_report()
except Errors.FilterError, msg:
(m1,m2) = msg.messages()
ErrorDialog(m1,m2)
except Errors.ReportError, msg:
(m1,m2) = msg.messages()
ErrorDialog(m1,m2)
except:
import DisplayTrace
DisplayTrace.DisplayTrace()
def get_report_generations(self):
"""Return the default number of generations to start the
spinbox (zero to disable) and whether or not to include the
'page break between generations' check box"""
return (0, 0)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def report(database,person):
IndivCompleteDialog(database,person)
#------------------------------------------------------------------------
#
# Book Item Options dialog
#
#------------------------------------------------------------------------
class IndivCompleteBareReportDialog(Report.BareReportDialog):
def __init__(self,database,person,opt,stl):
self.options = opt
self.db = database
if self.options[0]:
self.person = self.db.get_person_from_handle(self.options[0])
else: else:
self.person = person name = 'PERSON'
self.style_name = stl handle = ''
Report.BareReportDialog.__init__(self,database,self.person) filt_id = GenericFilter.GenericFilter()
filt_id.set_name(name)
filt_id.add_rule(GenericFilter.HasIdOf([handle]))
self.filter_num = int(self.options[1]) all = GenericFilter.GenericFilter()
self.use_srcs = int(self.options[2]) all.set_name(_("Entire Database"))
self.new_person = None all.add_rule(GenericFilter.Everyone([]))
self.filter_combo.set_history(self.filter_num) des = GenericFilter.GenericFilter()
self.use_srcs_checkbox.set_active(self.use_srcs) des.set_name(_("Descendants of %s") % name)
des.add_rule(GenericFilter.IsDescendantOf([handle,1]))
self.window.run() ans = GenericFilter.GenericFilter()
ans.set_name(_("Ancestors of %s") % name)
ans.add_rule(GenericFilter.IsAncestorOf([handle,1]))
def make_default_style(self): com = GenericFilter.GenericFilter()
_make_default_style(self.default_style) com.set_name(_("People with common ancestor with %s") % name)
com.add_rule(GenericFilter.HasCommonAncestorWith([handle]))
def get_report_filters(self): return [filt_id,all,des,ans,com]
return _get_report_filters(self.person)
def add_user_options(self): def add_user_options(self,dialog):
self.use_srcs_checkbox = gtk.CheckButton(_('Include Source Information')) """
self.use_srcs_checkbox.show() Override the base class add_user_options task to add a menu that allows
self.add_option('',self.use_srcs_checkbox) the user to select the sort method.
"""
#------------------------------------------------------------------------
#
# Customization hooks
#
#------------------------------------------------------------------------
def get_title(self):
"""The window title for this dialog"""
return "%s - GRAMPS Book" % (_("Individual Complete"))
def get_header(self, name):
"""The header line at the top of the dialog contents"""
return _("Individual Complete Report for GRAMPS Book")
def get_stylesheet_savefile(self):
"""Where to save styles for this report."""
return "individual_summary.xml"
def on_cancel(self, obj):
pass
def on_ok_clicked(self, obj):
"""The user is satisfied with the dialog choices. Parse all options
and close the window."""
# Preparation
self.parse_style_frame()
self.parse_report_options_frame()
if self.new_person: self.use_srcs = gtk.CheckButton(_('Include Source Information'))
self.person = self.new_person self.use_srcs.set_active(self.options_dict['cites'])
self.filter_num = self.filter_combo.get_history() dialog.add_option('',self.use_srcs)
self.use_srcs = self.use_srcs_checkbox.get_active()
self.options = ( self.person.getId(), self.filter_num, self.use_srcs )
self.style_name = self.selected_style.get_name()
def get_report_generations(self): def parse_user_options(self,dialog):
"""Return the default number of generations to start the """
spinbox (zero to disable) and whether or not to include the Parses the custom options that we have added.
'page break between generations' check box""" """
return (0, 0) self.options_dict['cites'] = int(self.use_srcs.get_active ())
#------------------------------------------------------------------------ def make_default_style(self,default_style):
# """Make the default output style for the Individual Complete Report."""
# Function to write Book Item font = BaseDoc.FontStyle()
# font.set_bold(1)
#------------------------------------------------------------------------ font.set_type_face(BaseDoc.FONT_SANS_SERIF)
def write_book_item(database,person,doc,options,newpage=0): font.set_size(16)
"""Write the Individual Copmlete Report using the options set. p = BaseDoc.ParagraphStyle()
All user dialog has already been handled and the output file opened.""" p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)
try: p.set_font(font)
if options[0]: p.set_description(_("The style used for the title of the page."))
person = database.get_person_from_handle(options[0]) default_style.add_style("IDS-Title",p)
filter_num = int(options[1])
filters = _get_report_filters(person)
the_filter = filters[filter_num]
act = int(options[2])
return IndivComplete(database, person, None, doc, the_filter, act, newpage)
except Errors.ReportError, msg:
(m1,m2) = msg.messages()
ErrorDialog(m1,m2)
except Errors.FilterError, msg:
(m1,m2) = msg.messages()
ErrorDialog(m1,m2)
except:
import DisplayTrace
DisplayTrace.DisplayTrace()
return None
#------------------------------------------------------------------------
#
# Makes the default styles
#
#------------------------------------------------------------------------
def _make_default_style(default_style):
"""Make the default output style for the Individual Complete Report."""
font = BaseDoc.FontStyle()
font.set_bold(1)
font.set_type_face(BaseDoc.FONT_SANS_SERIF)
font.set_size(16)
p = BaseDoc.ParagraphStyle()
p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)
p.set_font(font)
p.set_description(_("The style used for the title of the page."))
default_style.add_style("IDS-Title",p)
font = BaseDoc.FontStyle()
font.set_bold(1)
font.set_type_face(BaseDoc.FONT_SANS_SERIF)
font.set_size(12)
font.set_italic(1)
p = BaseDoc.ParagraphStyle()
p.set_font(font)
p.set_description(_("The style used for category labels."))
default_style.add_style("IDS-TableTitle",p)
font = BaseDoc.FontStyle()
font.set_bold(1)
font.set_type_face(BaseDoc.FONT_SANS_SERIF)
font.set_size(12)
p = BaseDoc.ParagraphStyle()
p.set_font(font)
p.set_description(_("The style used for the spouse's name."))
default_style.add_style("IDS-Spouse",p)
font = BaseDoc.FontStyle()
font.set_size(12)
p = BaseDoc.ParagraphStyle()
p.set_font(font)
p.set_description(_('The basic style used for the text display.'))
default_style.add_style("IDS-Normal",p)
font = BaseDoc.FontStyle()
font.set_bold(1)
font.set_type_face(BaseDoc.FONT_SANS_SERIF)
font.set_size(12)
font.set_italic(1)
p = BaseDoc.ParagraphStyle()
p.set_font(font)
p.set_description(_("The style used for category labels."))
default_style.add_style("IDS-TableTitle",p)
#------------------------------------------------------------------------ font = BaseDoc.FontStyle()
# font.set_bold(1)
# Builds filter list for this report font.set_type_face(BaseDoc.FONT_SANS_SERIF)
# font.set_size(12)
#------------------------------------------------------------------------ p = BaseDoc.ParagraphStyle()
def _get_report_filters(person): p.set_font(font)
"""Set up the list of possible content filters.""" p.set_description(_("The style used for the spouse's name."))
default_style.add_style("IDS-Spouse",p)
name = person.get_primary_name().get_name() font = BaseDoc.FontStyle()
font.set_size(12)
filt_id = GenericFilter.GenericFilter() p = BaseDoc.ParagraphStyle()
filt_id.set_name(name) p.set_font(font)
filt_id.add_rule(GenericFilter.HasIdOf([person.get_handle()])) p.set_description(_('The basic style used for the text display.'))
default_style.add_style("IDS-Normal",p)
des = GenericFilter.GenericFilter()
des.set_name(_("Descendants of %s") % name)
des.add_rule(GenericFilter.IsDescendantOf([person.get_handle(),1]))
ans = GenericFilter.GenericFilter()
ans.set_name(_("Ancestors of %s") % name)
ans.add_rule(GenericFilter.IsAncestorOf([person.get_handle(),1]))
all = GenericFilter.GenericFilter()
all.set_name(_("Entire Database"))
all.add_rule(GenericFilter.Everyone([]))
return [filt_id,des,ans,all]
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# #
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from Plugins import register_report, register_book_item from Plugins import register_report
register_report( register_report(
report, name = 'indiv_complete',
_("Complete Individual Report"), category = const.CATEGORY_TEXT,
report_class = IndivCompleteReport,
options_class = IndivCompleteOptions,
modes = Report.MODE_GUI | Report.MODE_BKI | Report.MODE_CLI,
translated_name = _("Complete Individual Report"),
status=(_("Beta")), status=(_("Beta")),
category=_("Text Reports"),
description=_("Produces a complete report on the selected people."), description=_("Produces a complete report on the selected people."),
) )
register_book_item(
_("Individual Complete"),
_("Text"),
IndivCompleteBareReportDialog,
write_book_item,
_options,
"default" ,
"individual_complete.xml",
_make_default_style
)

View File

@ -83,20 +83,13 @@ class TimeLine(Report.Report):
when given two personal handles (like cmp). when given two personal handles (like cmp).
The option class carries its number, and the function The option class carries its number, and the function
returning the list of sort functions. returning the list of sort functions.
document - BaseDoc instance for the output file. Any class derived
from BaseDoc may be used
output - name of the output file.
None if report is not a standalone, in which case
somebody must take care of opening and initializing report
prior to writing.
newpage - if True, newpage is made before writing a report
""" """
Report.Report.__init__(self,database,person,options_class) Report.Report.__init__(self,database,person,options_class)
filter_num = options_class.get_filter_number() filter_num = options_class.get_filter_number()
filters = options_class.get_report_filters(person) filters = options_class.get_report_filters(person)
filters.extend(GenericFilter.CustomFilters.get_filters())
self.filter = filters[filter_num] self.filter = filters[filter_num]
self.title = options_class.handler.options_dict['title'] self.title = options_class.handler.options_dict['title']