small updates. remove box.shadow and used report_opt.box_shadow

also removed .prev from Descendant reports.  
updated shadows to be more consistent.



svn: r16380
This commit is contained in:
Craig J. Anderson 2011-01-14 19:20:19 +00:00
parent 20f0e5d386
commit b159aa02c2
3 changed files with 60 additions and 62 deletions

View File

@ -34,6 +34,10 @@ def log2(val):
""" """
return int(math.log10(val)/math.log10(2)) return int(math.log10(val)/math.log10(2))
def X_INDEX(level):
""" calculate the row that this person is in """
return log2(level)
from gen.ggettext import sgettext as _ from gen.ggettext import sgettext as _
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@ -44,8 +48,12 @@ from gen.ggettext import sgettext as _
#from Errors import ReportError #from Errors import ReportError
from gen.plug.menu import BooleanOption, NumberOption, StringOption, \ from gen.plug.menu import BooleanOption
EnumeratedListOption, TextOption, PersonOption from gen.plug.menu import NumberOption
from gen.plug.menu import StringOption
from gen.plug.menu import EnumeratedListOption
from gen.plug.menu import TextOption
from gen.plug.menu import PersonOption
from gen.plug.report import Report from gen.plug.report import Report
from gen.plug.report import utils as ReportUtils from gen.plug.report import utils as ReportUtils
@ -79,10 +87,6 @@ class AncestorBoxBase(BoxBase):
BoxBase.__init__(self) BoxBase.__init__(self)
self.boxstr = boxstr self.boxstr = boxstr
def x_index(self, level):
""" calculate the row that this person is in """
return log2(level)
def y_index(self, max_gen): def y_index(self, max_gen):
""" Calculate the column or generation that this person is in. """ """ Calculate the column or generation that this person is in. """
x_level = self.level[0] x_level = self.level[0]
@ -98,7 +102,7 @@ class PersonBox(AncestorBoxBase):
""" """
def __init__(self, level): def __init__(self, level):
AncestorBoxBase.__init__(self, "AC2-box") AncestorBoxBase.__init__(self, "AC2-box")
self.level = (self.x_index(level), level) self.level = (X_INDEX(level), level)
class FamilyBox(AncestorBoxBase): class FamilyBox(AncestorBoxBase):
""" """
@ -106,12 +110,8 @@ class FamilyBox(AncestorBoxBase):
""" """
def __init__(self, level): def __init__(self, level):
AncestorBoxBase.__init__(self, "AC2-fam-box") AncestorBoxBase.__init__(self, "AC2-fam-box")
self.level = (self.x_index(level)+1, level) self.level = (X_INDEX(level)+1, level)
#def x_index(self):
# """ calculate the row that this person is in """
# return log2(self.level[0]) +1
def y_index(self, max_gen): def y_index(self, max_gen):
""" Calculate the column or generation that this person is in. """ """ Calculate the column or generation that this person is in. """
x_level = self.level[0] -1 x_level = self.level[0] -1
@ -451,7 +451,7 @@ class MakeReport():
self.canvas.set_box_height_width(box) self.canvas.set_box_height_width(box)
if box.width > self.doc.report_opts.max_box_width: if box.width > self.doc.report_opts.max_box_width:
self.doc.report_opts.max_box_width = box.width + box.shadow self.doc.report_opts.max_box_width = box.width #+ box.shadow
if box.level[1] > 0: if box.level[1] > 0:
if box.level[1] % 2 == 0 and box.height > self.father_ht: if box.level[1] % 2 == 0 and box.height > self.father_ht:
@ -887,6 +887,7 @@ class AncestorTree2Options(MenuReportOptions):
para_style.set_description(_('The basic style used for the ' + para_style.set_description(_('The basic style used for the ' +
'text display.')) 'text display.'))
default_style.add_paragraph_style("AC2-Normal", para_style) default_style.add_paragraph_style("AC2-Normal", para_style)
box_shadow = PT2CM(font.get_size()) * .6
font = FontStyle() font = FontStyle()
font.set_size(16) font.set_size(16)
@ -901,7 +902,7 @@ class AncestorTree2Options(MenuReportOptions):
## Draw styles ## Draw styles
graph_style = GraphicsStyle() graph_style = GraphicsStyle()
graph_style.set_paragraph_style("AC2-Normal") graph_style.set_paragraph_style("AC2-Normal")
graph_style.set_shadow(1, PT2CM(9)) #shadow set by text size graph_style.set_shadow(1, box_shadow) #shadow set by text size
graph_style.set_fill_color((255, 255, 255)) graph_style.set_fill_color((255, 255, 255))
default_style.add_draw_style("AC2-box", graph_style) default_style.add_draw_style("AC2-box", graph_style)

