diff --git a/ChangeLog b/ChangeLog index 29cb43014..d4ed6d218 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,12 @@ * src/plugins/FtmStyleDescendants.py (FtmDescendantOptions): Derive from base class. + * src/PeopleModel.py (PeopleModel.__init__): Make data_filter optional. + * src/plugins/FtmStyleAncestors.py: Convert to new scheme. + * src/plugins/AncestorReport.py: Convert to new scheme. + * src/plugins/DescendReport.py: Convert to new scheme. + * src/plugins/IndivSummary.py: Convert to new scheme. + 2004-12-21 Alex Roitman * src/docgen/AsciiDoc.py (reformat_para): Correctly check for empty paragraph. diff --git a/src/PeopleModel.py b/src/PeopleModel.py index bb3557201..3143869c5 100644 --- a/src/PeopleModel.py +++ b/src/PeopleModel.py @@ -66,7 +66,7 @@ _CHANGE_COL= 21 #------------------------------------------------------------------------- class PeopleModel(gtk.GenericTreeModel): - def __init__(self,db,data_filter): + def __init__(self,db,data_filter=None): gtk.GenericTreeModel.__init__(self) self.db = db diff --git a/src/plugins/AncestorReport.py b/src/plugins/AncestorReport.py index a2812ceae..699e57ce3 100644 --- a/src/plugins/AncestorReport.py +++ b/src/plugins/AncestorReport.py @@ -29,6 +29,7 @@ #------------------------------------------------------------------------ import os import string +from gettext import gettext as _ #------------------------------------------------------------------------ # @@ -41,7 +42,8 @@ import RelLib import Errors import DateHandler from QuestionDialog import ErrorDialog -from gettext import gettext as _ +import ReportOptions +import const _dd = DateHandler.create_display() @@ -52,14 +54,43 @@ _dd = DateHandler.create_display() #------------------------------------------------------------------------ class AncestorReport(Report.Report): - def __init__(self,database,person,max,pgbrk,doc,output,newpage=0): - self.map = {} + def __init__(self,database,person,options_class): + """ + Creates the AncestorReport object that produces the Ahnentafel 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. + + max_gen - Maximum number of generations to include. + pg_breaks - 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 + + """ self.database = database self.start = person - self.max_generations = max - self.pgbrk = pgbrk - self.doc = doc - self.newpage = newpage + self.options_class = options_class + + self.map = {} + + (self.max_generations,self.pgbrk) \ + = options_class.handler.get_report_generations() + + self.doc = options_class.handler.doc + output = options_class.handler.output + self.newpage = options_class.handler.newpage + if output: self.standalone = 1 self.doc.open(output) @@ -246,222 +277,62 @@ class AncestorReport(Report.Report): # # #------------------------------------------------------------------------ -class AncestorReportDialog(Report.TextReportDialog): +class AncestorOptions(ReportOptions.ReportOptions): - report_options = {} + """ + Defines options and provides handling interface. + """ - def __init__(self,database,person): - Report.TextReportDialog.__init__(self,database,person,self.report_options) + def __init__(self,name,person_id=None): + ReportOptions.ReportOptions.__init__(self,name,person_id) - #------------------------------------------------------------------------ - # - # Customization hooks - # - #------------------------------------------------------------------------ - def get_title(self): - """The window title for this dialog""" - return "%s - %s - GRAMPS" % (_("Ahnentafel Report"),_("Text Reports")) + def enable_options(self): + # Semi-common options that should be enabled for this report + self.enable_dict = { + 'max_gen' : 10, + 'page_breaks' : 0, + } - def get_header(self, name): - """The header line at the top of the dialog contents""" - return _("Ahnentafel Report for %s") % name - - 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 Ahnentafel Report") - - def get_stylesheet_savefile(self): - """Where to save styles for this report.""" - return "ancestor_report.xml" + def make_default_style(self,default_style): + """Make the default output style for the Ahnentafel report.""" + font = BaseDoc.FontStyle() + font.set(face=BaseDoc.FONT_SANS_SERIF,size=16,bold=1) + para = BaseDoc.ParagraphStyle() + para.set_font(font) + para.set_header_level(1) + para.set(pad=0.5) + para.set_description(_('The style used for the title of the page.')) + default_style.add_style("AHN-Title",para) - def make_default_style(self): - _make_default_style(self.default_style) - - def make_report(self): - """Create the object that will produce the Ahnentafel Report. - All user dialog has already been handled and the output file - opened.""" - try: - MyReport = AncestorReport(self.db, self.person, - self.max_gen, self.pg_brk, self.doc, self.target_path) - MyReport.write_report() - 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() - -#------------------------------------------------------------------------ -# -# Standalone report function -# -#------------------------------------------------------------------------ -def report(database,person): - AncestorReportDialog(database,person) - - -#------------------------------------------------------------------------ -# -# Set up sane defaults for the book_item -# -#------------------------------------------------------------------------ -_style_file = "ancestor_report.xml" -_style_name = "default" - -_person_handle = "" -_max_gen = 10 -_pg_brk = 0 -_options = ( _person_handle, _max_gen, _pg_brk ) - -#------------------------------------------------------------------------ -# -# Book Item Options dialog -# -#------------------------------------------------------------------------ -class AncestorBareReportDialog(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: - self.person = person - self.style_name = stl - - Report.BareReportDialog.__init__(self,database,self.person) - - self.max_gen = int(self.options[1]) - self.pg_brk = int(self.options[2]) - self.new_person = None - - self.generations_spinbox.set_value(self.max_gen) - self.pagebreak_checkbox.set_active(self.pg_brk) - - self.window.run() - - #------------------------------------------------------------------------ - # - # Customization hooks - # - #------------------------------------------------------------------------ - def make_default_style(self): - _make_default_style(self.default_style) - - def get_title(self): - """The window title for this dialog""" - return "%s - GRAMPS Book" % (_("Ahnentafel Report")) - - def get_header(self, name): - """The header line at the top of the dialog contents""" - return _("Ahnentafel Report for GRAMPS Book") - - def get_stylesheet_savefile(self): - """Where to save styles for this report.""" - return _style_file + font = BaseDoc.FontStyle() + font.set(face=BaseDoc.FONT_SANS_SERIF,size=14,italic=1) + para = BaseDoc.ParagraphStyle() + para.set_font(font) + para.set_header_level(2) + para.set(pad=0.5) + para.set_description(_('The style used for the generation header.')) + default_style.add_style("AHN-Generation",para) - 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.person = self.new_person - self.options = ( self.person.get_handle(), self.max_gen, self.pg_brk ) - self.style_name = self.selected_style.get_name() - -#------------------------------------------------------------------------ -# -# Function to write Book Item -# -#------------------------------------------------------------------------ -def write_book_item(database,person,doc,options,newpage=0): - """Write the Ahnentafel Report using options set. - All user dialog has already been handled and the output file opened.""" - try: - if options[0]: - person = database.get_person_from_handle(options[0]) - max_gen = int(options[1]) - pg_brk = int(options[2]) - return AncestorReport(database, person, max_gen, pg_brk, doc, None, 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() + para = BaseDoc.ParagraphStyle() + para.set(first_indent=-1.0,lmargin=1.0,pad=0.25) + para.set_description(_('The basic style used for the text display.')) + default_style.add_style("AHN-Entry",para) #------------------------------------------------------------------------ # # # #------------------------------------------------------------------------ -def _make_default_style(default_style): - """Make the default output style for the Ahnentafel report.""" - font = BaseDoc.FontStyle() - font.set(face=BaseDoc.FONT_SANS_SERIF,size=16,bold=1) - para = BaseDoc.ParagraphStyle() - para.set_font(font) - para.set_header_level(1) - para.set(pad=0.5) - para.set_description(_('The style used for the title of the page.')) - default_style.add_style("AHN-Title",para) - - font = BaseDoc.FontStyle() - font.set(face=BaseDoc.FONT_SANS_SERIF,size=14,italic=1) - para = BaseDoc.ParagraphStyle() - para.set_font(font) - para.set_header_level(2) - para.set(pad=0.5) - para.set_description(_('The style used for the generation header.')) - default_style.add_style("AHN-Generation",para) - - para = BaseDoc.ParagraphStyle() - para.set(first_indent=-1.0,lmargin=1.0,pad=0.25) - para.set_description(_('The basic style used for the text display.')) - default_style.add_style("AHN-Entry",para) - - -#------------------------------------------------------------------------ -# -# -# -#------------------------------------------------------------------------ -from Plugins import register_report, register_book_item - +from Plugins import register_report register_report( - report, - _("Ahnentafel Report"), - category=_("Text Reports"), + name = 'ancestor_report', + category = const.CATEGORY_TEXT, + report_class = AncestorReport, + options_class = AncestorOptions, + modes = Report.MODE_GUI | Report.MODE_BKI | Report.MODE_CLI, + translated_name = _("Ahnentafel Report"), status=(_("Beta")), description= _("Produces a textual ancestral report"), author_name="Donald N. Allingham", author_email="dallingham@users.sourceforge.net" ) - -# (name,category,options_dialog,write_book_item,options,style_name,style_file,make_default_style) -register_book_item( - _("Ahnentafel Report"), - _("Text"), - AncestorBareReportDialog, - write_book_item, - _options, - _style_name, - _style_file, - _make_default_style - ) diff --git a/src/plugins/DescendReport.py b/src/plugins/DescendReport.py index 9b9a5e1d0..2e0394218 100644 --- a/src/plugins/DescendReport.py +++ b/src/plugins/DescendReport.py @@ -28,6 +28,7 @@ # #------------------------------------------------------------------------ import os +from gettext import gettext as _ #------------------------------------------------------------------------ # @@ -39,7 +40,8 @@ import BaseDoc import Errors import Sort from QuestionDialog import ErrorDialog -from gettext import gettext as _ +import ReportOptions +import const #------------------------------------------------------------------------ # @@ -58,15 +60,42 @@ _DIED = _('d.') #------------------------------------------------------------------------ class DescendantReport: - def __init__(self,database,person,max,pgbrk,doc,output,newpage=0): + def __init__(self,database,person,options_class): + """ + Creates the DescendantReport 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. + + max_gen - Maximum number of generations to include. + pg_breaks - 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 + + """ self.database = database self.creator = database.get_researcher().get_name() - self.name = output self.person = person - self.max_generations = max - self.pgbrk = pgbrk - self.doc = doc - self.newpage = newpage + self.options_class = options_class + + (self.max_generations,self.pgbrk) \ + = options_class.handler.get_report_generations() + + self.doc = options_class.handler.doc + output = options_class.handler.output + self.newpage = options_class.handler.newpage + if output: self.standalone = 1 self.doc.open(output) @@ -136,214 +165,62 @@ class DescendantReport: child = self.database.get_person_from_handle(child_handle) self.dump(level+1,child) -#------------------------------------------------------------------------ -# -# DescendantReportDialog -# -#------------------------------------------------------------------------ -class DescendantReportDialog(Report.TextReportDialog): - def __init__(self,database,person): - Report.TextReportDialog.__init__(self,database,person) - - def get_title(self): - """The window title for this dialog""" - return "%s - %s - GRAMPS" % (_("Descendant Report"),_("Text Reports")) - - def get_header(self, name): - """The header line at the top of the dialog contents""" - return _("Descendant Report for %s") % name - - 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 Descendant Report") - - def get_stylesheet_savefile(self): - """Where to save styles for this report.""" - return "descend_report.xml" - - def make_default_style(self): - _make_default_style(self.default_style) - - def make_report(self): - """Create the object that will produce the Descendant Report. - All user dialog has already been handled and the output file - opened.""" - try: - MyReport = DescendantReport(self.db, self.person, - self.max_gen, self.pg_brk, self.doc, self.target_path) - MyReport.write_report() - 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() - -#------------------------------------------------------------------------ -# -# Standalone report function -# -#------------------------------------------------------------------------ -def report(database,person): - DescendantReportDialog(database,person) - -#------------------------------------------------------------------------ -# -# Set up sane defaults for the book_item -# -#------------------------------------------------------------------------ -_style_file = "descend_report.xml" -_style_name = "default" - -_person_handle = "" -_max_gen = 1 -_pg_brk = 0 -_options = ( _person_handle, _max_gen, _pg_brk ) - -#------------------------------------------------------------------------ -# -# Book Item Options dialog -# -#------------------------------------------------------------------------ -class DescendantBareReportDialog(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: - self.person = person - - self.style_name = stl - - Report.BareReportDialog.__init__(self,database,self.person) - - self.max_gen = int(self.options[1]) - self.pg_brk = int(self.options[2]) - self.new_person = None - - self.generations_spinbox.set_value(self.max_gen) - self.pagebreak_checkbox.set_active(self.pg_brk) - - self.window.run() - - #------------------------------------------------------------------------ - # - # Customization hooks - # - #------------------------------------------------------------------------ - def make_default_style(self): - _make_default_style(self.default_style) - - def get_title(self): - """The window title for this dialog""" - return "%s - GRAMPS Book" % (_("Descendant Report")) - - def get_header(self, name): - """The header line at the top of the dialog contents""" - return _("Descendant Report for GRAMPS Book") - - def get_stylesheet_savefile(self): - """Where to save styles for this report.""" - return _style_file - - 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.person = self.new_person - self.options = ( self.person.get_handle(), self.max_gen, self.pg_brk ) - self.style_name = self.selected_style.get_name() - -#------------------------------------------------------------------------ -# -# Function to write Book Item -# -#------------------------------------------------------------------------ -def write_book_item(database,person,doc,options,newpage=0): - """Write the Descendant Report using the options set. - All user dialog has already been handled and the output file opened.""" - try: - if options[0]: - person = database.get_person_from_handle(options[0]) - max_gen = int(options[1]) - pg_brk = int(options[2]) - return DescendantReport(database, person, max_gen, - pg_brk, doc, None, 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() - #------------------------------------------------------------------------ # # # #------------------------------------------------------------------------ -def _make_default_style(default_style): - """Make the default output style for the Descendant Report.""" - f = BaseDoc.FontStyle() - f.set_size(14) - f.set_type_face(BaseDoc.FONT_SANS_SERIF) - f.set_bold(1) - p = BaseDoc.ParagraphStyle() - p.set_header_level(1) - p.set_font(f) - p.set_description(_("The style used for the title of the page.")) - default_style.add_style("DR-Title",p) +class DescendantOptions(ReportOptions.ReportOptions): - f = BaseDoc.FontStyle() - for i in range(1,32): + """ + Defines options and provides handling interface. + """ + + def __init__(self,name,person_id=None): + ReportOptions.ReportOptions.__init__(self,name,person_id) + + def enable_options(self): + # Semi-common options that should be enabled for this report + self.enable_dict = { + 'max_gen' : 10, + 'page_breaks' : 0, + } + + def make_default_style(self,default_style): + """Make the default output style for the Descendant Report.""" + f = BaseDoc.FontStyle() + f.set_size(14) + f.set_type_face(BaseDoc.FONT_SANS_SERIF) + f.set_bold(1) p = BaseDoc.ParagraphStyle() + p.set_header_level(1) p.set_font(f) - p.set_left_margin(min(10.0,float(i-1))) - p.set_description(_("The style used for the level %d display.") % i) - default_style.add_style("DR-Level%d" % i,p) + p.set_description(_("The style used for the title of the page.")) + default_style.add_style("DR-Title",p) + + f = BaseDoc.FontStyle() + for i in range(1,32): + p = BaseDoc.ParagraphStyle() + p.set_font(f) + p.set_left_margin(min(10.0,float(i-1))) + p.set_description(_("The style used for the level %d display.") % i) + default_style.add_style("DR-Level%d" % i,p) #------------------------------------------------------------------------ # # # #------------------------------------------------------------------------ -from Plugins import register_report, register_book_item - +from Plugins import register_report register_report( - report, - _("Descendant Report"), - category=_("Text Reports"), + name = 'descend_report', + category = const.CATEGORY_TEXT, + report_class = DescendantReport, + options_class = DescendantOptions, + modes = Report.MODE_GUI | Report.MODE_BKI | Report.MODE_CLI, + translated_name = _("Descendant Report"), status=(_("Beta")), description=_("Generates a list of descendants of the active person"), author_name="Donald N. Allingham", author_email="dallingham@users.sourceforge.net" ) - -# (name,category,options_dialog,write_book_item,options,style_name,style_file,make_default_style) -register_book_item( - _("Descendant Report"), - _("Text"), - DescendantBareReportDialog, - write_book_item, - _options, - _style_name, - _style_file, - _make_default_style - ) diff --git a/src/plugins/FtmStyleAncestors.py b/src/plugins/FtmStyleAncestors.py index a8a0eb833..8905eec31 100644 --- a/src/plugins/FtmStyleAncestors.py +++ b/src/plugins/FtmStyleAncestors.py @@ -27,6 +27,7 @@ #------------------------------------------------------------------------ import os import cStringIO +from gettext import gettext as _ #------------------------------------------------------------------------ # @@ -38,7 +39,16 @@ import BaseDoc import RelLib import Errors from QuestionDialog import ErrorDialog -from gettext import gettext as _ +import ReportOptions +import DateHandler +import const + +#------------------------------------------------------------------------ +# +# +# +#------------------------------------------------------------------------ +dd = DateHandler.create_display() #------------------------------------------------------------------------ # @@ -47,14 +57,43 @@ from gettext import gettext as _ #------------------------------------------------------------------------ class FtmAncestorReport(Report.Report): - def __init__(self,database,person,max,pgbrk,doc,output,newpage=0): - self.map = {} + def __init__(self,database,person,options_class): + """ + Creates the Ftm-Style Ancestor 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. + + max_gen - Maximum number of generations to include. + pg_breaks - 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 + + """ self.database = database self.start = person - self.max_generations = max - self.pgbrk = pgbrk - self.doc = doc - self.newpage = newpage + self.options_class = options_class + + self.map = {} + + (self.max_generations,self.pgbrk) \ + = options_class.handler.get_report_generations() + + self.doc = options_class.handler.doc + output = options_class.handler.output + self.newpage = options_class.handler.newpage + if output: self.standalone = 1 self.doc.open(output) @@ -454,7 +493,7 @@ class FtmAncestorReport(Report.Report): self.doc.write_text(base.get_title()) for item in [ base.get_author(), base.get_publication_info(), base.get_abbreviation(), - srcref.get_date().get_date(),]: + dd.display(srcref.get_date()),]: if item: self.doc.write_text('; %s' % item) @@ -1018,241 +1057,85 @@ class FtmAncestorReport(Report.Report): 'father' : father_name, }) self.doc.write_text(' '); +#------------------------------------------------------------------------ +# +# +# +#------------------------------------------------------------------------ +class FtmAncestorOptions(ReportOptions.ReportOptions): -def _make_default_style(default_style): - """Make the default output style for the FTM Style Ancestral report.""" - font = BaseDoc.FontStyle() - font.set(face=BaseDoc.FONT_SANS_SERIF,size=16,bold=1,italic=1) - para = BaseDoc.ParagraphStyle() - para.set_font(font) - para.set_header_level(1) - para.set_alignment(BaseDoc.PARA_ALIGN_CENTER) - para.set(pad=0.5) - para.set_description(_('The style used for the title of the page.')) - default_style.add_style("FTA-Title",para) - - font = BaseDoc.FontStyle() - font.set(face=BaseDoc.FONT_SANS_SERIF,size=14,italic=1) - para = BaseDoc.ParagraphStyle() - para.set_font(font) - para.set_header_level(2) - para.set(pad=0.5) - para.set_alignment(BaseDoc.PARA_ALIGN_CENTER) - para.set_description(_('The style used for the generation header.')) - default_style.add_style("FTA-Generation",para) - - para = BaseDoc.ParagraphStyle() - para.set(first_indent=-1.0,lmargin=1.0,pad=0.25) - para.set_description(_('The basic style used for the text display.')) - default_style.add_style("FTA-Entry",para) + """ + Defines options and provides handling interface. + """ - para = BaseDoc.ParagraphStyle() - para.set(lmargin=1.0,pad=0.05) - para.set_description(_('The basic style used for the text display.')) - default_style.add_style("FTA-Details",para) + def __init__(self,name,person_id=None): + ReportOptions.ReportOptions.__init__(self,name,person_id) - para = BaseDoc.ParagraphStyle() - para.set(lmargin=1.0,pad=0.25) - para.set_description(_('The basic style used for the text display.')) - default_style.add_style("FTA-SubEntry",para) + def enable_options(self): + # Semi-common options that should be enabled for this report + self.enable_dict = { + 'max_gen' : 10, + 'page_breaks' : 0, + } - para = BaseDoc.ParagraphStyle() - para.set(pad=0.05) - para.set_description(_('The basic style used for the text display.')) - default_style.add_style("FTA-Endnotes",para) + def make_default_style(self,default_style): + """Make the default output style for the FTM Style Ancestor report.""" + font = BaseDoc.FontStyle() + font.set(face=BaseDoc.FONT_SANS_SERIF,size=16,bold=1,italic=1) + para = BaseDoc.ParagraphStyle() + para.set_font(font) + para.set_header_level(1) + para.set_alignment(BaseDoc.PARA_ALIGN_CENTER) + para.set(pad=0.5) + para.set_description(_('The style used for the title of the page.')) + default_style.add_style("FTA-Title",para) + font = BaseDoc.FontStyle() + font.set(face=BaseDoc.FONT_SANS_SERIF,size=14,italic=1) + para = BaseDoc.ParagraphStyle() + para.set_font(font) + para.set_header_level(2) + para.set(pad=0.5) + para.set_alignment(BaseDoc.PARA_ALIGN_CENTER) + para.set_description(_('The style used for the generation header.')) + default_style.add_style("FTA-Generation",para) + + para = BaseDoc.ParagraphStyle() + para.set(first_indent=-1.0,lmargin=1.0,pad=0.25) + para.set_description(_('The basic style used for the text display.')) + default_style.add_style("FTA-Entry",para) + + para = BaseDoc.ParagraphStyle() + para.set(lmargin=1.0,pad=0.05) + para.set_description(_('The basic style used for the text display.')) + default_style.add_style("FTA-Details",para) + + para = BaseDoc.ParagraphStyle() + para.set(lmargin=1.0,pad=0.25) + para.set_description(_('The basic style used for the text display.')) + default_style.add_style("FTA-SubEntry",para) + + para = BaseDoc.ParagraphStyle() + para.set(pad=0.05) + para.set_description(_('The basic style used for the text display.')) + default_style.add_style("FTA-Endnotes",para) #------------------------------------------------------------------------ # # # #------------------------------------------------------------------------ -class FtmAncestorReportDialog(Report.TextReportDialog): - - report_options = {} - - def __init__(self,database,person): - Report.TextReportDialog.__init__(self,database,person,self.report_options) - - #------------------------------------------------------------------------ - # - # Customization hooks - # - #------------------------------------------------------------------------ - def get_title(self): - """The window title for this dialog""" - return "%s - %s - GRAMPS" % (_("FTM Style Ancestral Report"),_("Text Reports")) - - def get_header(self, name): - """The header line at the top of the dialog contents""" - return _("FTM Style Ancestral Report for %s") % name - - 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 Ancestor Report") - - def get_stylesheet_savefile(self): - """Where to save styles for this report.""" - return "ftm_ancestor_report.xml" - - def make_default_style(self): - _make_default_style(self.default_style) - - def make_report(self): - """Create the object that will produce the FTM Style Ancestral Report. - All user dialog has already been handled and the output file - opened.""" - try: - MyReport = FtmAncestorReport(self.db, self.person, - self.max_gen, self.pg_brk, self.doc, self.target_path) - MyReport.write_report() - 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() - -#------------------------------------------------------------------------ -# -# Standalone report function -# -#------------------------------------------------------------------------ -def report(database,person): - FtmAncestorReportDialog(database,person) - -#------------------------------------------------------------------------ -# -# Set up sane defaults for the book_item -# -#------------------------------------------------------------------------ -_style_file = "ftm_ancestor_report.xml" -_style_name = "default" - -_person_handle = "" -_max_gen = 10 -_pg_brk = 0 -_options = ( _person_handle, _max_gen, _pg_brk ) - -#------------------------------------------------------------------------ -# -# Book Item Options dialog -# -#------------------------------------------------------------------------ -class FtmAncestorBareReportDialog(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: - self.person = person - self.style_name = stl - - Report.BareReportDialog.__init__(self,database,self.person) - - self.max_gen = int(self.options[1]) - self.pg_brk = int(self.options[2]) - self.new_person = None - - self.generations_spinbox.set_value(self.max_gen) - self.pagebreak_checkbox.set_active(self.pg_brk) - - self.window.run() - - #------------------------------------------------------------------------ - # - # Customization hooks - # - #------------------------------------------------------------------------ - def make_default_style(self): - _make_default_style(self.default_style) - - def get_title(self): - """The window title for this dialog""" - return "%s - GRAMPS Book" % (_("FTM Style Ancestor Report")) - - def get_header(self, name): - """The header line at the top of the dialog contents""" - return _("FTM Style Ancestor Report for GRAMPS Book") - - def get_stylesheet_savefile(self): - """Where to save styles for this report.""" - return _style_file - - 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.person = self.new_person - self.options = ( self.person.get_handle(), self.max_gen, self.pg_brk ) - self.style_name = self.selected_style.get_name() - - -#------------------------------------------------------------------------ -# -# Function to write Book Item -# -#------------------------------------------------------------------------ -def write_book_item(database,person,doc,options,newpage=0): - """Write the FTM Style Ancestor Report options set. - All user dialog has already been handled and the output file opened.""" - try: - if options[0]: - person = database.get_person_from_handle(options[0]) - max_gen = int(options[1]) - pg_brk = int(options[2]) - return FtmAncestorReport(database, person, max_gen, pg_brk, doc, None, 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() - -#------------------------------------------------------------------------ -# -# -# -#------------------------------------------------------------------------ -from Plugins import register_report, register_book_item +from Plugins import register_report register_report( - report, - _("FTM Style Ancestor Report"), - category=_("Text Reports"), + name = 'ftm_ancestor_report', + category = const.CATEGORY_TEXT, + report_class = FtmAncestorReport, + options_class = FtmAncestorOptions, + modes = Report.MODE_GUI | Report.MODE_BKI | Report.MODE_CLI, + translated_name = _("FTM Style Ancestor Report"), status=(_("Beta")), description= _("Produces a textual ancestral report similar to Family Tree Maker."), author_name="Donald N. Allingham", author_email="dallingham@users.sourceforge.net" ) - -# (name,category,options_dialog,write_book_item,options,style_name,style_file,make_default_style) -register_book_item( - _("FTM Style Ancestor Report"), - _("Text"), - FtmAncestorBareReportDialog, - write_book_item, - _options, - _style_name, - _style_file, - _make_default_style - ) - diff --git a/src/plugins/IndivSummary.py b/src/plugins/IndivSummary.py index ed3a8dcc7..100a73b69 100644 --- a/src/plugins/IndivSummary.py +++ b/src/plugins/IndivSummary.py @@ -28,6 +28,7 @@ # #------------------------------------------------------------------------ import os +from gettext import gettext as _ #------------------------------------------------------------------------ # @@ -48,19 +49,8 @@ import StyleEditor import Report import Errors from QuestionDialog import ErrorDialog -from gettext import gettext as _ - -#------------------------------------------------------------------------ -# -# Set up sane defaults for the book_item -# -#------------------------------------------------------------------------ - -_person_handle = "" -_max_gen = 0 -_pg_brk = 0 -_options = ( _person_handle, _max_gen, _pg_brk ) - +import ReportOptions +import const #------------------------------------------------------------------------ # @@ -69,23 +59,47 @@ _options = ( _person_handle, _max_gen, _pg_brk ) #------------------------------------------------------------------------ class IndivSummary(Report.Report): - def __init__(self,database,person,output,document,newpage=0): - self.d = document + def __init__(self,database,person,options_class): + """ + Creates the Ftm-Style Descendant 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. + + 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 + + """ + self.database = database + self.person = person + self.options_class = options_class + + + self.d = options_class.handler.doc + self.output = options_class.handler.output + self.newpage = options_class.handler.newpage + c = database.get_researcher().get_name() self.d.creator(c) self.map = {} - self.database = database - self.person = person - self.output = output self.setup() - if output: + if self.output: self.standalone = 1 - self.d.open(output) + self.d.open(self.output) self.d.init() else: self.standalone = 0 - self.newpage = newpage def setup(self): tbl = BaseDoc.TableStyle() @@ -347,233 +361,71 @@ class IndivSummary(Report.Report): #------------------------------------------------------------------------ # -# IndivSummaryDialog +# # #------------------------------------------------------------------------ -class IndivSummaryDialog(Report.TextReportDialog): +class IndivSummaryOptions(ReportOptions.ReportOptions): - report_options = {} + """ + Defines options and provides handling interface. + """ - def __init__(self,database,person): - Report.TextReportDialog.__init__(self,database,person, self.report_options) + def __init__(self,name,person_id=None): + ReportOptions.ReportOptions.__init__(self,name,person_id) - def get_title(self): - """The window title for this dialog""" - return "%s - %s - GRAMPS" %(_("Individual Summary"),_("Text Reports")) - - def get_header(self, name): - """The header line at the top of the dialog contents""" - return _("Individual Summary for %s") % name - - 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 Individual Summary") - - def get_stylesheet_savefile(self): - """Where to save styles for this report.""" - return "individual_summary.xml" - - def doc_uses_tables(self): - """This report requires table support.""" - return 1 - - def make_default_style(self): + def make_default_style(self,default_style): """Make the default output style for the Individual Summary 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.""" - try: - MyReport = IndivSummary(self.db, self.person, - self.target_path, self.doc) - 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() - -#------------------------------------------------------------------------ -# -# report -# -#------------------------------------------------------------------------ -def report(database,person): - IndivSummaryDialog(database,person) - -#------------------------------------------------------------------------ -# -# Book Item Options dialog -# -#------------------------------------------------------------------------ -class IndivSummaryBareReportDialog(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: - self.person = person - self.style_name = stl - - Report.BareReportDialog.__init__(self,database,self.person) - - self.max_gen = int(self.options[1]) - self.pg_brk = int(self.options[2]) - self.new_person = None - - self.generations_spinbox.set_value(self.max_gen) - self.pagebreak_checkbox.set_active(self.pg_brk) + 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("IVS-Title",p) - self.window.run() - - def get_report_filters(self): - return [] - - def make_default_style(self): - _make_default_style(self.default_style) - - #------------------------------------------------------------------------ - # - # Customization hooks - # - #------------------------------------------------------------------------ - def get_title(self): - """The window title for this dialog""" - return "%s - GRAMPS Book" % (_("Individual Summary")) - - def get_header(self, name): - """The header line at the top of the dialog contents""" - return _("Individual Summary Report for GRAMPS Book") - - def get_stylesheet_savefile(self): - """Where to save styles for this report.""" - return "individual_summary.xml" + 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("IVS-TableTitle",p) - 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.person = self.new_person - self.options = ( self.person.get_handle(), self.max_gen, self.pg_brk ) - self.style_name = self.selected_style.get_name() - - -#------------------------------------------------------------------------ -# -# Function to write Book Item -# -#------------------------------------------------------------------------ -def write_book_item(database,person,doc,options,newpage=0): - """Write the FTM Style Descendant Report options set. - All user dialog has already been handled and the output file opened.""" - try: - if options[0]: - person = database.get_person_from_handle(options[0]) - max_gen = int(options[1]) - pg_brk = int(options[2]) - return IndivSummary(database, person, None, doc, 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() - -#------------------------------------------------------------------------ -# -# Makes the default styles -# -#------------------------------------------------------------------------ -def _make_default_style(default_style): - """Make the default output style for the Individual Summary 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("IVS-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("IVS-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("IVS-Spouse",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("IVS-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("IVS-Normal",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("IVS-Normal",p) #------------------------------------------------------------------------ # # Register plugins # #------------------------------------------------------------------------ -from Plugins import register_report, register_book_item - +from Plugins import register_report register_report( - report, - _("Individual Summary"), + name = 'individual_summary', + category = const.CATEGORY_TEXT, + report_class = IndivSummary, + options_class = IndivSummaryOptions, + modes = Report.MODE_GUI | Report.MODE_BKI | Report.MODE_CLI, + translated_name = _("Individual Summary"), status=(_("Beta")), - category=_("Text Reports"), description=_("Produces a detailed report on the selected person."), author_name="Donald N. Allingham", author_email="dallingham@users.sourceforge.net" - ) - -register_book_item( - _("Individual Summary"), - _("Text"), - IndivSummaryBareReportDialog, - write_book_item, - _options, - "default" , - "individual_summary.xml", - _make_default_style - ) -