diff --git a/src/plugins/WebPage.py b/src/plugins/WebPage.py index 8474efbac..420b42ee4 100644 --- a/src/plugins/WebPage.py +++ b/src/plugins/WebPage.py @@ -65,6 +65,8 @@ _month = [ "", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" ] +_hline = " " # Everything is underlined, so use blank + #------------------------------------------------------------------------ # # @@ -104,7 +106,7 @@ class HtmlLinkDoc(HtmlDoc.HtmlDoc): #------------------------------------------------------------------------ class IndividualPage: - def __init__(self,person,photos,restrict,private,uc,link,map, + def __init__(self,person,photos,restrict,private,uc,link,mini_tree,map, dir_name,imgdir,doc,id,idlink,ext): self.person = person self.ext = ext @@ -118,6 +120,7 @@ class IndividualPage: self.usecomments = not uc self.dir = dir_name self.link = link + self.mini_tree = mini_tree self.slist = [] self.scnt = 1 self.image_dir = imgdir @@ -236,6 +239,19 @@ class IndividualPage: else: self.doc.write_text("%s. " % info) + def write_tree(self): + if not self.mini_tree or not self.person.getMainParents(): return + self.doc.start_paragraph("FamilyTitle") + self.doc.end_paragraph() + + self.doc.start_paragraph("Data") + self.doc.write_raw('
\n')
+ tree = MiniTree(self.person,self.doc)
+ for line in tree.lines:
+ if line: self.doc.write_raw(line + '\n')
+ self.doc.write_raw('\n')
+ self.doc.end_paragraph()
+
def create_page(self):
"""Generate the HTML page for the specific person"""
@@ -319,6 +335,9 @@ class IndividualPage:
if self.scnt > 1:
self.write_sources()
+ # draw mini-tree
+ self.write_tree()
+
if self.link:
self.doc.start_paragraph("Data")
self.doc.start_link("index.%s" % self.ext)
@@ -593,8 +612,8 @@ class IndividualPage:
#------------------------------------------------------------------------
class WebReport(Report.Report):
def __init__(self,db,person,target_path,max_gen,photos,filter,restrict,
- private, srccomments, include_link, style, image_dir,
- template_name,use_id,id_link,gendex,ext):
+ private, srccomments, include_link, include_mini_tree,
+ style, image_dir, template_name,use_id,id_link,gendex,ext):
self.db = db
self.ext = ext
self.use_id = use_id
@@ -608,6 +627,7 @@ class WebReport(Report.Report):
self.private = private
self.srccomments = srccomments
self.include_link = include_link
+ self.include_mini_tree = include_mini_tree
self.selected_style = style
self.image_dir = image_dir
self.use_gendex = gendex
@@ -808,8 +828,9 @@ class WebReport(Report.Report):
person.getPrimaryName().getRegularName()])
idoc = IndividualPage(person, self.photos, self.restrict,
self.private, self.srccomments,
- self.include_link, my_map, dir_name,
- self.image_dir, tdoc, self.use_id,self.id_link,self.ext)
+ self.include_link, self.include_mini_tree,
+ my_map, dir_name, self.image_dir, tdoc,
+ self.use_id,self.id_link,self.ext)
idoc.create_page()
idoc.close()
self.progress_bar_step()
@@ -862,6 +883,10 @@ class WebReportDialog(Report.ReportDialog):
imgdir_msg = _("Image subdirectory")
ext_msg = _("File extension")
+ tree_msg = _("Include short ancestor tree")
+ self.mini_tree = gtk.CheckButton(tree_msg)
+ self.mini_tree.set_active(1)
+
self.use_link = gtk.CheckButton(lnk_msg)
self.use_link.set_active(1)
self.no_private = gtk.CheckButton(priv_msg)
@@ -882,6 +907,7 @@ class WebReportDialog(Report.ReportDialog):
'.cgi'])
self.add_option(imgdir_msg,self.imgdir)
+ self.add_option('',self.mini_tree)
self.add_option('',self.use_link)
title = _("Privacy")
@@ -1112,6 +1138,7 @@ class WebReportDialog(Report.ReportDialog):
user selected choices for later use."""
Report.ReportDialog.parse_report_options_frame(self)
self.include_link = self.use_link.get_active()
+ self.include_mini_tree = self.mini_tree.get_active()
def parse_other_frames(self):
"""Parse the privacy options frame of the dialog. Save the
@@ -1161,7 +1188,8 @@ class WebReportDialog(Report.ReportDialog):
MyReport = WebReport(self.db, self.person, self.target_path,
self.max_gen, self.photos, self.filter,
self.restrict, self.private, self.srccomments,
- self.include_link, self.selected_style,
+ self.include_link, self.include_mini_tree,
+ self.selected_style,
self.img_dir_text,self.template_name,
self.use_id,self.id_link,self.use_gendex,
self.html_ext)
@@ -1169,8 +1197,69 @@ class WebReportDialog(Report.ReportDialog):
except Errors.FilterError, msg:
(m1,m2) = msg.messages()
ErrorDialog(m1,m2)
-
-
+
+class MiniTree:
+ """
+ This is one dirty piece of code, that is why I made it it's own
+ class. I'm sure that someone with more knowledge of GRAMPS can make
+ it much cleaner.
+ """
+ def __init__(self,person,doc):
+ self.doc = doc
+ self.person = person
+ self.lines = [ "" for i in range(9) ]
+ name = self.person.getPrimaryName().getRegularName()
+ self.lines[4] = name
+ indent = (len(name) - 1) / 2
+ self.lines[3] = self.lines[5] = self.lines[6] = ' ' * indent + '|'
+ self.draw_parents(person,2,6,indent,1)
+
+ def draw_parents(self, person, father_line, mother_line, indent, recurse):
+ family = person.getMainParents()
+ if not family: return
+
+ father_name = mother_name = ""
+ father = family.getFather()
+ mother = family.getMother()
+ if father:
+ father_name = father.getPrimaryName().getRegularName()
+ if mother:
+ mother_name = mother.getPrimaryName().getRegularName()
+ pad = len(father_name)
+ if pad < len(mother_name):
+ pad = len(mother_name)
+ father_name = _hline + father_name + _hline * (pad-len(father_name)+1)
+ mother_name = _hline + mother_name + _hline * (pad-len(mother_name)+1)
+ self.draw_father(father, father_name, father_line, indent)
+ self.draw_mother(mother, mother_name, mother_line, indent)
+ indent += pad+3
+ if recurse:
+ if father:
+ self.draw_parents(father, father_line-1, father_line-1,
+ indent, 0)
+ if mother:
+ self.draw_parents(mother, mother_line+1, mother_line+1,
+ indent, 0)
+
+ def draw_father(self, person, name, line, indent):
+ self.draw_string(line, indent, '|')
+ self.draw_string(line-1, indent+1, "")
+ self.draw_link(line-1, person, name)
+
+ def draw_mother(self, person, name, line, indent):
+ self.draw_string(line+1, indent, '|')
+ self.draw_link(line+1, person, name)
+
+ def draw_string(self, line, indent, text):
+ self.lines[line] += ' ' * (indent-len(self.lines[line])) + text
+
+ def draw_link(self, line, person, name):
+ if person and person.getId():
+ self.lines[line] += "%s" % (person.getId(),
+ self.doc.ext, name)
+ else:
+ self.lines[line] += "%s" % name
+
#------------------------------------------------------------------------
#
#