From c8c78e504425d2c8bada84279fbe6048b5212b26 Mon Sep 17 00:00:00 2001 From: "Craig J. Anderson" Date: Thu, 28 Jun 2012 15:41:55 +0000 Subject: [PATCH] small error fixes to these reports when run in a book report svn: r19933 --- src/plugins/drawreport/AncestorTree.py | 31 +++++++++-------- src/plugins/drawreport/DescendTree.py | 46 ++++++++++++------------ src/plugins/lib/libtreebase.py | 48 ++++++++++++++------------ 3 files changed, 64 insertions(+), 61 deletions(-) diff --git a/src/plugins/drawreport/AncestorTree.py b/src/plugins/drawreport/AncestorTree.py index 466cfab8a..93c1f37dd 100644 --- a/src/plugins/drawreport/AncestorTree.py +++ b/src/plugins/drawreport/AncestorTree.py @@ -489,9 +489,9 @@ class RLTransform(): """ setup all of the boxes on the canvas in for a left/right report """ - def __init__(self, canvas, opts, max_generations, compress_tree): + def __init__(self, canvas, max_generations, compress_tree): self.canvas = canvas - self.rept_opts = opts + self.rept_opts = canvas.report_opts self.max_generations = max_generations self.compress_tree = compress_tree self.y_offset = self.rept_opts.littleoffset*2 + self.canvas.title.height @@ -564,8 +564,8 @@ class MakeReport(): self.canvas.set_box_height_width(box) - if box.width > self.doc.report_opts.max_box_width: - self.doc.report_opts.max_box_width = box.width #+ box.shadow + if box.width > self.canvas.report_opts.max_box_width: + self.canvas.report_opts.max_box_width = box.width #+ box.shadow if box.level[2] > 0: if box.level[2] % 2 == 0 and box.height > self.father_ht: @@ -589,10 +589,10 @@ class MakeReport(): self.get_height_width(box) if self.compress_tree and not self.inlc_marr: - self.doc.report_opts.max_box_height = \ + self.canvas.report_opts.max_box_height = \ min(self.father_ht, self.mother_ht) else: - self.doc.report_opts.max_box_height = \ + self.canvas.report_opts.max_box_height = \ max(self.father_ht, self.mother_ht) #At this point we know everything we need to make the report. @@ -601,11 +601,11 @@ class MakeReport(): #size of each row - self.rept_opt.box_height #go ahead and set it now. for box in self.canvas.boxes: - box.width = self.doc.report_opts.max_box_width + box.width = self.canvas.report_opts.max_box_width # 2. #setup the transform class to move around the boxes on the canvas - transform = RLTransform(self.canvas, self.doc.report_opts, + transform = RLTransform(self.canvas, self.max_generations, self.compress_tree) transform.place() @@ -662,9 +662,6 @@ class AncestorTree(Report): self.database = database self._user = user - #The canvas that we will put our report on and print off of - self.canvas = Canvas(self.doc) - def begin_report(self): """ This report needs the following parameters (class variables) @@ -692,7 +689,11 @@ class AncestorTree(Report): #Set up the canvas that we will print on. style_sheet = self.doc.get_style_sheet() font_normal = style_sheet.get_paragraph_style("AC2-Normal").get_font() - self.doc.report_opts = ReportOptions(self.doc, font_normal, 'AC2-line') + + #The canvas that we will put our report on and print off of + self.canvas = Canvas(self.doc, ReportOptions(self.doc, + font_normal, 'AC2-line')) + self._user.begin_progress(_('Ancestor Tree'), _('Making the Tree...'), 4) @@ -759,9 +760,9 @@ class AncestorTree(Report): #Setup page information colsperpage = self.doc.get_usable_width() - colsperpage += self.doc.report_opts.col_width - colsperpage = int(colsperpage / (self.doc.report_opts.max_box_width + - self.doc.report_opts.col_width)) + colsperpage += self.canvas.report_opts.col_width + colsperpage = int(colsperpage / (self.canvas.report_opts.max_box_width + + self.canvas.report_opts.col_width)) colsperpage = colsperpage or 1 ##################### diff --git a/src/plugins/drawreport/DescendTree.py b/src/plugins/drawreport/DescendTree.py index df32c044a..a71036529 100644 --- a/src/plugins/drawreport/DescendTree.py +++ b/src/plugins/drawreport/DescendTree.py @@ -408,12 +408,12 @@ class RecurseDown: box.y_cm = last_box.y_cm box.y_cm += last_box.height if last_box.boxstr in ["CG2-box", "CG2b-box"]: - box.y_cm += self.canvas.doc.report_opts.box_shadow + box.y_cm += self.canvas.report_opts.box_shadow if box.boxstr in ["CG2-box", "CG2b-box"]: - box.y_cm += self.canvas.doc.report_opts.box_pgap + box.y_cm += self.canvas.report_opts.box_pgap else: - box.y_cm += self.canvas.doc.report_opts.box_mgap + box.y_cm += self.canvas.report_opts.box_mgap if box.level[1] == 0 and self.__last_direct[level]: #ok, a new direct descendant. @@ -421,13 +421,13 @@ class RecurseDown: # self.__last_direct[level].text[0] if box.father != self.__last_direct[level].father and \ box.father != self.__last_direct[level]: - box.y_cm += self.canvas.doc.report_opts.box_pgap + box.y_cm += self.canvas.report_opts.box_pgap self.cols[level] = box if box.level[1] == 0: self.__last_direct[level] = box - box.x_cm = self.canvas.doc.report_opts.spouse_offset * box.level[1] + box.x_cm = self.canvas.report_opts.spouse_offset * box.level[1] self.canvas.set_box_height_width(box) @@ -950,11 +950,11 @@ class MakeReport(object): def calc_box(self, box): """ calculate the max_box_width and max_box_height for the report """ width = box.x_cm + box.width - if width > self.canvas.doc.report_opts.max_box_width: - self.canvas.doc.report_opts.max_box_width = width + if width > self.canvas.report_opts.max_box_width: + self.canvas.report_opts.max_box_width = width - if box.height > self.canvas.doc.report_opts.max_box_height: - self.canvas.doc.report_opts.max_box_height = box.height + if box.height > self.canvas.report_opts.max_box_height: + self.canvas.report_opts.max_box_height = box.height while len(self.cols) <= box.level[0]: self.cols.append([]) @@ -1154,15 +1154,15 @@ class MakeReport(object): box.level = (box.level[0] - 1, box.level[1]) #go ahead and set it now. - width = self.canvas.doc.report_opts.max_box_width + width = self.canvas.report_opts.max_box_width for box in self.canvas.boxes: box.width = width - box.x_cm - box.x_cm += self.canvas.doc.report_opts.littleoffset + box.x_cm += self.canvas.report_opts.littleoffset box.x_cm += (box.level[0] * - (self.canvas.doc.report_opts.col_width + - self.canvas.doc.report_opts.max_box_width)) + (self.canvas.report_opts.col_width + + self.canvas.report_opts.max_box_width)) - box.y_cm += self.canvas.doc.report_opts.littleoffset + box.y_cm += self.canvas.report_opts.littleoffset box.y_cm += self.canvas.title.height self.Make_report() @@ -1264,9 +1264,6 @@ class DescendTree(Report): self.options = options self.database = database - #The canvas that we will put our report on and print off of - self.canvas = Canvas(self.doc) - def begin_report(self): """ make the report in its full size and pages to print on scale one or both as needed/desired. @@ -1279,7 +1276,10 @@ class DescendTree(Report): style_sheet = self.doc.get_style_sheet() font_normal = style_sheet.get_paragraph_style("CG2-Normal").get_font() - self.doc.report_opts = ReportOptions(self.doc, font_normal, "CG2-line") + + #The canvas that we will put our report on and print off of + self.canvas = Canvas(self.doc, ReportOptions(self.doc, + font_normal, "CG2-line")) center_id = self.Connect.get_val('pid') @@ -1338,9 +1338,9 @@ class DescendTree(Report): #Setup page information colsperpage = self.doc.get_usable_width() - colsperpage += self.doc.report_opts.col_width - tmp = self.doc.report_opts.max_box_width - tmp += self.doc.report_opts.col_width + colsperpage += self.canvas.report_opts.col_width + tmp = self.canvas.report_opts.max_box_width + tmp += self.canvas.report_opts.col_width colsperpage = int(colsperpage / tmp) colsperpage = colsperpage or 1 @@ -1390,13 +1390,13 @@ class DescendTree(Report): graph_style = style_sheet.get_draw_style("CG2-box") graph_style.set_shadow(graph_style.get_shadow(), - self.doc.report_opts.box_shadow) + self.canvas.report_opts.box_shadow) graph_style.set_line_width(graph_style.get_line_width() * amount) style_sheet.add_draw_style("CG2-box", graph_style) graph_style = style_sheet.get_draw_style("CG2b-box") graph_style.set_shadow(graph_style.get_shadow(), - self.doc.report_opts.box_shadow) + self.canvas.report_opts.box_shadow) graph_style.set_line_width(graph_style.get_line_width() * amount) style_sheet.add_draw_style("CG2b-box", graph_style) diff --git a/src/plugins/lib/libtreebase.py b/src/plugins/lib/libtreebase.py index abe7da557..04c999c8b 100644 --- a/src/plugins/lib/libtreebase.py +++ b/src/plugins/lib/libtreebase.py @@ -148,10 +148,10 @@ class Canvas(Page): a group of pages. each page is set is size and shows only a part of what is on the entire canvas """ - def __init__(self, doc): + def __init__(self, doc, report_opts): Page.__init__(self, self) self.doc = doc - self.report_opts = None + self.report_opts = report_opts #How many pages are there in the report. one more than real. self.x_pages = 1 @@ -181,6 +181,7 @@ class Canvas(Page): def add_title(self, title): """ The title must derive from class TitleBox(BoxBase): """ self.title = title + self.title.cm_y = self.report_opts.littleoffset def add_note(self, note): """ The note must derive from class NoteBox(BoxBase, NoteType) """ @@ -211,15 +212,15 @@ class Canvas(Page): tmp = box.y_cm + box.height if tmp > max_height: max_height = tmp - max_width += self.doc.report_opts.box_shadow - max_width += self.doc.report_opts.littleoffset - max_height += self.doc.report_opts.box_shadow - max_height += self.doc.report_opts.littleoffset + max_width += self.report_opts.box_shadow + max_width += self.report_opts.littleoffset + max_height += self.report_opts.box_shadow + max_height += self.report_opts.littleoffset return (max_width, max_height) def __scale_canvas(self, scale_amount): """ scales everything up/down depending upon scale_amount """ - self.doc.report_opts.scale_everything(scale_amount) + self.report_opts.scale_everything(scale_amount) self.title.scale(scale_amount) if self.note is not None: self.note.scale(scale_amount) @@ -294,8 +295,8 @@ class Canvas(Page): if scale_to_width or scale_to_height: max_width, max_height = self.canvas.get_report_height_width() - #max_width += self.doc.report_opts.littleoffset - #max_height += self.doc.report_opts.littleoffset + #max_width += self.report_opts.littleoffset + #max_height += self.report_opts.littleoffset """ calc - Calculate the scale amount (if any). @@ -311,7 +312,7 @@ class Canvas(Page): if scale_to_width: #Check the width of the title title_width = self.title.width - title_width += self.doc.report_opts.littleoffset * 2 + title_width += self.report_opts.littleoffset * 2 max_width = max(title_width, max_width) @@ -346,7 +347,7 @@ class Canvas(Page): if scaled_report_to != "width": #calculate the width of the report - #max_width += self.doc.report_opts.littleoffset + #max_width += self.report_opts.littleoffset max_width += self.doc.paper.get_left_margin() max_width += self.doc.paper.get_right_margin() @@ -354,7 +355,7 @@ class Canvas(Page): title_width = self.canvas.title.width title_width += self.doc.paper.get_left_margin() title_width += self.doc.paper.get_right_margin() - title_width += self.doc.report_opts.littleoffset + title_width += self.report_opts.littleoffset max_width = max(title_width, max_width) size.set_width(max_width) @@ -363,7 +364,7 @@ class Canvas(Page): #calculate the height of the report max_height += self.doc.paper.get_top_margin() max_height += self.doc.paper.get_bottom_margin() - #max_height += self.doc.report_opts.littleoffset + #max_height += self.report_opts.littleoffset size.set_height(max_height) return scale @@ -372,7 +373,7 @@ class Canvas(Page): def __paginate_x_offsets(self, colsperpage): """ Go through the boxes and get the x page offsets """ #fix soon. should not use .level - liloffset = self.doc.report_opts.littleoffset + liloffset = self.report_opts.littleoffset x_page_offsets = {0:0} #change me to [] ??? for box in self.boxes: x_index = box.level[0] @@ -388,7 +389,7 @@ class Canvas(Page): note that the self.boxes needs to be sorted by .y_cm """ page_y_top = [0] page_y_height = [self.doc.get_usable_height()] - liloffset = self.doc.report_opts.littleoffset + liloffset = self.report_opts.littleoffset for box in self.boxes: #check to see if this box cross over to the next (y) page @@ -524,7 +525,7 @@ class Canvas(Page): def __paginate(self, colsperpage): """ take the boxes on the canvas and put them into separate pages. The boxes need to be sorted by y_cm """ - liloffset = self.doc.report_opts.littleoffset + liloffset = self.report_opts.littleoffset self.__pages = {} x_page_offsets = self.__paginate_x_offsets(colsperpage) page_y_top = self.__paginate_y_pages(colsperpage, x_page_offsets) @@ -593,6 +594,7 @@ class BoxBase(object): return doc = self.page.canvas.doc + report_opts = self.page.canvas.report_opts text = '\n'.join(self.text) xbegin = self.x_cm - self.page.page_x_offset ybegin = self.y_cm - self.page.page_y_offset @@ -607,10 +609,10 @@ class BoxBase(object): #draw my line out here. self.line_to.display(self.page) if self.page.x_page_num > 0 and self.level[1] == 0 and \ - xbegin < doc.report_opts.littleoffset*2: + xbegin < report_opts.littleoffset*2: #I am a child on the first column yme = ybegin + self.height/2 - doc.draw_line(doc.report_opts.line_str, 0, yme, xbegin, yme) + doc.draw_line(report_opts.line_str, 0, yme, xbegin, yme) @@ -625,7 +627,6 @@ class TitleBox(BoxBase): self.boxstr = boxstr if boxstr == "None": return - self.cm_y = self.doc.report_opts.littleoffset style_sheet = self.doc.get_style_sheet() style_name = style_sheet.get_draw_style(self.boxstr) @@ -747,7 +748,7 @@ class NoteBox(BoxBase, NoteType): """ set the x_cm and y_cm given self.doc, leloffset, and title_height """ - liloffset = self.doc.report_opts.littleoffset + liloffset = canvas.report_opts.littleoffset #left or right side if self.value == NoteType.BOTTOMLEFT or \ self.value == NoteType.TOPLEFT: @@ -815,12 +816,13 @@ class LineBase(object): # self.start = [self.start] start = self.start[0] doc = start.page.canvas.doc - linestr = doc.report_opts.line_str + report_opts = start.page.canvas.report_opts + linestr = report_opts.line_str xbegin = start.x_cm + start.width - page.page_x_offset # out 3/4 of the way and x_cm end point(s) - x34 = xbegin + (doc.report_opts.col_width * 3/4) - xend = xbegin + doc.report_opts.col_width + x34 = xbegin + (report_opts.col_width * 3/4) + xend = xbegin + report_opts.col_width if x34 > 0: # > 0 tell us we are printing on this page. usable_height = doc.get_usable_height()