diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index c26be09a5..7e9b8df71 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -5,6 +5,9 @@ * src/ReportOptions.py (OptionHandler.set_options): Ignore unknown options. + * src/docgen/PdfDoc.py: Port table and image fixes from STABLE. + * src/plugins/Ancestors.py (person_name): Avoid overriding builtin. + 2005-01-15 Don Allingham * src/EditPerson.py: don't use quote date * src/PeopleModel.py: remove BOLD diff --git a/gramps2/src/docgen/PdfDoc.py b/gramps2/src/docgen/PdfDoc.py index 82497bcd0..bdde9f94a 100644 --- a/gramps2/src/docgen/PdfDoc.py +++ b/gramps2/src/docgen/PdfDoc.py @@ -200,13 +200,12 @@ class PdfDoc(BaseDoc.BaseDoc): self.text = '' else: self.text = '%s' % leader - self.image = 0 def end_paragraph(self): - if self.in_table == 0 and self.image == 0: - self.story.append(Paragraph(enc(self.text),self.current_para)) + if self.in_table: + self.cur_cell.append(Paragraph(enc(self.text),self.current_para)) else: - self.image = 0 + self.story.append(Paragraph(enc(self.text),self.current_para)) def start_bold(self): self.text = self.text + '' @@ -230,11 +229,7 @@ class PdfDoc(BaseDoc.BaseDoc): self.table_data = [] self.tblstyle = [] - self.cur_table_cols = [] - width = float(self.cur_table.get_width()/100.0) * self.get_usable_width() - for val in range(self.cur_table.get_columns()): - percent = float(self.cur_table.get_column_width(val))/100.0 - self.cur_table_cols.append(int(width * percent * cm)) + self.text = "" def end_table(self): ts = reportlab.platypus.tables.TableStyle(self.tblstyle) @@ -248,6 +243,11 @@ class PdfDoc(BaseDoc.BaseDoc): self.row = self.row + 1 self.col = 0 self.cur_row = [] + self.cur_table_cols = [] + width = float(self.cur_table.get_width()/100.0) * self.get_usable_width() + for val in range(self.cur_table.get_columns()): + percent = float(self.cur_table.get_column_width(val))/100.0 + self.cur_table_cols.append(int(width * percent * cm)) def end_row(self): self.table_data.append(self.cur_row) @@ -255,15 +255,20 @@ class PdfDoc(BaseDoc.BaseDoc): def start_cell(self,style_name,span=1): self.span = span self.my_table_style = self.cell_styles[style_name] - pass + self.cur_cell = [] def end_cell(self): - if self.span == 1: - self.cur_row.append(Paragraph(self.text,self.current_para)) + if self.cur_cell: + self.cur_row.append(self.cur_cell) else: - self.cur_row.append(self.text) + self.cur_row.append("") + + the_width = self.cur_table_cols[self.col] for val in range(1,self.span): self.cur_row.append("") + the_width += self.cur_table_cols[self.col+val] + self.cur_table_cols[self.col+val] = 0 + self.cur_table_cols[self.col] = the_width p = self.my_para f = p.get_font() @@ -302,6 +307,7 @@ class PdfDoc(BaseDoc.BaseDoc): self.tblstyle.append(('VALIGN', loc, loc, 'TOP')) self.col = self.col + self.span + self.text = "" def add_media_object(self,name,pos,x_cm,y_cm): try: @@ -320,16 +326,25 @@ class PdfDoc(BaseDoc.BaseDoc): act_height = y_cm act_width = x_cm/ratio - self.story.append(Spacer(1,0.5*cm)) - self.story.append(Image(enc(name),act_width*cm,act_height*cm)) - self.story.append(Spacer(1,0.5*cm)) - self.image = 1 + im = Image(enc(name),act_width*cm,act_height*cm) + if pos in ['left','right','center']: + im.hAlign = pos.upper() + else: + im.hAlign = 'LEFT' + + if self.in_table: + self.cur_cell.append(Spacer(1,0.5*cm)) + self.cur_cell.append(im) + self.cur_cell.append(Spacer(1,0.5*cm)) + else: + self.story.append(Spacer(1,0.5*cm)) + self.story.append(im) + self.story.append(Spacer(1,0.5*cm)) def write_note(self,text,format,style_name): current_para = self.pdfstyles[style_name] self.my_para = self.style_list[style_name] self.super = "" % (self.my_para.get_font().get_size()-2) - self.image = 0 text = text.replace('&','&') # Must be first text = text.replace('<','<') @@ -337,15 +352,18 @@ class PdfDoc(BaseDoc.BaseDoc): text = text.replace('<super>',self.super) text = text.replace('</super>','') - if self.in_table == 0: - if format == 1: - text = '%s' % text.replace('\t',' '*8) + if format == 1: + text = '%s' % text.replace('\t',' '*8) + if self.in_table: + self.cur_cell.append(XPreformatted(text,current_para)) + else: self.story.append(XPreformatted(text,current_para)) - elif format == 0: - for line in text.split('\n\n'): + elif format == 0: + for line in text.split('\n\n'): + if self.in_table: + self.cur_cell.append(Paragraph(line,current_para)) + else: self.story.append(Paragraph(line,current_para)) - else: - self.image = 0 def write_text(self,text): text = text.replace('&','&') # Must be first diff --git a/gramps2/src/plugins/Ancestors.py b/gramps2/src/plugins/Ancestors.py index ab6775373..71704e142 100644 --- a/gramps2/src/plugins/Ancestors.py +++ b/gramps2/src/plugins/Ancestors.py @@ -1,7 +1,7 @@ # # Gramps - a GTK+/GNOME based genealogy program # -# Copyright (C) 2003-2004 Donald N. Allingham +# Copyright (C) 2003-2005 Donald N. Allingham # Copyright (C) 2003 Tim Waugh # # This program is free software; you can redistribute it and/or modify @@ -700,9 +700,9 @@ class ComprehensiveAncestorsReport (Report.Report): if suffix: name += ', ' + suffix - type = primary.get_type () - if type != 'Birth Name': - name += ' (%s)' % const.NameTypesMap.find_value (type) + the_type = primary.get_type () + if the_type != 'Birth Name': + name += ' (%s)' % const.NameTypesMap.find_value (the_type) name += self.cite_sources (primary.get_source_references ()) return name