This is speed/memory improvement number 1 for the Ancestor report
added a CalcItems helper class to calculate text for boxes. also fixed some strings that were concatinated (due to length), but did not have a space at the end or beginning. svn: r16367
This commit is contained in:
		@@ -100,13 +100,6 @@ class PersonBox(AncestorBoxBase):
 | 
			
		||||
        AncestorBoxBase.__init__(self, "AC2-box")
 | 
			
		||||
        self.level = (self.x_index(level), level)
 | 
			
		||||
 | 
			
		||||
    def calc_text(self, database, person, family):
 | 
			
		||||
        """ Calculate the text for this box """
 | 
			
		||||
        gui = GUIConnect()
 | 
			
		||||
        calc = gui.calc_lines(database)
 | 
			
		||||
        self.text = calc.calc_lines(person, family,
 | 
			
		||||
                                    gui.working_lines(self.level[1]))
 | 
			
		||||
 | 
			
		||||
class FamilyBox(AncestorBoxBase):
 | 
			
		||||
    """
 | 
			
		||||
    Calculates information about the box that will print on a page
 | 
			
		||||
@@ -115,12 +108,6 @@ class FamilyBox(AncestorBoxBase):
 | 
			
		||||
        AncestorBoxBase.__init__(self, "AC2-fam-box")
 | 
			
		||||
        self.level = (self.x_index(level)+1, level)
 | 
			
		||||
    
 | 
			
		||||
    def calc_text(self, database, person, family):
 | 
			
		||||
        """ Calculate the text for this box """
 | 
			
		||||
        gui = GUIConnect()
 | 
			
		||||
        calc = gui.calc_lines(database)
 | 
			
		||||
        self.text = calc.calc_lines(person, family, [gui.get_val('dispmarr')])
 | 
			
		||||
 | 
			
		||||
    #def x_index(self):
 | 
			
		||||
    #    """ calculate the row that this person is in """
 | 
			
		||||
    #    return log2(self.level[0]) +1
 | 
			
		||||
@@ -179,10 +166,70 @@ class TitleA(TitleBox):
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# make_ancestor_tree
 | 
			
		||||
# CalcItems           (helper class to calculate text)
 | 
			
		||||
# make_ancestor_tree  (main recursive functions)
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------
 | 
			
		||||
class MakeAncestorTree():
 | 
			
		||||
class CalcItems(object):
 | 
			
		||||
    def __init__(self, dbase):
 | 
			
		||||
        __gui = GUIConnect()
 | 
			
		||||
 | 
			
		||||
        #calculate the printed lines for each box
 | 
			
		||||
        #display_repl = [] #Not used in this report
 | 
			
		||||
        #str = ""
 | 
			
		||||
        #if self.get_val('miss_val'):
 | 
			
		||||
        #    str = "_____"
 | 
			
		||||
        self.__calc_l =  CalcLines(dbase, [])
 | 
			
		||||
        
 | 
			
		||||
        self.__blank_father = None
 | 
			
		||||
        self.__blank_mother = None
 | 
			
		||||
        
 | 
			
		||||
        main = self.__calc_l.calc_lines( None, None, __gui.get_val('dispf'))
 | 
			
		||||
        secn = self.__calc_l.calc_lines( None, None, __gui.get_val('disp_sec'))
 | 
			
		||||
 | 
			
		||||
        self.disp_father = __gui.get_val('dispf')
 | 
			
		||||
        self.__blank_father = main
 | 
			
		||||
        self.disp_mother = __gui.get_val('dispf')
 | 
			
		||||
        self.__blank_mother = main
 | 
			
		||||
        if __gui.get_val('dif_sec') == 1:
 | 
			
		||||
            self.disp_father = __gui.get_val('disp_sec')
 | 
			
		||||
            self.__blank_father = secn
 | 
			
		||||
        elif __gui.get_val('dif_sec') == 2:
 | 
			
		||||
            self.disp_mother = __gui.get_val('disp_sec')
 | 
			
		||||
            self.__blank_mother = secn
 | 
			
		||||
        
 | 
			
		||||
        self.disp_marr = [__gui.get_val('dispmarr')]
 | 
			
		||||
        self.__blank_marriage = \
 | 
			
		||||
            self.__calc_l.calc_lines(None, None, self.disp_marr)
 | 
			
		||||
 | 
			
		||||
    def calc_person(self, index, indi_handle, fams_handle):
 | 
			
		||||
        working_lines = ""
 | 
			
		||||
        if index == 1 or index % 2 == 0:  #The center person always uses main
 | 
			
		||||
            if indi_handle == fams_handle == None:
 | 
			
		||||
                working_lines = self.__blank_father
 | 
			
		||||
            else:
 | 
			
		||||
                working_lines = self.disp_father
 | 
			
		||||
        else:
 | 
			
		||||
            if indi_handle == fams_handle == None:
 | 
			
		||||
                working_lines = self.__blank_mother
 | 
			
		||||
            else:
 | 
			
		||||
                working_lines = self.disp_mother
 | 
			
		||||
        
 | 
			
		||||
        if indi_handle == fams_handle == None:
 | 
			
		||||
            return working_lines
 | 
			
		||||
        else:
 | 
			
		||||
            return self.__calc_l.calc_lines(indi_handle, fams_handle,
 | 
			
		||||
                                    working_lines)
 | 
			
		||||
        
 | 
			
		||||
    def calc_marrage(self, indi_handle, fams_handle):
 | 
			
		||||
        if indi_handle == fams_handle == None:
 | 
			
		||||
            return self.__blank_marriage
 | 
			
		||||
        else:
 | 
			
		||||
            return self.__calc_l.calc_lines(indi_handle, fams_handle,
 | 
			
		||||
                                self.disp_marr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MakeAncestorTree(object):
 | 
			
		||||
    """
 | 
			
		||||
    The main procedure to use recursion to make the tree based off of a person.
 | 
			
		||||
    order of people inserted into Persons is important.
 | 
			
		||||
