* 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:
		@@ -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>
 | 
			
		||||
	* src/PeopleModel.py: Column reordering/selection
 | 
			
		||||
	* src/PeopleView.py: Column reordering/selection
 | 
			
		||||
 
 | 
			
		||||
@@ -110,7 +110,7 @@ class HtmlLinkDoc(HtmlDoc.HtmlDoc):
 | 
			
		||||
class IndividualPage:
 | 
			
		||||
 | 
			
		||||
    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.db = db
 | 
			
		||||
        self.ext = ext
 | 
			
		||||
@@ -128,6 +128,7 @@ class IndividualPage:
 | 
			
		||||
        self.slist = []
 | 
			
		||||
        self.scnt = 1
 | 
			
		||||
        self.image_dir = imgdir
 | 
			
		||||
        self.depth = depth
 | 
			
		||||
 | 
			
		||||
        name = person.get_primary_name().get_regular_name()
 | 
			
		||||
        self.doc.set_title(_("Summary of %s") % name)
 | 
			
		||||
@@ -280,7 +281,7 @@ class IndividualPage:
 | 
			
		||||
 | 
			
		||||
        self.doc.start_paragraph("Data")
 | 
			
		||||
        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:
 | 
			
		||||
            if line: self.doc.write_raw(line + '\n')
 | 
			
		||||
        self.doc.write_raw('</PRE>\n')
 | 
			
		||||
@@ -315,10 +316,19 @@ class IndividualPage:
 | 
			
		||||
            object_id = media_list[0].get_reference_id()
 | 
			
		||||
            object = self.database.find_object_from_id(object_id)
 | 
			
		||||
            if object.get_mime_type()[0:5] == "image":
 | 
			
		||||
                file = object.get_path()
 | 
			
		||||
                if os.path.isfile(file):
 | 
			
		||||
                src = object.get_path()
 | 
			
		||||
                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.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()
 | 
			
		||||
 | 
			
		||||
        # 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.
 | 
			
		||||
        
 | 
			
		||||
        my_list = []
 | 
			
		||||
        index = 0
 | 
			
		||||
        for object_ref in self.person.get_media_list():
 | 
			
		||||
            object = self.database.find_object_from_id(object_ref.get_ref())
 | 
			
		||||
            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)
 | 
			
		||||
            index = 1
 | 
			
		||||
            
 | 
			
		||||
        # if no images were found, return
 | 
			
		||||
        
 | 
			
		||||
@@ -415,6 +423,7 @@ class IndividualPage:
 | 
			
		||||
        self.doc.end_paragraph()
 | 
			
		||||
 | 
			
		||||
        self.doc.start_table("gallery","IndTable")
 | 
			
		||||
        index = 0
 | 
			
		||||
        for obj_id in my_list:
 | 
			
		||||
            try:
 | 
			
		||||
                obj = self.database.find_object_from_id(obj_id)
 | 
			
		||||
@@ -435,6 +444,14 @@ class IndividualPage:
 | 
			
		||||
                    except:
 | 
			
		||||
                        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_cell("ImageCell")
 | 
			
		||||
                self.doc.start_paragraph("Data")
 | 
			
		||||
@@ -442,13 +459,12 @@ class IndividualPage:
 | 
			
		||||
                    self.doc.start_link("%s/%s" % (self.image_dir,base))
 | 
			
		||||
                else:
 | 
			
		||||
                    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_paragraph()
 | 
			
		||||
                self.doc.end_cell()
 | 
			
		||||
                self.doc.start_cell("NoteCell")
 | 
			
		||||
                description = obj.get_reference().get_description()
 | 
			
		||||
                if description != "":
 | 
			
		||||
                    self.doc.start_paragraph("PhotoDescription")
 | 
			
		||||
                    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,
 | 
			
		||||
                 private, srccomments, include_link, include_mini_tree,
 | 
			
		||||
                 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.ext = ext
 | 
			
		||||
        self.use_id = use_id
 | 
			
		||||
@@ -681,6 +697,7 @@ class WebReport(Report.Report):
 | 
			
		||||
        self.separate_alpha = separate_alpha
 | 
			
		||||
        self.n_cols = n_cols
 | 
			
		||||
        self.ind_template_name = ind_template_name
 | 
			
		||||
        self.depth = depth
 | 
			
		||||
 | 
			
		||||
    def get_progressbar_data(self):
 | 
			
		||||
        return (_("Generate HTML reports - GRAMPS"), _("Creating Web Pages"))
 | 
			
		||||
@@ -768,7 +785,7 @@ class WebReport(Report.Report):
 | 
			
		||||
        f.close()
 | 
			
		||||
 | 
			
		||||
    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.set_extension(self.ext)
 | 
			
		||||
