* src/plugins/Makefile.am: export AncestorChart2.py

svn: r2653
This commit is contained in:
Don Allingham 2004-01-18 05:09:00 +00:00
parent 9fc5ce16db
commit 83acfda5b5

View File

@ -28,6 +28,7 @@
import os import os
import string import string
import math import math
import types
import gtk import gtk
@ -121,6 +122,9 @@ class GenChart :
def get_xy(self,x,y): def get_xy(self,x,y):
return self.array[y][x] return self.array[y][x]
def set_xy(self,x,y,value):
self.array[y][x] = value
def dimensions(self): def dimensions(self):
return (len(self.array),self.max_x+1) return (len(self.array),self.max_x+1)
@ -153,7 +157,7 @@ class GenChart :
def not_blank(self,line): def not_blank(self,line):
for i in line: for i in line:
if i: if i and type(i) == types.TupleType:
return 1 return 1
return 0 return 0
@ -164,7 +168,7 @@ class GenChart :
#------------------------------------------------------------------------ #------------------------------------------------------------------------
class AncestorChart: class AncestorChart:
def __init__(self,database,person,max,display,doc,output,scale, def __init__(self,database,person,max,display,doc,output,scale,compress,
title,newpage=0): title,newpage=0):
self.doc = doc self.doc = doc
self.title = title.strip() self.title = title.strip()
@ -180,6 +184,7 @@ class AncestorChart:
self.display = display self.display = display
self.newpage = newpage self.newpage = newpage
self.force_fit = scale self.force_fit = scale
self.compress = compress
if output: if output:
self.doc.open(output) self.doc.open(output)
self.standalone = output self.standalone = output
@ -249,7 +254,7 @@ class AncestorChart:
colx += 1 colx += 1
startx += self.generations_per_page startx += self.generations_per_page
coly += 1 coly += 1
starty += maxh-1 starty += maxh
if self.standalone: if self.standalone:
self.doc.close() self.doc.close()
@ -260,6 +265,8 @@ class AncestorChart:
the elements on a page. the elements on a page.
""" """
self.add_lines()
if self.compress:
self.genchart.compress() self.genchart.compress()
self.box_pad_pts = 10 self.box_pad_pts = 10
@ -329,14 +336,6 @@ class AncestorChart:
if self.standalone: if self.standalone:
self.doc.init() self.doc.init()
def get_numbers(self,start,index,vals):
if index > 4:
return
if self.map.has_key(start):
vals.append(start)
self.get_numbers(start*2,index+1,vals)
self.get_numbers((start*2)+1,index+1,vals)
def print_page(self,startx,stopx,starty,stopy,colx,coly): def print_page(self,startx,stopx,starty,stopy,colx,coly):
self.doc.start_page() self.doc.start_page()
@ -348,25 +347,32 @@ class AncestorChart:
for x in range(startx,stopx): for x in range(startx,stopx):
value = self.genchart.get_xy(x,y) value = self.genchart.get_xy(x,y)
if value: if value:
if type(value) == types.TupleType:
(person,index) = value (person,index) = value
text = string.join(self.text[index],"\n") text = string.join(self.text[index],"\n")
self.doc.draw_box("box",text,phys_x*self.delta,phys_y*self.box_height+self.offset) self.doc.draw_box("box",text,phys_x*self.delta,
if self.genchart.get(index*2): phys_y*self.box_height+self.offset)
(px,py) = self.genchart.index_to_xy(index*2) elif value == 2:
x2 = min(self.doc.get_usable_width(),(px-startx)*self.delta) self.doc.draw_line("line",
x1 = (x-startx)*self.delta+(0.5 * self.box_width) phys_x*self.delta+self.box_width*0.5,
y2 = self.box_height * (py-starty) + 0.5*self.box_height + self.offset phys_y*self.box_height+self.offset,
y1 = self.box_height * (y-starty) + self.offset phys_x*self.delta+self.box_width*0.5,
(phys_y+1)*self.box_height+self.offset)
elif value == 1:
x1 = phys_x*self.delta+self.box_width*0.5
x2 = (phys_x+1)*self.delta
y1 = phys_y*self.box_height+self.offset+self.box_height/2
y2 = (phys_y+1)*self.box_height+self.offset
self.doc.draw_line("line",x1,y1,x1,y2) self.doc.draw_line("line",x1,y1,x1,y2)
self.doc.draw_line("line",x1,y2,x2,y2) self.doc.draw_line("line",x1,y1,x2,y1)
if self.genchart.get(index*2+1): elif value == 3:
(px,py) = self.genchart.index_to_xy(index*2+1) x1 = phys_x*self.delta+self.box_width*0.5
x2 = min(self.doc.get_usable_width(),(px-startx)*self.delta) x2 = (phys_x+1)*self.delta
x1 = (x-startx)*self.delta+(0.5 * self.box_width) y1 = (phys_y)*self.box_height+self.offset+self.box_height/2
y2 = self.box_height * (py-starty) + 0.5*self.box_height + self.offset y2 = (phys_y)*self.box_height+self.offset
y1 = self.box_height * (y-starty+1) + self.offset
self.doc.draw_line("line",x1,y1,x1,y2) self.doc.draw_line("line",x1,y1,x1,y2)
self.doc.draw_line("line",x1,y2,x2,y2) self.doc.draw_line("line",x1,y1,x2,y1)
phys_x +=1 phys_x +=1
phys_y += 1 phys_y += 1
@ -377,6 +383,28 @@ class AncestorChart:
self.doc.get_usable_height()+0.75) self.doc.get_usable_height()+0.75)
self.doc.end_page() self.doc.end_page()
def add_lines(self):
(my,mx) = self.genchart.dimensions()
for y in range(0,my):
for x in range(0,mx):
value = self.genchart.get_xy(x,y)
if not value:
continue
if type(value) == types.TupleType:
(person,index) = value
if self.genchart.get(index*2):
(px,py) = self.genchart.index_to_xy(index*2)
self.genchart.set_xy(x,py,1)
for ty in range(py+1,y):
self.genchart.set_xy(x,ty,2)
if self.genchart.get(index*2+1):
(px,py) = self.genchart.index_to_xy(index*2+1)
self.genchart.set_xy(px-1,py,3)
for ty in range(y+1,py):
self.genchart.set_xy(x,ty,2)
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# #
@ -418,6 +446,10 @@ class AncestorChartDialog(Report.DrawReportDialog):
self.title.set_text(self.get_header(self.person.getPrimaryName().getName())) self.title.set_text(self.get_header(self.person.getPrimaryName().getName()))
self.title.show() self.title.show()
self.add_option(_('Title'),self.title) self.add_option(_('Title'),self.title)
self.compress = gtk.CheckButton(_('Compress chart'))
self.compress.set_active(1)
self.compress.show()
self.add_option('',self.compress)
self.scale = gtk.CheckButton(_('Scale to fit on a single page')) self.scale = gtk.CheckButton(_('Scale to fit on a single page'))
self.scale.set_active(1) self.scale.set_active(1)
self.scale.show() self.scale.show()
@ -462,6 +494,7 @@ class AncestorChartDialog(Report.DrawReportDialog):
self.max_gen, self.report_text, self.max_gen, self.report_text,
self.doc,self.target_path, self.doc,self.target_path,
self.scale.get_active(), self.scale.get_active(),
self.compress.get_active(),
self.title.get_text() self.title.get_text()
) )
MyReport.write_report() MyReport.write_report()