@@ -196,12 +243,16 @@ class MakeAncestorTree():
 | 
			
		||||
        self.max_generations = max_gen
 | 
			
		||||
        self.fill_out = fill_out
 | 
			
		||||
        
 | 
			
		||||
        self.calc_items = CalcItems(self.database)
 | 
			
		||||
        
 | 
			
		||||
    def add_person_box(self, index, indi_handle, fams_handle):
 | 
			
		||||
        """ Makes a person box and add that person into the Canvas. """
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        myself = PersonBox(index)
 | 
			
		||||
 | 
			
		||||
        #calculate the text.
 | 
			
		||||
        myself.calc_text(self.database, indi_handle, fams_handle)
 | 
			
		||||
        
 | 
			
		||||
        myself.text = \
 | 
			
		||||
            self.calc_items.calc_person(index, indi_handle, fams_handle)
 | 
			
		||||
 | 
			
		||||
        self.canvas.add_box(myself)
 | 
			
		||||
 | 
			
		||||
@@ -209,10 +260,13 @@ class MakeAncestorTree():
 | 
			
		||||
    
 | 
			
		||||
    def add_marriage_box(self, index, indi_handle, fams_handle):
 | 
			
		||||
        """ Makes a marriage box and add that person into the Canvas. """
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        myself = FamilyBox(index)
 | 
			
		||||
 | 
			
		||||
        #calculate the text.
 | 
			
		||||
        myself.calc_text(self.database, indi_handle, fams_handle)
 | 
			
		||||
        myself.text = \
 | 
			
		||||
                      self.calc_items.calc_marrage(indi_handle, fams_handle)
 | 
			
		||||
 | 
			
		||||
        self.canvas.add_box(myself)
 | 
			
		||||
    
 | 
			
		||||
@@ -241,7 +295,7 @@ class MakeAncestorTree():
 | 
			
		||||
        
 | 
			
		||||
        person = self.database.get_person_from_handle(person_handle)
 | 
			
		||||
        if person is None:
 | 
			
		||||
            return self.__fill(index, None, self.fill_out)  #??? +1 ???
 | 
			
		||||
            return self.__fill(index, None, self.fill_out)
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        parents_handle = person.get_main_parents_family_handle()
 | 
			
		||||
