* src/plugins/WebPage.py: Clean up mini tree. Add connecting lines.
Switch from list of 2^gen strings to a dict with only used entries. Clean up generation SpinButton in the dialog. * src/plugins/WebPage.py: Link main photo to the original. Use alt strings. Mini tree for many generations. svn: r3000
This commit is contained in:
parent
9822330bde
commit
5167f3d49b
@ -1,3 +1,12 @@
|
|||||||
|
2004-03-10 Alex Roitman <shura@alex.neuro.umn.edu>
|
||||||
|
* src/plugins/WebPage.py: Clean up mini tree. Add connecting lines.
|
||||||
|
Switch from list of 2^gen strings to a dict with only used entries.
|
||||||
|
Clean up generation SpinButton in the dialog.
|
||||||
|
|
||||||
|
2004-03-10 Leonid Mamtchenkov <leonid@leonid.maks.net>
|
||||||
|
* src/plugins/WebPage.py: Link main photo to the original.
|
||||||
|
Use alt strings. Mini tree for many generations.
|
||||||
|
|
||||||
2004-03-09 Don Allingham <dallingham@users.sourceforge.net>
|
2004-03-09 Don Allingham <dallingham@users.sourceforge.net>
|
||||||
* src/PeopleModel.py: Column reordering/selection
|
* src/PeopleModel.py: Column reordering/selection
|
||||||
* src/PeopleView.py: Column reordering/selection
|
* src/PeopleView.py: Column reordering/selection
|
||||||
|
@ -110,7 +110,7 @@ class HtmlLinkDoc(HtmlDoc.HtmlDoc):
|
|||||||
class IndividualPage:
|
class IndividualPage:
|
||||||
|
|
||||||
def __init__(self,db,person,photos,restrict,private,uc,link,mini_tree,map,
|
def __init__(self,db,person,photos,restrict,private,uc,link,mini_tree,map,
|
||||||
dir_name,imgdir,doc,id,idlink,ext):
|
dir_name,imgdir,doc,id,idlink,ext,depth):
|
||||||
self.person = person
|
self.person = person
|
||||||
self.db = db
|
self.db = db
|
||||||
self.ext = ext
|
self.ext = ext
|
||||||
@ -128,6 +128,7 @@ class IndividualPage:
|
|||||||
self.slist = []
|
self.slist = []
|
||||||
self.scnt = 1
|
self.scnt = 1
|
||||||
self.image_dir = imgdir
|
self.image_dir = imgdir
|
||||||
|
self.depth = depth
|
||||||
|
|
||||||
name = person.get_primary_name().get_regular_name()
|
name = person.get_primary_name().get_regular_name()
|
||||||
self.doc.set_title(_("Summary of %s") % name)
|
self.doc.set_title(_("Summary of %s") % name)
|
||||||
@ -280,7 +281,7 @@ class IndividualPage:
|
|||||||
|
|
||||||
self.doc.start_paragraph("Data")
|
self.doc.start_paragraph("Data")
|
||||||
self.doc.write_raw('<PRE>\n')
|
self.doc.write_raw('<PRE>\n')
|
||||||
tree = MiniTree(self.db,self.person,self.doc,ind_list)
|
tree = MiniTree(self.db,self.person,self.doc,ind_list,self.depth)
|
||||||
for line in tree.lines:
|
for line in tree.lines:
|
||||||
if line: self.doc.write_raw(line + '\n')
|
if line: self.doc.write_raw(line + '\n')
|
||||||
self.doc.write_raw('</PRE>\n')
|
self.doc.write_raw('</PRE>\n')
|
||||||
@ -315,10 +316,19 @@ class IndividualPage:
|
|||||||
object_id = media_list[0].get_reference_id()
|
object_id = media_list[0].get_reference_id()
|
||||||
object = self.database.find_object_from_id(object_id)
|
object = self.database.find_object_from_id(object_id)
|
||||||
if object.get_mime_type()[0:5] == "image":
|
if object.get_mime_type()[0:5] == "image":
|
||||||
file = object.get_path()
|
src = object.get_path()
|
||||||
if os.path.isfile(file):
|
junk,ext = os.path.splitext(src)
|
||||||
|
base = '%s%s' % (object.get_id(),ext)
|
||||||
|
|
||||||
|
if os.path.isfile(src):
|
||||||
self.doc.start_paragraph("Data")
|
self.doc.start_paragraph("Data")
|
||||||
self.doc.add_media_object(file,"row",4.0,4.0)
|
if self.image_dir:
|
||||||
|
self.doc.start_link("%s/%s" % (self.image_dir,base))
|
||||||
|
else:
|
||||||
|
self.doc.start_link("%s" % base)
|
||||||
|
description = object.get_description()
|
||||||
|
self.doc.add_media_object(src,"row",4.0,4.0,description)
|
||||||
|
self.doc.end_link()
|
||||||
self.doc.end_paragraph()
|
self.doc.end_paragraph()
|
||||||
|
|
||||||
# Start the first table, which consists of basic information, including
|
# Start the first table, which consists of basic information, including
|
||||||
@ -394,13 +404,11 @@ class IndividualPage:
|
|||||||
# since it has been used at the top of the page.
|
# since it has been used at the top of the page.
|
||||||
|
|
||||||
my_list = []
|
my_list = []
|
||||||
index = 0
|
|
||||||
for object_ref in self.person.get_media_list():
|
for object_ref in self.person.get_media_list():
|
||||||
object = self.database.find_object_from_id(object_ref.get_ref())
|
object = self.database.find_object_from_id(object_ref.get_ref())
|
||||||
if object.get_mime_type()[0:5] == "image":
|
if object.get_mime_type()[0:5] == "image":
|
||||||
if object.get_privacy() == 0 and index != 0:
|
if object.get_privacy() == 0:
|
||||||
my_list.append(object)
|
my_list.append(object)
|
||||||
index = 1
|
|
||||||
|
|
||||||
# if no images were found, return
|
# if no images were found, return
|
||||||
|
|
||||||
@ -415,6 +423,7 @@ class IndividualPage:
|
|||||||
self.doc.end_paragraph()
|
self.doc.end_paragraph()
|
||||||
|
|
||||||
self.doc.start_table("gallery","IndTable")
|
self.doc.start_table("gallery","IndTable")
|
||||||
|
index = 0
|
||||||
for obj_id in my_list:
|
for obj_id in my_list:
|
||||||
try:
|
try:
|
||||||
obj = self.database.find_object_from_id(obj_id)
|
obj = self.database.find_object_from_id(obj_id)
|
||||||
@ -435,6 +444,14 @@ class IndividualPage:
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# First image should not appear in the gallery, but needs
|
||||||
|
# the source to be linked to, hence the copy-only.
|
||||||
|
if index == 0:
|
||||||
|
index = 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
description = obj.get_reference().get_description()
|
||||||
|
|
||||||
self.doc.start_row()
|
self.doc.start_row()
|
||||||
self.doc.start_cell("ImageCell")
|
self.doc.start_cell("ImageCell")
|
||||||
self.doc.start_paragraph("Data")
|
self.doc.start_paragraph("Data")
|
||||||
@ -442,13 +459,12 @@ class IndividualPage:
|
|||||||
self.doc.start_link("%s/%s" % (self.image_dir,base))
|
self.doc.start_link("%s/%s" % (self.image_dir,base))
|
||||||
else:
|
else:
|
||||||
self.doc.start_link("%s" % base)
|
self.doc.start_link("%s" % base)
|
||||||
self.doc.add_media_object(src,"row",1.5,1.5)
|
self.doc.add_media_object(src,"row",1.5,1.5,description)
|
||||||
self.doc.end_link()
|
self.doc.end_link()
|
||||||
|
|
||||||
self.doc.end_paragraph()
|
self.doc.end_paragraph()
|
||||||
self.doc.end_cell()
|
self.doc.end_cell()
|
||||||
self.doc.start_cell("NoteCell")
|
self.doc.start_cell("NoteCell")
|
||||||
description = obj.get_reference().get_description()
|
|
||||||
if description != "":
|
if description != "":
|
||||||
self.doc.start_paragraph("PhotoDescription")
|
self.doc.start_paragraph("PhotoDescription")
|
||||||
self.doc.write_text(description)
|
self.doc.write_text(description)
|
||||||
@ -658,7 +674,7 @@ class WebReport(Report.Report):
|
|||||||
def __init__(self,db,person,target_path,max_gen,photos,filter,restrict,
|
def __init__(self,db,person,target_path,max_gen,photos,filter,restrict,
|
||||||
private, srccomments, include_link, include_mini_tree,
|
private, srccomments, include_link, include_mini_tree,
|
||||||
style, image_dir, template_name,use_id,id_link,gendex,ext,
|
style, image_dir, template_name,use_id,id_link,gendex,ext,
|
||||||
include_alpha_links,separate_alpha,n_cols,ind_template_name):
|
include_alpha_links,separate_alpha,n_cols,ind_template_name,depth):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.ext = ext
|
self.ext = ext
|
||||||
self.use_id = use_id
|
self.use_id = use_id
|
||||||
@ -681,6 +697,7 @@ class WebReport(Report.Report):
|
|||||||
self.separate_alpha = separate_alpha
|
self.separate_alpha = separate_alpha
|
||||||
self.n_cols = n_cols
|
self.n_cols = n_cols
|
||||||
self.ind_template_name = ind_template_name
|
self.ind_template_name = ind_template_name
|
||||||
|
self.depth = depth
|
||||||
|
|
||||||
def get_progressbar_data(self):
|
def get_progressbar_data(self):
|
||||||
return (_("Generate HTML reports - GRAMPS"), _("Creating Web Pages"))
|
return (_("Generate HTML reports - GRAMPS"), _("Creating Web Pages"))
|
||||||
@ -768,7 +785,7 @@ class WebReport(Report.Report):
|
|||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
def dump_index(self,person_list,styles,template,html_dir):
|
def dump_index(self,person_list,styles,template,html_dir):
|
||||||
"""Writes a index file, listing all people in the person list."""
|
"""Writes an index file, listing all people in the person list."""
|
||||||
|
|
||||||
doc = HtmlLinkDoc(self.selected_style,None,template,None)
|
doc = HtmlLinkDoc(self.selected_style,None,template,None)
|
||||||
doc.set_extension(self.ext)
|
doc.set_extension(self.ext)
|
||||||
@ -943,7 +960,7 @@ class WebReport(Report.Report):
|
|||||||
self.private, self.srccomments,
|
self.private, self.srccomments,
|
||||||
self.include_link, self.include_mini_tree,
|
self.include_link, self.include_mini_tree,
|
||||||
my_map, dir_name, self.image_dir, tdoc,
|
my_map, dir_name, self.image_dir, tdoc,
|
||||||
self.use_id,self.id_link,self.ext)
|
self.use_id,self.id_link,self.ext,self.depth)
|
||||||
idoc.create_page(my_map)
|
idoc.create_page(my_map)
|
||||||
idoc.close()
|
idoc.close()
|
||||||
self.progress_bar_step()
|
self.progress_bar_step()
|
||||||
@ -997,6 +1014,7 @@ class WebReportDialog(Report.ReportDialog):
|
|||||||
include_id_msg = _("Include the GRAMPS ID in the report")
|
include_id_msg = _("Include the GRAMPS ID in the report")
|
||||||
gendex_msg = _("Create a GENDEX index")
|
gendex_msg = _("Create a GENDEX index")
|
||||||
imgdir_msg = _("Image subdirectory")
|
imgdir_msg = _("Image subdirectory")
|
||||||
|
depth_msg = _("Ancestor tree depth")
|
||||||
ext_msg = _("File extension")
|
ext_msg = _("File extension")
|
||||||
alpha_links_msg = _("Links to alphabetical sections in index page")
|
alpha_links_msg = _("Links to alphabetical sections in index page")
|
||||||
sep_alpha_msg = _("Split alphabetical sections to separate pages")
|
sep_alpha_msg = _("Split alphabetical sections to separate pages")
|
||||||
@ -1004,6 +1022,12 @@ class WebReportDialog(Report.ReportDialog):
|
|||||||
tree_msg = _("Include short ancestor tree")
|
tree_msg = _("Include short ancestor tree")
|
||||||
self.mini_tree = gtk.CheckButton(tree_msg)
|
self.mini_tree = gtk.CheckButton(tree_msg)
|
||||||
self.mini_tree.set_active(1)
|
self.mini_tree.set_active(1)
|
||||||
|
self.depth = gtk.SpinButton()
|
||||||
|
self.depth.set_digits(0)
|
||||||
|
self.depth.set_increments(1,2)
|
||||||
|
self.depth.set_range(1,10)
|
||||||
|
self.depth.set_numeric(gtk.TRUE)
|
||||||
|
self.depth.set_value(3)
|
||||||
|
|
||||||
self.use_link = gtk.CheckButton(lnk_msg)
|
self.use_link = gtk.CheckButton(lnk_msg)
|
||||||
self.use_link.set_active(1)
|
self.use_link.set_active(1)
|
||||||
@ -1048,8 +1072,11 @@ class WebReportDialog(Report.ReportDialog):
|
|||||||
|
|
||||||
self.add_option(imgdir_msg,self.imgdir)
|
self.add_option(imgdir_msg,self.imgdir)
|
||||||
self.add_option('',self.mini_tree)
|
self.add_option('',self.mini_tree)
|
||||||
|
self.add_option(depth_msg,self.depth)
|
||||||
self.add_option('',self.use_link)
|
self.add_option('',self.use_link)
|
||||||
|
|
||||||
|
self.mini_tree.connect('toggled',self.on_mini_tree_toggled)
|
||||||
|
|
||||||
self.use_alpha_links.connect('toggled',self.on_use_alpha_links_toggled)
|
self.use_alpha_links.connect('toggled',self.on_use_alpha_links_toggled)
|
||||||
self.ind_template.entry.connect('changed',self.ind_template_changed)
|
self.ind_template.entry.connect('changed',self.ind_template_changed)
|
||||||
|
|
||||||
@ -1303,6 +1330,7 @@ class WebReportDialog(Report.ReportDialog):
|
|||||||
self.restrict = self.restrict_living.get_active()
|
self.restrict = self.restrict_living.get_active()
|
||||||
self.private = self.no_private.get_active()
|
self.private = self.no_private.get_active()
|
||||||
self.img_dir_text = unicode(self.imgdir.get_text())
|
self.img_dir_text = unicode(self.imgdir.get_text())
|
||||||
|
self.depth_value = self.depth.get_value()
|
||||||
|
|
||||||
self.html_ext = unicode(self.ext.entry.get_text().strip())
|
self.html_ext = unicode(self.ext.entry.get_text().strip())
|
||||||
if self.html_ext[0] == '.':
|
if self.html_ext[0] == '.':
|
||||||
@ -1358,6 +1386,15 @@ class WebReportDialog(Report.ReportDialog):
|
|||||||
else:
|
else:
|
||||||
self.use_sep_alpha.set_sensitive(0)
|
self.use_sep_alpha.set_sensitive(0)
|
||||||
|
|
||||||
|
def on_mini_tree_toggled(self,obj):
|
||||||
|
"""Keep the 'Mini tree depth' spin button in line with
|
||||||
|
the 'include short tree' checkbox. If there is no mini tree included,
|
||||||
|
it makes no sense to worry about its depth."""
|
||||||
|
if obj.get_active():
|
||||||
|
self.depth.set_sensitive(1)
|
||||||
|
else:
|
||||||
|
self.depth.set_sensitive(0)
|
||||||
|
|
||||||
def ind_template_changed(self,obj):
|
def ind_template_changed(self,obj):
|
||||||
text = unicode(obj.get_text())
|
text = unicode(obj.get_text())
|
||||||
if Report._template_map.has_key(text):
|
if Report._template_map.has_key(text):
|
||||||
@ -1386,7 +1423,7 @@ class WebReportDialog(Report.ReportDialog):
|
|||||||
self.use_id,self.id_link,self.use_gendex,
|
self.use_id,self.id_link,self.use_gendex,
|
||||||
self.html_ext,self.include_alpha_links,
|
self.html_ext,self.include_alpha_links,
|
||||||
self.separate_alpha,self.n_cols,
|
self.separate_alpha,self.n_cols,
|
||||||
self.ind_template_name)
|
self.ind_template_name,self.depth_value)
|
||||||
MyReport.write_report()
|
MyReport.write_report()
|
||||||
except Errors.FilterError, msg:
|
except Errors.FilterError, msg:
|
||||||
(m1,m2) = msg.messages()
|
(m1,m2) = msg.messages()
|
||||||
@ -1398,47 +1435,72 @@ class MiniTree:
|
|||||||
class. I'm sure that someone with more knowledge of GRAMPS can make
|
class. I'm sure that someone with more knowledge of GRAMPS can make
|
||||||
it much cleaner.
|
it much cleaner.
|
||||||
"""
|
"""
|
||||||
def __init__(self,db,person,doc,map):
|
def __init__(self,db,person,doc,map,depth):
|
||||||
self.map = map
|
self.map = map
|
||||||
self.db = db
|
self.db = db
|
||||||
self.doc = doc
|
self.doc = doc
|
||||||
|
self.depth = depth
|
||||||
self.person = person
|
self.person = person
|
||||||
self.lines = [ "" for i in range(9) ]
|
self.lines_map = {}
|
||||||
name = self.person.get_primary_name().get_regular_name()
|
self.draw_parents(person,2**(self.depth-1),'',self.depth,1)
|
||||||
self.lines[4] = name
|
keys = self.lines_map.keys()
|
||||||
indent = (len(name) - 1) / 2
|
keys.sort()
|
||||||
self.lines[3] = self.lines[5] = self.lines[6] = ' ' * indent + '|'
|
self.lines = [ self.lines_map[key] for key in keys ]
|
||||||
self.draw_parents(person,2,6,indent,1)
|
|
||||||
|
def draw_parents(self,person,position,indent,generations,topline):
|
||||||
|
|
||||||
|
name = person.get_primary_name().get_regular_name()
|
||||||
|
self.lines_map[position] = ""
|
||||||
|
|
||||||
|
if topline and indent:
|
||||||
|
# if we're on top (father's) line, replace last '|' with space
|
||||||
|
self.lines_map[position] += indent[:-1] + ' '
|
||||||
|
else:
|
||||||
|
self.lines_map[position] += indent
|
||||||
|
|
||||||
|
if person and person.get_id() and self.map.has_key(person.get_id()):
|
||||||
|
self.lines_map[position] += "<A HREF='%s%s'>%s</A>" % (person.get_id(),
|
||||||
|
self.doc.ext, name)
|
||||||
|
else:
|
||||||
|
self.lines_map[position] += "<U>%s</U>" % name
|
||||||
|
|
||||||
|
# We are done with this generation
|
||||||
|
generations = generations - 1
|
||||||
|
if not generations: return
|
||||||
|
|
||||||
|
offset = 2**(generations-1)
|
||||||
|
|
||||||
def draw_parents(self, person, father_line, mother_line, indent, recurse):
|
|
||||||
family_id = person.get_main_parents_family_id()
|
family_id = person.get_main_parents_family_id()
|
||||||
if not family_id: return
|
if not family_id: return
|
||||||
|
|
||||||
family = self.db.find_family_from_id(family_id)
|
family = self.db.find_family_from_id(family_id)
|
||||||
father_name = mother_name = ""
|
|
||||||
father_id = family.get_father_id()
|
father_id = family.get_father_id()
|
||||||
mother_id = family.get_mother_id()
|
mother_id = family.get_mother_id()
|
||||||
|
|
||||||
|
if topline:
|
||||||
|
# if we're on top (father's) line, replace last '|' with space
|
||||||
|
# then add '|' to the end for the next generation
|
||||||
|
if indent:
|
||||||
|
father_indent = indent[:-1] + ' ' + ' ' * len(name) + '|'
|
||||||
|
else:
|
||||||
|
father_indent = ' ' * len(name) + '|'
|
||||||
|
mother_indent = indent + ' ' * len(name) + '|'
|
||||||
|
else:
|
||||||
|
# if we're not on top (i.e. mother's) line, remove last '|'
|
||||||
|
# from next mother's indent, then add '|' to both
|
||||||
|
father_indent = indent + ' ' * len(name) + '|'
|
||||||
|
mother_indent = indent[:-1] + ' ' + ' ' * len(name) + '|'
|
||||||
|
|
||||||
if father_id:
|
if father_id:
|
||||||
father = self.db.find_person_from_id(father_id)
|
father = self.db.find_person_from_id(father_id)
|
||||||
father_name = father.get_primary_name().get_regular_name()
|
next_pos = position - offset
|
||||||
|
self.lines_map[position] += '|'
|
||||||
|
self.draw_parents(father,next_pos,father_indent,generations,1)
|
||||||
|
|
||||||
if mother_id:
|
if mother_id:
|
||||||
mother = self.db.find_person_from_id(mother_id)
|
mother = self.db.find_person_from_id(mother_id)
|
||||||
mother_name = mother.get_primary_name().get_regular_name()
|
next_pos = position + offset
|
||||||
pad = len(father_name)
|
self.draw_parents(mother,next_pos,mother_indent,generations,0)
|
||||||
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):
|
def draw_father(self, person, name, line, indent):
|
||||||
self.draw_string(line, indent, '|')
|
self.draw_string(line, indent, '|')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user