From 3626ef0b2e1ebc3ed2ab7198f2c48b7a42baa189 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Thu, 1 Nov 2001 16:56:17 +0000 Subject: [PATCH] Gallery generation in WebPage.py svn: r536 --- src/HtmlDoc.py | 3 +- src/TextDoc.py | 6 +- src/imagesel.glade | 2 +- src/plugins/WebPage.py | 221 +++++++++++++++++++++-------------------- 4 files changed, 122 insertions(+), 110 deletions(-) diff --git a/src/HtmlDoc.py b/src/HtmlDoc.py index 7a46764d8..10b909e2c 100644 --- a/src/HtmlDoc.py +++ b/src/HtmlDoc.py @@ -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('\n' % \ + self.f.write('\n' % \ (refname,pixx,pixy)) def start_table(self,name,style): diff --git a/src/TextDoc.py b/src/TextDoc.py index bf9779c19..e3f307a47 100644 --- a/src/TextDoc.py +++ b/src/TextDoc.py @@ -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() diff --git a/src/imagesel.glade b/src/imagesel.glade index 984cd7c09..2497a35c4 100644 --- a/src/imagesel.glade +++ b/src/imagesel.glade @@ -2156,7 +2156,7 @@ GtkText notes True - False + True diff --git a/src/plugins/WebPage.py b/src/plugins/WebPage.py index 95e034870..2b878ff7a 100644 --- a/src/plugins/WebPage.py +++ b/src/plugins/WebPage.py @@ -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())')