View File

@ -39,8 +39,13 @@ except:
from Errors import ReportError from Errors import ReportError
from gen.plug.menu import TextOption, NumberOption, EnumeratedListOption, \ from gen.plug.menu import TextOption
StringOption, BooleanOption, PersonOption, FamilyOption from gen.plug.menu import NumberOption
from gen.plug.menu import EnumeratedListOption
from gen.plug.menu import StringOption
from gen.plug.menu import BooleanOption
from gen.plug.menu import PersonOption
from gen.plug.menu import FamilyOption
from gen.plug.report import Report from gen.plug.report import Report
from gen.plug.report import utils as ReportUtils from gen.plug.report import utils as ReportUtils
@ -73,7 +78,6 @@ class DescendantBoxBase(BoxBase):
BoxBase.__init__(self) BoxBase.__init__(self)
self.boxstr = boxstr self.boxstr = boxstr
self.next = None self.next = None
self.prev = None
self.line_to = None self.line_to = None
self.father = None self.father = None
@ -91,7 +95,6 @@ class PersonBox(DescendantBoxBase):
def __init__(self, level, boldable = 0): def __init__(self, level, boldable = 0):
DescendantBoxBase.__init__(self, "CG2-box") DescendantBoxBase.__init__(self, "CG2-box")
self.level = level self.level = level
self.shadow = PT2CM(9) * .6
def set_bold(self): def set_bold(self):
""" update me to a bolded box """ """ update me to a bolded box """
@ -374,6 +377,7 @@ class RecurseDown:
self.famalies_seen = [] self.famalies_seen = []
self.cols = [] self.cols = []
self.__last_direct = []
gui = GuiConnect() gui = GuiConnect()
self.do_gparents = gui.get_val('show_gparents') self.do_gparents = gui.get_val('show_gparents')
@ -396,7 +400,7 @@ class RecurseDown:
def add_to_col(self, box): def add_to_col(self, box):
""" """
Add the box to a column on the canvas. we will do these things: Add the box to a column on the canvas. we will do these things:
set the .next .prev attribs for the boxs in this col set the .next attrib for the boxs in this col
get the height and width of this box and set it no the column get the height and width of this box and set it no the column
also we set the .x_cm to any s_level (indentation) here also we set the .x_cm to any s_level (indentation) here
we will calculate the real .x_cm later (with indentation) we will calculate the real .x_cm later (with indentation)
@ -406,22 +410,35 @@ class RecurseDown:
#make the column list of people #make the column list of people
while len(self.cols) <= level: while len(self.cols) <= level:
self.cols.append(None) self.cols.append(None)
self.__last_direct.append(None)
if self.cols[level] is not None: if self.cols[level] is not None:
self.cols[level].next = box last_box = self.cols[level]
box.prev = self.cols[level] last_box.next = box
#calculate the .y_cm for this box.
box.y_cm = last_box.y_cm
box.y_cm += last_box.height
if last_box.boxstr == "CG2-box":
box.y_cm += self.canvas.doc.report_opts.box_shadow
if box.boxstr == "CG2-box":
box.y_cm += self.canvas.doc.report_opts.box_pgap
else:
box.y_cm += self.canvas.doc.report_opts.box_mgap
if box.level[1] == 0 and self.__last_direct[level]:
if box.father != self.__last_direct[level].father:
box.y_cm += self.canvas.doc.report_opts.box_pgap
self.cols[level] = box 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.doc.report_opts.spouse_offset * box.level[1]
self.canvas.set_box_height_width(box) self.canvas.set_box_height_width(box)
tmp = box.prev
if tmp is not None:
#set my y_cm.
box.y_cm = tmp.y_cm + tmp.height + tmp.shadow
def add_person_box(self, level, indi_handle, fams_handle, father): def add_person_box(self, level, indi_handle, fams_handle, father):
""" Makes a person box and add that person into the Canvas. """ """ Makes a person box and add that person into the Canvas. """
@ -449,21 +466,6 @@ class RecurseDown:
myself.calc_text(self.database, indi_handle, fams_handle) myself.calc_text(self.database, indi_handle, fams_handle)
self.add_to_col(myself) self.add_to_col(myself)
if myself.y_cm != 0.0:
myself.y_cm += self.canvas.doc.report_opts.box_pgap
#check to see if the direct decendant above me is a sibling or other
if myself.level[1] == 0:
sibling = True
this_box = myself.prev
while this_box is not None:
if this_box.level[1] == 0:
if this_box.father != myself.father:
sibling = False
break
this_box = this_box.prev
if sibling == False:
myself.y_cm += self.canvas.doc.report_opts.box_pgap
self.canvas.add_box(myself) self.canvas.add_box(myself)
@ -479,8 +481,6 @@ class RecurseDown:
myself.calc_text(self.database, indi_handle, fams_handle) myself.calc_text(self.database, indi_handle, fams_handle)
self.add_to_col(myself) self.add_to_col(myself)
if myself.y_cm != 0.0:
myself.y_cm += self.canvas.doc.report_opts.box_mgap
self.canvas.add_box(myself) self.canvas.add_box(myself)
@ -1655,8 +1655,7 @@ class Descend2TreeOptions(MenuReportOptions):
#Set the size of the shadow based on the font size! Much better #Set the size of the shadow based on the font size! Much better
#will be set later too. #will be set later too.
tmp = PT2CM(font.get_size()) box_shadow = PT2CM(font.get_size()) * .6
box_shadow = tmp * .6
font.set_bold(True) font.set_bold(True)
para_style = ParagraphStyle() para_style = ParagraphStyle()

