Gallery generation in WebPage.py
svn: r536
This commit is contained in:
parent
c1d89d90e3
commit
b86ca59ced
@ -262,6 +262,7 @@ class HtmlDoc(TextDoc):
|
||||
if no_pil:
|
||||
return
|
||||
|
||||
self.empty = 0
|
||||
im = PIL.Image.open(name)
|
||||
nx,ny = im.size
|
||||
|
||||
@ -292,7 +293,7 @@ class HtmlDoc(TextDoc):
|
||||
except:
|
||||
return
|
||||
|
||||
self.f.write('<img src="images/%s" width="%d" height="%d">\n' % \
|
||||
self.f.write('<img src="images/%s" border="0" width="%d" height="%d">\n' % \
|
||||
(refname,pixx,pixy))
|
||||
|
||||
def start_table(self,name,style):
|
||||
|
@ -394,8 +394,8 @@ class ParagraphStyle:
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
class StyleSheetList:
|
||||
def __init__(self,file,default):
|
||||
self.map = { "default" : default }
|
||||
def __init__(self,file,defstyle):
|
||||
self.map = { "default" : defstyle }
|
||||
self.file = os.path.expanduser("~/.gramps/" + file)
|
||||
self.parse()
|
||||
|
||||
@ -512,7 +512,7 @@ class SheetParser(handler.ContentHandler):
|
||||
|
||||
def startElement(self,tag,attrs):
|
||||
if tag == "sheet":
|
||||
self.s = StyleSheet()
|
||||
self.s = StyleSheet(self.sheetlist.map["default"])
|
||||
self.sname = attrs['name']
|
||||
elif tag == "font":
|
||||
self.f = FontStyle()
|
||||
|
@ -2156,7 +2156,7 @@
|
||||
<class>GtkText</class>
|
||||
<name>notes</name>
|
||||
<can_focus>True</can_focus>
|
||||
<editable>False</editable>
|
||||
<editable>True</editable>
|
||||
<text></text>
|
||||
</widget>
|
||||
</widget>
|
||||
|
@ -35,6 +35,7 @@ import re
|
||||
import sort
|
||||
import string
|
||||
import time
|
||||
import shutil
|
||||
|
||||
from gtk import *
|
||||
from gnome.ui import *
|
||||
@ -86,11 +87,6 @@ class HtmlLinkDoc(HtmlDoc):
|
||||
#------------------------------------------------------------------------
|
||||
class IndividualPage:
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#--------------------------------------------------------------------
|
||||
def __init__(self,person,photos,restrict,private,uc,link,map,dir_name,doc):
|
||||
self.person = person
|
||||
self.doc = doc
|
||||
@ -212,6 +208,10 @@ class IndividualPage:
|
||||
self.doc.end_paragraph()
|
||||
|
||||
def write_info(self,info):
|
||||
"""Writes a line of text, after stripping leading and trailing
|
||||
spaces. If the last character is not a period, the period is
|
||||
appended to produce a sentance"""
|
||||
|
||||
info = string.strip(info)
|
||||
if info != "":
|
||||
if info[-1] == '.':
|
||||
@ -219,12 +219,9 @@ class IndividualPage:
|
||||
else:
|
||||
self.doc.write_text("%s. " % info)
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#--------------------------------------------------------------------
|
||||
def create_page(self):
|
||||
"""Generate the HTML page for the specific person"""
|
||||
|
||||
filebase = "%s.html" % self.person.getId()
|
||||
self.doc.open("%s%s%s" % (self.dir,os.sep,filebase))
|
||||
|
||||
@ -232,28 +229,38 @@ class IndividualPage:
|
||||
name_obj = self.person.getPrimaryName()
|
||||
name = name_obj.getRegularName()
|
||||
|
||||
# Write out the title line.
|
||||
|
||||
self.doc.start_paragraph("Title")
|
||||
self.doc.write_text(_("Summary of %s") % name)
|
||||
self.doc.end_paragraph()
|
||||
|
||||
# blank line for spacing
|
||||
|
||||
self.doc.start_paragraph("Data")
|
||||
self.doc.end_paragraph()
|
||||
|
||||
# look for the primary media object if photos have been requested.
|
||||
# make sure that the media object is an image. If so, insert it
|
||||
# into the document.
|
||||
|
||||
if self.photos and len(photo_list) > 0:
|
||||
object = photo_list[0].getReference()
|
||||
file = object.getPath()
|
||||
self.doc.start_paragraph("Data")
|
||||
self.doc.add_photo(file,4.0,4.0)
|
||||
self.doc.end_paragraph()
|
||||
if object.getMimeType()[0:5] == "image":
|
||||
file = object.getPath()
|
||||
self.doc.start_paragraph("Data")
|
||||
self.doc.add_photo(file,4.0,4.0)
|
||||
self.doc.end_paragraph()
|
||||
|
||||
# Start the first table, which consists of basic information, including
|
||||
# name, gender, and parents
|
||||
|
||||
self.doc.start_table("one","IndTable")
|
||||
self.write_normal_row("%s:" % _("Name"), name, name_obj.getSourceRefList())
|
||||
if self.person.getGender() == Person.male:
|
||||
self.write_normal_row("%s:" % _("Gender"), \
|
||||
_("Male"),None)
|
||||
self.write_normal_row("%s:" % _("Gender"), _("Male"),None)
|
||||
else:
|
||||
self.write_normal_row("%s:" % _("Gender"), \
|
||||
_("Female"),None)
|
||||
self.write_normal_row("%s:" % _("Gender"), _("Female"),None)
|
||||
|
||||
family = self.person.getMainFamily()
|
||||
if family:
|
||||
@ -263,6 +270,8 @@ class IndividualPage:
|
||||
self.write_link_row("%s:" % _("Father"), None)
|
||||
self.write_link_row("%s:" % _("Mother"), None)
|
||||
self.doc.end_table()
|
||||
|
||||
# Another blank line between the tables
|
||||
|
||||
self.doc.start_paragraph("Data")
|
||||
self.doc.end_paragraph()
|
||||
@ -270,6 +279,15 @@ class IndividualPage:
|
||||
self.write_facts()
|
||||
self.write_notes()
|
||||
self.write_families()
|
||||
|
||||
# if inclusion of photos has been enabled, write the photo
|
||||
# gallery.
|
||||
|
||||
if self.photos:
|
||||
self.write_gallery()
|
||||
|
||||
# write source information
|
||||
|
||||
if self.scnt > 1:
|
||||
self.write_sources()
|
||||
|
||||
@ -280,14 +298,71 @@ class IndividualPage:
|
||||
self.doc.end_link()
|
||||
self.doc.end_paragraph()
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#--------------------------------------------------------------------
|
||||
def close(self):
|
||||
"""Close the document"""
|
||||
self.doc.close()
|
||||
|
||||
def write_gallery(self):
|
||||
"""Write the image gallery. Add images that are not marked
|
||||
as private, creating a thumbnail and copying the original
|
||||
image to the directory."""
|
||||
|
||||
# build a list of the images to add, but skip the first image,
|
||||
# since it has been used at the top of the page.
|
||||
|
||||
my_list = []
|
||||
index = 0
|
||||
for object in self.person.getPhotoList():
|
||||
if object.getReference().getMimeType()[0:5] == "image":
|
||||
if object.getPrivacy() == 0 and index != 0:
|
||||
my_list.append(object)
|
||||
index = 1
|
||||
|
||||
# if no images were found, return
|
||||
|
||||
if len(my_list) == 0:
|
||||
return
|
||||
|
||||
self.doc.start_paragraph("Data")
|
||||
self.doc.end_paragraph()
|
||||
|
||||
self.doc.start_paragraph("GalleryTitle")
|
||||
self.doc.write_text(_("Gallery"))
|
||||
self.doc.end_paragraph()
|
||||
|
||||
self.doc.start_table("gallery","IndTable")
|
||||
for obj in my_list:
|
||||
self.doc.start_row()
|
||||
self.doc.start_cell("NormalCell")
|
||||
self.doc.start_paragraph("Data")
|
||||
src = obj.getReference().getPath()
|
||||
base = os.path.basename(src)
|
||||
self.doc.start_link("images/%s" % base)
|
||||
self.doc.add_photo(src,1.5,1.5)
|
||||
shutil.copy(src,"%s/images/%s" % (self.dir,base))
|
||||
self.doc.end_link()
|
||||
|
||||
self.doc.end_paragraph()
|
||||
self.doc.end_cell()
|
||||
self.doc.start_cell("NormalCell")
|
||||
description = obj.getReference().getDescription()
|
||||
if description != "":
|
||||
self.doc.start_paragraph("PhotoDescription")
|
||||
self.doc.write_text(description)
|
||||
self.doc.end_paragraph()
|
||||
if obj.getNote() != "":
|
||||
self.doc.start_paragraph("PhotoNote")
|
||||
self.doc.write_text(obj.getNote())
|
||||
self.doc.end_paragraph()
|
||||
elif obj.getReference().getNote() != "":
|
||||
self.doc.start_paragraph("PhotoNote")
|
||||
self.doc.write_text(obj.getReference().getNote())
|
||||
self.doc.end_paragraph()
|
||||
self.doc.end_cell()
|
||||
self.doc.end_row()
|
||||
self.doc.end_table()
|
||||
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
@ -650,6 +725,12 @@ def report(database,person):
|
||||
p.set(font=font,bborder=1)
|
||||
styles.add_style("SourcesTitle",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
|
||||
p = ParagraphStyle()
|
||||
p.set(font=font,bborder=1)
|
||||
styles.add_style("GalleryTitle",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
|
||||
p = ParagraphStyle()
|
||||
@ -674,6 +755,18 @@ def report(database,person):
|
||||
p.set_font(font)
|
||||
styles.add_style("Data",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set(bold=1,face=FONT_SANS_SERIF,size=12)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(font)
|
||||
styles.add_style("PhotoDescription",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set(size=12)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(font)
|
||||
styles.add_style("PhotoNote",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set_size(10)
|
||||
p = ParagraphStyle()
|
||||
@ -869,85 +962,3 @@ register_report(
|
||||
description=_("Generates web (HTML) pages for individuals, or a set of individuals.")
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import profile
|
||||
import sys
|
||||
import ReadXML
|
||||
|
||||
def task(styles,ind_list):
|
||||
my_map = {}
|
||||
for l in ind_list:
|
||||
my_map[l] = 1
|
||||
|
||||
doc = HtmlLinkDoc(styles,None)
|
||||
for person in ind_list:
|
||||
tdoc = HtmlLinkDoc(styles,None,doc)
|
||||
idoc = IndividualPage(person,1,1,1,1,1,my_map,"/home/dona/scratch",tdoc)
|
||||
idoc.create_page()
|
||||
idoc.close()
|
||||
|
||||
styles = StyleSheet()
|
||||
font = FontStyle()
|
||||
font.set(bold=1, face=FONT_SANS_SERIF, size=16)
|
||||
p = ParagraphStyle()
|
||||
p.set(align=PARA_ALIGN_CENTER,font=font)
|
||||
styles.add_style("Title",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
|
||||
p = ParagraphStyle()
|
||||
p.set(font=font,bborder=1)
|
||||
styles.add_style("EventsTitle",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
|
||||
p = ParagraphStyle()
|
||||
p.set(font=font,bborder=1)
|
||||
styles.add_style("NotesTitle",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
|
||||
p = ParagraphStyle()
|
||||
p.set(font=font,bborder=1)
|
||||
styles.add_style("SourcesTitle",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
|
||||
p = ParagraphStyle()
|
||||
p.set(font=font,bborder=1)
|
||||
styles.add_style("FamilyTitle",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set(bold=1,face=FONT_SANS_SERIF,size=12)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(font)
|
||||
styles.add_style("Spouse",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set(size=12,italic=1)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(font)
|
||||
styles.add_style("Label",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set_size(12)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(font)
|
||||
styles.add_style("Data",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set_size(10)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(font)
|
||||
styles.add_style("SourceParagraph",p)
|
||||
|
||||
font = FontStyle()
|
||||
font.set_size(12)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(font)
|
||||
styles.add_style("NotesParagraph",p)
|
||||
|
||||
db = RelDataBase()
|
||||
ReadXML.loadData(db,sys.argv[1])
|
||||
profile.run('task(styles,db.getPersonMap().values())')
|
||||
|
Loading…
Reference in New Issue
Block a user