@@ -468,31 +522,6 @@ class GUIConnect():
 | 
			
		||||
            return TitleN(doc)
 | 
			
		||||
        else:
 | 
			
		||||
            return TitleA(doc)
 | 
			
		||||
    
 | 
			
		||||
    #2 helper functions to calculate the box.text
 | 
			
		||||
    def calc_lines(self, database):
 | 
			
		||||
        #calculate the printed lines for each box
 | 
			
		||||
        display_repl = [] #Not used in this report
 | 
			
		||||
        #str = ""
 | 
			
		||||
        #if self.get_val('miss_val'):
 | 
			
		||||
        #    str = "_____"
 | 
			
		||||
        return CalcLines(database, display_repl)
 | 
			
		||||
    
 | 
			
		||||
    def working_lines(self, index):
 | 
			
		||||
        disp_father = self.get_val('dispf')
 | 
			
		||||
        if index == 1:  #The center person always uses main
 | 
			
		||||
            return disp_father
 | 
			
		||||
        disp_mother = self.get_val('dispf')
 | 
			
		||||
        if self.get_val('dif_sec') == 1:
 | 
			
		||||
            disp_father = self.get_val('disp_sec')
 | 
			
		||||
        elif self.get_val('dif_sec') == 2:
 | 
			
		||||
            disp_mother = self.get_val('disp_sec')
 | 
			
		||||
 | 
			
		||||
        if index % 2 == 0:
 | 
			
		||||
            return disp_father
 | 
			
		||||
        else:
 | 
			
		||||
            return disp_mother
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
@@ -633,6 +662,7 @@ class AncestorTree2(Report):
 | 
			
		||||
            page.display()
 | 
			
		||||
                    
 | 
			
		||||
            self.doc.end_page()
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
    def scale_styles(self, scale):
 | 
			
		||||
        """
 | 
			
		||||
@@ -777,7 +807,7 @@ class AncestorTree2Options(MenuReportOptions):
 | 
			
		||||
        self.scale.connect('value-changed', self.__check_blank)
 | 
			
		||||
 | 
			
		||||
        self.__onepage = BooleanOption(_('One page report'), True)
 | 
			
		||||
        self.__onepage.set_help(_("Whether to scale the size of the page to" +
 | 
			
		||||
        self.__onepage.set_help(_("Whether to scale the size of the page to " +
 | 
			
		||||
                                  "the size of the report."))
 | 
			
		||||
        menu.add_option(category_name, "onepage", self.__onepage)
 | 
			
		||||
        self.__onepage.connect('value-changed', self.__check_blank)
 | 
			
		||||
@@ -854,7 +884,7 @@ class AncestorTree2Options(MenuReportOptions):
 | 
			
		||||
        font.set_type_face(FONT_SANS_SERIF)
 | 
			
		||||
        para_style = ParagraphStyle()
 | 
			
		||||
        para_style.set_font(font)
 | 
			
		||||
        para_style.set_description(_('The basic style used for the' +
 | 
			
		||||
        para_style.set_description(_('The basic style used for the ' +
 | 
			
		||||
                                     'text display.'))
 | 
			
		||||
        default_style.add_paragraph_style("AC2-Normal", para_style)
 | 
			
		||||
 | 
			
		||||
@@ -864,7 +894,7 @@ class AncestorTree2Options(MenuReportOptions):
 | 
			
		||||
        para_style = ParagraphStyle()
 | 
			
		||||
        para_style.set_font(font)
 | 
			
		||||
        para_style.set_alignment(PARA_ALIGN_CENTER)
 | 
			
		||||
        para_style.set_description(_('The basic style used for the' +
 | 
			
		||||
        para_style.set_description(_('The basic style used for the ' +
 | 
			
		||||
                                     'title display.'))
 | 
			
		||||
        default_style.add_paragraph_style("AC2-Title", para_style)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -155,15 +155,15 @@ class DescendantTitleBase(TitleBox):
 | 
			
		||||
        else:
 | 
			
		||||
            if len(person_list + person_list2) == 3:
 | 
			
		||||
                if len(person_list) == 1:
 | 
			
		||||
                    title = _("Descendant Chart for %(person)s and" + \
 | 
			
		||||
                              " %(father1)s, %(mother1)s") % \
 | 
			
		||||
                    title = _("Descendant Chart for %(person)s and " + \
 | 
			
		||||
                              "%(father1)s, %(mother1)s") % \
 | 
			
		||||
                              {'person':  names[0], \
 | 
			
		||||
                               'father1': names2[0], \
 | 
			
		||||
                               'mother1': names2[1],
 | 
			
		||||
                                }
 | 
			
		||||
                else:
 | 
			
		||||
                    title = _("Descendant Chart for %(person)s, %(father1)s " + \
 | 
			
		||||
                              " and %(mother1)s") % \
 | 
			
		||||
                              "and %(mother1)s") % \
 | 
			
		||||
                              {'father1': names[0], \
 | 
			
		||||
                               'mother1': names[1], \
 | 
			
		||||
                               'person':  names2[0] }
 | 
			
		||||
@@ -1489,7 +1489,7 @@ class Descend2TreeOptions(MenuReportOptions):
 | 
			
		||||
        self.showparents = BooleanOption(
 | 
			
		||||
            _('Start with the parent(s) of the selected first'), True)
 | 
			
		||||
        self.showparents.set_help(
 | 
			
		||||
            _("Will show the parents, brother and sisters of the" +
 | 
			
		||||
            _("Will show the parents, brother and sisters of the " +
 | 
			
		||||
              "selected person."))
 | 
			
		||||
        menu.add_option(category_name, "show_gparents", self.showparents)
 | 
			
		||||
 | 
			
		||||
@@ -1498,7 +1498,7 @@ class Descend2TreeOptions(MenuReportOptions):
 | 
			
		||||
        menu.add_option(category_name, "maxgen", max_gen)
 | 
			
		||||
 | 
			
		||||
        max_spouse = NumberOption(_("Level of Spouses"), 1, 0, 10)
 | 
			
		||||
        max_spouse.set_help(_("0=no Spouses, 1=include Spouses, 2=include" +
 | 
			
		||||
        max_spouse.set_help(_("0=no Spouses, 1=include Spouses, 2=include " +
 | 
			
		||||
                              "Spouses of the spouse, etc"))
 | 
			
		||||
        menu.add_option(category_name, "maxspouse", max_spouse)
 | 
			
		||||
 | 
			
		||||
@@ -1514,7 +1514,7 @@ class Descend2TreeOptions(MenuReportOptions):
 | 
			
		||||
        menu.add_option(category_name, "dispf", disp)
 | 
			
		||||
 | 
			
		||||
        bold = BooleanOption(_('Bold direct descendants'), True)
 | 
			
		||||
        bold.set_help(_("Whether to bold those people that are direct" +
 | 
			
		||||
        bold.set_help(_("Whether to bold those people that are direct " +
 | 
			
		||||
                        "(not step or half) decendants."))
 | 
			
		||||
        menu.add_option(category_name, "bolddirect", bold)
 | 
			
		||||
 | 
			
		||||
@@ -1543,7 +1543,7 @@ class Descend2TreeOptions(MenuReportOptions):
 | 
			
		||||
        menu.add_option(category_name, "sdispf", sdisp)
 | 
			
		||||
 | 
			
		||||
        incmarr = BooleanOption(_('Include Marriage information'), True)
 | 
			
		||||
        incmarr.set_help(_("Whether to include marriage information in the" +
 | 
			
		||||
        incmarr.set_help(_("Whether to include marriage information in the " +
 | 
			
		||||
                           "report."))
 | 
			
		||||
        menu.add_option(category_name, "incmarr", incmarr)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user