View File

@ -204,12 +204,16 @@ class Canvas(Page):
max_width = 0 max_width = 0
max_height = 0 max_height = 0
for box in self.boxes: for box in self.boxes:
tmp = box.x_cm + box.width + box.shadow tmp = box.x_cm + box.width
if tmp > max_width: if tmp > max_width:
max_width = tmp max_width = tmp
tmp = box.y_cm + box.height + box.shadow tmp = box.y_cm + box.height
if tmp > max_height: if tmp > max_height:
max_height = tmp 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
return (max_width, max_height) return (max_width, max_height)
def __scale_canvas(self, scale_amount): def __scale_canvas(self, scale_amount):
@ -223,7 +227,7 @@ class Canvas(Page):
box.scale(scale_amount) box.scale(scale_amount)
def set_box_height_width(self, box): def set_box_height_width(self, box):
""" Sets the .width .height and .shadow of a box. """ """ Sets the .width and .height of a box. """
if box.boxstr == "None": if box.boxstr == "None":
box.height = box.width = 0 box.height = box.width = 0
return return
@ -242,12 +246,7 @@ class Canvas(Page):
height = len(box.text) * font.get_size() * 1.5 height = len(box.text) * font.get_size() * 1.5
height += 1.0/2.0 * font.get_size() #funny number(s) based upon font. height += 1.0/2.0 * font.get_size() #funny number(s) based upon font.
box.height = PT2CM(height) box.height = PT2CM(height)
style_sheet = self.doc.get_style_sheet()
style = style_sheet.get_draw_style(box.boxstr)
if style.get_shadow():
box.shadow = style.get_shadow_space()
def page_iter_gen(self, incblank): def page_iter_gen(self, incblank):
""" generate the pages of the report. do so in a left to right """ generate the pages of the report. do so in a left to right
up down approach. incblank asks to include blank pages """ up down approach. incblank asks to include blank pages """
@ -283,8 +282,8 @@ class Canvas(Page):
if scale_to_width or scale_to_height: if scale_to_width or scale_to_height:
max_width, max_height = self.canvas.get_report_height_width() max_width, max_height = self.canvas.get_report_height_width()
max_width += self.doc.report_opts.littleoffset #max_width += self.doc.report_opts.littleoffset
max_height += self.doc.report_opts.littleoffset #max_height += self.doc.report_opts.littleoffset
""" """
calc - Calculate the scale amount (if any). calc - Calculate the scale amount (if any).
@ -334,7 +333,7 @@ class Canvas(Page):
if scaled_report_to != "width": if scaled_report_to != "width":
#calculate the width of the report #calculate the width of the report
max_width += self.doc.report_opts.littleoffset #max_width += self.doc.report_opts.littleoffset
max_width += self.doc.paper.get_left_margin() max_width += self.doc.paper.get_left_margin()
max_width += self.doc.paper.get_right_margin() max_width += self.doc.paper.get_right_margin()
@ -351,7 +350,7 @@ class Canvas(Page):
#calculate the height of the report #calculate the height of the report
max_height += self.doc.paper.get_top_margin() max_height += self.doc.paper.get_top_margin()
max_height += self.doc.paper.get_bottom_margin() max_height += self.doc.paper.get_bottom_margin()
max_height += self.doc.report_opts.littleoffset #max_height += self.doc.report_opts.littleoffset
size.set_height(max_height) size.set_height(max_height)
return scale return scale
@ -380,7 +379,7 @@ class Canvas(Page):
for box in self.boxes: for box in self.boxes:
#check to see if this box cross over to the next (y) page #check to see if this box cross over to the next (y) page
height = box.y_cm + liloffset + box.height + box.shadow/2 height = box.y_cm + liloffset + box.height #+ box.shadow/2
if height > page_y_height[-1]: if height > page_y_height[-1]:
#we went off the end #we went off the end
@ -560,7 +559,6 @@ class BoxBase(object):
self.y_cm = 0.0 self.y_cm = 0.0
self.width = 0.0 self.width = 0.0
self.height = 0.0 self.height = 0.0
self.shadow = 0.0
def scale(self, scale_amount): def scale(self, scale_amount):
""" Scale the amounts """ """ Scale the amounts """
@ -568,7 +566,6 @@ class BoxBase(object):
self.y_cm *= scale_amount self.y_cm *= scale_amount
self.width *= scale_amount self.width *= scale_amount
self.height *= scale_amount self.height *= scale_amount
self.shadow *= scale_amount
def display(self): def display(self):
""" display the box accounting for page x, y offsets """ display the box accounting for page x, y offsets
@ -844,11 +841,12 @@ class ReportOptions(object):
""" initalize various report variables that are used """ """ initalize various report variables that are used """
self.box_pgap = PT2CM(1.25*normal_font.get_size()) #gap between persons self.box_pgap = PT2CM(1.25*normal_font.get_size()) #gap between persons
self.box_mgap = self.box_pgap /2 #gap between marriage information self.box_mgap = self.box_pgap /2 #gap between marriage information
self.box_shadow = PT2CM(9) #size of normal text self.box_shadow = PT2CM(normal_font.get_size()) * .6 #normal text
self.spouse_offset = PT2CM(doc.string_width(normal_font, "0")) self.spouse_offset = PT2CM(doc.string_width(normal_font, "0"))
self.col_width = PT2CM(doc.string_width(normal_font, "(000,0)")) self.col_width = PT2CM(doc.string_width(normal_font, "(000,0)"))
self.littleoffset = PT2CM(1) self.littleoffset = PT2CM(1)
self.x_cm_cols = [self.littleoffset]
#Things that will get added later #Things that will get added later
self.max_box_width = 0 self.max_box_width = 0