@@ -943,7 +960,7 @@ class WebReport(Report.Report):
 | 
			
		||||
                                  self.private, self.srccomments,
 | 
			
		||||
                                  self.include_link, self.include_mini_tree,
 | 
			
		||||
                                  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.close()
 | 
			
		||||
            self.progress_bar_step()
 | 
			
		||||
@@ -997,6 +1014,7 @@ class WebReportDialog(Report.ReportDialog):
 | 
			
		||||
        include_id_msg = _("Include the GRAMPS ID in the report")
 | 
			
		||||
        gendex_msg = _("Create a GENDEX index")
 | 
			
		||||
        imgdir_msg = _("Image subdirectory")
 | 
			
		||||
        depth_msg = _("Ancestor tree depth")
 | 
			
		||||
        ext_msg = _("File extension")
 | 
			
		||||
        alpha_links_msg = _("Links to alphabetical sections in index page")
 | 
			
		||||
        sep_alpha_msg = _("Split alphabetical sections to separate pages")
 | 
			
		||||
@@ -1004,6 +1022,12 @@ class WebReportDialog(Report.ReportDialog):
 | 
			
		||||
        tree_msg = _("Include short ancestor tree")
 | 
			
		||||
        self.mini_tree = gtk.CheckButton(tree_msg)
 | 
			
		||||
        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.set_active(1) 
 | 
			
		||||
@@ -1048,8 +1072,11 @@ class WebReportDialog(Report.ReportDialog):
 | 
			
		||||
 | 
			
		||||
        self.add_option(imgdir_msg,self.imgdir)
 | 
			
		||||
        self.add_option('',self.mini_tree)
 | 
			
		||||
        self.add_option(depth_msg,self.depth)
 | 
			
		||||
        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.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.private = self.no_private.get_active()
 | 
			
		||||
        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())
 | 
			
		||||
        if self.html_ext[0] == '.':
 | 
			
		||||
@@ -1358,6 +1386,15 @@ class WebReportDialog(Report.ReportDialog):
 | 
			
		||||
        else:
 | 
			
		||||
            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):
 | 
			
		||||
        text = unicode(obj.get_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.html_ext,self.include_alpha_links,
 | 
			
		||||
                                 self.separate_alpha,self.n_cols,
 | 
			
		||||
                                 self.ind_template_name)
 | 
			
		||||
                                 self.ind_template_name,self.depth_value)
 | 
			
		||||
            MyReport.write_report()
 | 
			
		||||
        except Errors.FilterError, msg:
 | 
			
		||||
            (m1,m2) = msg.messages()
 | 
			
		||||
@@ -1398,47 +1435,72 @@ class MiniTree:
 | 
			
		||||
    class.  I'm sure that someone with more knowledge of GRAMPS can make
 | 
			
		||||
    it much cleaner.
 | 
			
		||||
    """
 | 
			
		||||
    def __init__(self,db,person,doc,map):
 | 
			
		||||
    def __init__(self,db,person,doc,map,depth):
 | 
			
		||||
        self.map = map
 | 
			
		||||
        self.db = db
 | 
			
		||||
        self.doc = doc
 | 
			
		||||
        self.depth = depth
 | 
			
		||||
        self.person = person
 | 
			
		||||
        self.lines = [ "" for i in range(9) ]
 | 
			
		||||
        name = self.person.get_primary_name().get_regular_name()
 | 
			
		||||
        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)
 | 
			
		||||
        self.lines_map = {} 
 | 
			
		||||
        self.draw_parents(person,2**(self.depth-1),'',self.depth,1)
 | 
			
		||||
        keys = self.lines_map.keys()
 | 
			
		||||
        keys.sort()
 | 
			
		||||
        self.lines = [ self.lines_map[key] for key in keys ]
 | 
			
		||||
 | 
			
		||||
    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()
 | 
			
		||||
        if not family_id: return
 | 
			
		||||
 | 
			
		||||
        family = self.db.find_family_from_id(family_id)
 | 
			
		||||
        father_name = mother_name = ""
 | 
			
		||||
        father_id = family.get_father_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:
 | 
			
		||||
            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:
 | 
			
		||||
            mother = self.db.find_person_from_id(mother_id)
 | 
			
		||||
            mother_name = mother.get_primary_name().get_regular_name()
 | 
			
		||||
        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)
 | 
			
		||||
            next_pos = position + offset
 | 
			
		||||
            self.draw_parents(mother,next_pos,mother_indent,generations,0)
 | 
			
		||||
 | 
			
		||||
    def draw_father(self, person, name, line, indent):
 | 
			
		||||
        self.draw_string(line, indent, '|')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user