From d5df9c9d7be28dc5ffdbdfa56a8dd13ddadd75c8 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Sat, 13 Apr 2002 13:31:22 +0000 Subject: [PATCH] Two column index page for Web Page generation svn: r920 --- src/Date.py | 11 +-- src/const.py | 20 ++--- src/gramps_main.py | 144 +++++++++++++++++++----------------- src/plugins/FilterEditor.py | 14 +++- src/plugins/WebPage.py | 139 +++++++++++----------------------- 5 files changed, 144 insertions(+), 184 deletions(-) diff --git a/src/Date.py b/src/Date.py index e2c97758e..b8df8ea9d 100644 --- a/src/Date.py +++ b/src/Date.py @@ -103,13 +103,10 @@ class Date: Error = "Illegal Date" - # The last part of these two strings must remain untranslated. It - # is required to read saved data from XML. - from_str = _("(from|between|bet|bet.") + "|FROM)" - to_str = _("(and|to|-") + "|TO)" + fstr = _("(from|between|bet|bet.)") + tstr = _("(and|to|-)") - fmt = compile(r"\s*" + from_str + r"\s+(.+)\s+" + to_str + r"\s+(.+)\s*$", - IGNORECASE) + fmt = compile("\s*%s\s+(.+)\s+%s\s+(.+)\s*$" % (fstr,tstr),IGNORECASE) def __init__(self,source=None): if source: @@ -491,7 +488,7 @@ class SingleDate: return "%s%s%s" % (y,m,d) def _format1(self): - if self.month == UNDEF and self.day == UNDEF and self.year == UNDEF : + if self.month == UNDEF and self.day == UNDEF and self.year == UNDEF: return "" elif self.day == UNDEF: if self.month == UNDEF: diff --git a/src/const.py b/src/const.py index a284545f6..38e12196d 100644 --- a/src/const.py +++ b/src/const.py @@ -452,7 +452,7 @@ def save_frel(st): # # #------------------------------------------------------------------------- -def initialize_personal_event_list(): +def init_personal_event_list(): p = [] for event in personalConstantEvents.keys(): p.append(_pe_e2l[event]) @@ -464,7 +464,7 @@ def initialize_personal_event_list(): # # #------------------------------------------------------------------------- -def initialize_marriage_event_list(): +def init_marriage_event_list(): p = [] for event in familyConstantEvents.keys(): p.append(_fe_e2l[event]) @@ -476,7 +476,7 @@ def initialize_marriage_event_list(): # # #------------------------------------------------------------------------- -def initialize_personal_attribute_list(): +def init_personal_attribute_list(): p = [] for event in personalConstantAttributes.keys(): p.append(_pa_e2l[event]) @@ -488,7 +488,7 @@ def initialize_personal_attribute_list(): # # #------------------------------------------------------------------------- -def initialize_family_attribute_list(): +def init_family_attribute_list(): p = [] for event in familyConstantAttributes.keys(): p.append(_fa_e2l[event]) @@ -500,18 +500,18 @@ def initialize_family_attribute_list(): # # #------------------------------------------------------------------------- -def initialize_family_relation_list(): +def init_family_relation_list(): p = [] for event in _fr_e2l.keys(): p.append(_fr_e2l[event]) p.sort() return p -personalEvents = initialize_personal_event_list() -personalAttributes = initialize_personal_attribute_list() -marriageEvents = initialize_marriage_event_list() -familyAttributes = initialize_family_attribute_list() -familyRelations = initialize_family_relation_list() +personalEvents = init_personal_event_list() +personalAttributes = init_personal_attribute_list() +marriageEvents = init_marriage_event_list() +familyAttributes = init_family_attribute_list() +familyRelations = init_family_relation_list() places = [] surnames = [] diff --git a/src/gramps_main.py b/src/gramps_main.py index 43a8798d5..0667dfdac 100755 --- a/src/gramps_main.py +++ b/src/gramps_main.py @@ -581,11 +581,11 @@ class Gramps: def clear_database(self): """Clear out the database if permission was granted""" - const.personalEvents = const.initialize_personal_event_list() - const.personalAttributes = const.initialize_personal_attribute_list() - const.marriageEvents = const.initialize_marriage_event_list() - const.familyAttributes = const.initialize_family_attribute_list() - const.familyRelations = const.initialize_family_relation_list() + const.personalEvents = const.init_personal_event_list() + const.personalAttributes = const.init_personal_attribute_list() + const.marriageEvents = const.init_marriage_event_list() + const.familyAttributes = const.init_family_attribute_list() + const.familyRelations = const.init_family_relation_list() self.database.new() self.topWindow.set_title("GRAMPS") @@ -685,7 +685,8 @@ class Gramps: autosave = "%s/autosave.gramps" % dirname if os.path.isfile(autosave): - q = _("An autosave file exists for %s.\nShould this be loaded instead of the last saved version?") % dirname + q = _("An autosave file exists for %s.\nShould this " + "be loaded instead of the last saved version?") % dirname self.yname = autosave self.nname = filename gnome.ui.GnomeQuestionDialog(q,self.autosave_query) @@ -708,7 +709,6 @@ class Gramps: self.displayError(_("%s is not a directory") % filename) return - self.statusbar.set_status(_("Loading %s ...") % filename) if self.load_database(filename) == 1: @@ -748,8 +748,8 @@ class Gramps: try: os.mkdir(filename) except (OSError,IOError), msg: - gnome.ui.GnomeErrorDialog(_("Could not create %s") % filename +\ - "\n" + str(msg)) + emsg = _("Could not create %s") % filename + "\n" + str(msg) + gnome.ui.GnomeErrorDialog(emsg) return except: gnome.ui.GnomeErrorDialog(_("Could not create %s") % filename) @@ -759,13 +759,9 @@ class Gramps: filename = filename + os.sep + const.indexFile try: WriteXML.exportData(self.database,filename,self.load_progress) - except IOError, msg: - gnome.ui.GnomeErrorDialog(_("Could not create %s") % filename +\ - "\n" + str(msg)) - return - except OSError, msg: - gnome.ui.GnomeErrorDialog(_("Could not create %s") % filename + \ - "\n" + str(msg)) + except (OSError,IOError), msg: + emsg = _("Could not create %s") % filename + "\n" + str(msg) + gnome.ui.GnomeErrorDialog(emsg) return self.database.setSavePath(old_file) @@ -801,7 +797,7 @@ class Gramps: WriteXML.quick_write(self.database,filename,self.quick_progress) self.statusbar.set_status(_("autosave complete")); except (IOError,OSError),msg: - self.statusbar.set_status(_("autosave failed") + (" - %s" % msg)); + self.statusbar.set_status("%s - %s" % (_("autosave failed"),msg)) except: import traceback traceback.print_exc() @@ -839,11 +835,12 @@ class Gramps: def on_delete_person_clicked(self,obj): if len(self.person_list.selection) == 1: - msg = _("Do you really wish to delete %s?") % \ - GrampsCfg.nameof(self.active_person) - gnome.ui.GnomeQuestionDialog( msg, self.delete_person_response) + name = GrampsCfg.nameof(self.active_person) + msg = _("Do you really wish to delete %s?") % name + gnome.ui.GnomeQuestionDialog(msg, self.delete_person_response) elif len(self.person_list.selection) > 1: - gnome.ui.GnomeErrorDialog(_("Currently, you can only delete one person at a time")) + msg = _("Currently, you can only delete one person at a time") + gnome.ui.GnomeErrorDialog(msg) def delete_person_response(self,val): if val == 1: @@ -1035,9 +1032,10 @@ class Gramps: def on_child_list_click_column(self,clist,column): """Called when the user selects a column header on the self.person_list - window. Change the sort function (column 0 is the name column, and column - 2 is the birthdate column), set the arrows on the labels to the correct - orientation, and then call apply_filter to redraw the list""" + window. Change the sort function (column 0 is the name column, and + column 2 is the birthdate column), set the arrows on the labels to + the correct orientation, and then call apply_filter to redraw the + list""" if column == self.c_name: self.child_change_sort(clist,self.c_name,self.cNameArrow) elif column == self.c_gender: @@ -1140,7 +1138,8 @@ class Gramps: # Check birth date order in the new list if (EditPerson.birth_dates_in_order(desired_order) == 0): clist.emit_stop_by_name("row_move") - gnome.ui.GnomeWarningDialog(_("Invalid move. Children must be ordered by birth date.")) + msg = _("Invalid move. Children must be ordered by birth date.") + gnome.ui.GnomeWarningDialog(msg) return # OK, this birth order works too. Update the family data structures. @@ -1162,7 +1161,7 @@ class Gramps: # Update the clist indices so any change of sorting works i = 0 for tmp in clist_order: - clist.set_text(i, self.c_birth_order, "%2d"%(new_order[tmp]+1)) + clist.set_text(i,self.c_birth_order,"%2d"%(new_order[tmp]+1)) i = i + 1 # Need to save the changed order @@ -1186,19 +1185,21 @@ class Gramps: def on_revert_activate(self,obj): if self.database.getSavePath() != "": - msg = _("Do you wish to abandon your changes and revert to the last saved database?") + msg = _("Do you wish to abandon your changes and " + "revert to the last saved database?") gnome.ui.GnomeQuestionDialog(msg,self.revert_query) else: - msg = _("Cannot revert to a previous database, since one does not exist") + msg = _("Cannot revert to a previous database, since " + "one does not exist") gnome.ui.GnomeWarningDialog(msg) def revert_query(self,value): if value == 0: - const.personalEvents = const.initialize_personal_event_list() - const.personalAttributes = const.initialize_personal_attribute_list() - const.marriageEvents = const.initialize_marriage_event_list() - const.familyAttributes = const.initialize_family_attribute_list() - const.familyRelations = const.initialize_family_relation_list() + const.personalEvents = const.init_personal_event_list() + const.personalAttributes = const.init_personal_attribute_list() + const.marriageEvents = const.init_marriage_event_list() + const.familyAttributes = const.init_family_attribute_list() + const.familyRelations = const.init_family_relation_list() file = self.database.getSavePath() self.database.new() @@ -1233,7 +1234,8 @@ class Gramps: if GrampsCfg.usevc and GrampsCfg.vc_comment: self.display_comment_box(self.database.getSavePath()) else: - self.save_file(self.database.getSavePath(),_("No Comment Provided")) + msg = _("No Comment Provided") + self.save_file(self.database.getSavePath(),msg) def on_save_activate_quit(self): """Saves the file, first prompting for a comment if revision @@ -1244,7 +1246,8 @@ class Gramps: if GrampsCfg.usevc and GrampsCfg.vc_comment: self.display_comment_box(self.database.getSavePath()) else: - self.save_file(self.database.getSavePath(),_("No Comment Provided")) + msg = _("No Comment Provided") + self.save_file(self.database.getSavePath(),msg) def display_comment_box(self,filename): """Displays a dialog box, prompting for a revison control comment""" @@ -1293,7 +1296,7 @@ class Gramps: elif page == 5: self.merge_button.set_sensitive(0) self.media_view.load_media() - + def on_swap_clicked(self,obj): if not self.active_person: return @@ -1305,14 +1308,16 @@ class Gramps: def on_apply_filter_clicked(self,obj): invert_filter = self.filter_inv.get_active() qualifer = self.filter_text.get_text() - class_init = self.filter_list.get_menu().get_active().get_data("function") + mi = self.filter_list.get_menu().get_active() + class_init = mi.get_data("function") self.DataFilter = class_init(qualifer) self.DataFilter.set_invert(invert_filter) self.apply_filter() def on_filter_name_changed(self,obj): filter = obj.get_data("filter") - if obj.get_data("qual"): + qual = obj.get_data('qual') + if qual: self.qual_label.show() self.qual_label.set_sensitive(1) self.qual_label.set_text(obj.get_data("label")) @@ -1320,7 +1325,7 @@ class Gramps: else: self.qual_label.hide() filter.hide() - filter.set_sensitive(obj.get_data("qual")) + filter.set_sensitive(qual) def on_preferred_rel_toggled(self,obj): self.active_person.setPreferred(self.active_family) @@ -1407,22 +1412,10 @@ class Gramps: sel = None for f in self.active_person.getFamilyList(): if self.active_person == f.getFather(): - if f.getMother() == None: - sname = _("Unknown") - else: - sname = GrampsCfg.nameof(f.getMother()) + sname = self.parent_name(f.getMother()) else: - if f.getFather() == None: - sname = _("Unknown") - else: - sname = GrampsCfg.nameof(f.getFather()) - l = gtk.GtkLabel(sname) - l.show() - l.set_alignment(0,0.5) - c = gtk.GtkListItem() - c.add(l) - c.set_data('d',f) - c.show() + sname = self.parent_name(f.getFather()) + c = self.list_item(sname,f) list.append(c) if f == self.active_family or sel == None: sel = c @@ -1436,6 +1429,22 @@ class Gramps: self.spouse_combo.set_item_string(mymap[v],mynmap[v]) self.spouse_combo.list.select_child(sel) + def list_item(self,label,filter): + l = gtk.GtkLabel(label) + l.set_alignment(0,0.5) + l.show() + c = gtk.GtkListItem() + c.add(l) + c.set_data('d',filter) + c.show() + return c + + def parent_name(self,person): + if person == None: + return _("Unknown") + else: + return GrampsCfg.nameof(person) + def load_family(self,family=None): if family != None: self.active_family = family @@ -1447,7 +1456,7 @@ class Gramps: if self.active_family: flist = self.active_person.getFamilyList() if self.active_person != self.active_family.getFather() and \ - self.active_family != self.active_family.getMother(): + self.active_person != self.active_family.getMother(): if len(flist) > 0: self.active_family = flist[0] else: @@ -1515,7 +1524,8 @@ class Gramps: self.spouse_text.set_text(GrampsCfg.nameof(spouse)) self.spouse_edit.set_sensitive(1) self.spouse_del.set_sensitive(1) - self.gtop.get_widget('rel_frame').set_label(_("Relationship")) + msg = _("Relationship") + self.gtop.get_widget('rel_frame').set_label(msg) else: self.pref_spouse.hide() self.spouse_tab.set_page(0) @@ -1523,13 +1533,13 @@ class Gramps: self.active_spouse = None self.spouse_edit.set_sensitive(0) self.spouse_del.set_sensitive(0) - self.gtop.get_widget('rel_frame').set_label(_("No Relationship")) + msg = _("No Relationship") + self.gtop.get_widget('rel_frame').set_label() if number_of_families > 0: - if family: - self.display_marriage(family) - else: - self.display_marriage(self.active_person.getFamilyList()[0]) + if not family: + family = self.active_person.getFamilyList()[0] + self.display_marriage(family) else: self.display_marriage(None) else: @@ -1541,7 +1551,7 @@ class Gramps: """Switches to a different set of parents on the Family View""" if self.active_parents and self.active_parents.getRelationship() == "Partners": - fn = _("Parent") + fn = _("Parent") mn = _("Parent") else: fn = _("Father") @@ -1553,14 +1563,13 @@ class Gramps: if self.active_parents == self.active_person.getMainParents(): self.gtop.get_widget('preffam').set_sensitive(0) if val > 1: - pframe.set_label(_("Preferred Parents (%d of %d)") % \ - (self.parents_index+1,val)) + msg = _("Preferred Parents (%d of %d)") % (self.parents_index+1,val) else: - pframe.set_label(_("Preferred Parents")) + msg = _("Preferred Parents") else: self.gtop.get_widget('preffam').set_sensitive(1) - pframe.set_label(_("Alternate Parents (%d of %d)") % \ - (self.parents_index+1,val)) + msg = _("Alternate Parents (%d of %d)") % (self.parents_index+1,val) + pframe.set_label(msg) else: self.gtop.get_widget('parent_frame').set_label(_("No Parents")) @@ -1628,7 +1637,6 @@ class Gramps: self.child_list.set_reorderable(self.c_sort_col == self.c_birth_order) if family: - flist = self.active_person.getFamilyList() if self.active_person == family.getFather(): self.active_spouse = family.getMother() else: diff --git a/src/plugins/FilterEditor.py b/src/plugins/FilterEditor.py index 2b30fbb37..e615f9ba8 100644 --- a/src/plugins/FilterEditor.py +++ b/src/plugins/FilterEditor.py @@ -32,6 +32,7 @@ import os import const from RelLib import * import GenericFilter +import AutoComp import intl _ = intl.gettext @@ -217,6 +218,12 @@ class FilterEditor: self.edit_rule(d) def edit_rule(self,val): + self.pmap = {} + self.add_places = [] + + for p in self.db.getPlaces(): + self.pmap[p.get_title()] = p + self.active_rule = val self.rule = libglade.GladeXML(const.filterFile,'add_rule') self.rule_top = self.rule.get_widget('add_rule') @@ -258,7 +265,10 @@ class FilterEditor: l = gtk.GtkLabel(v1) l.set_alignment(1,0.5) l.show() - if _name2list.has_key(v1): + if v == 'Place': + t = gtk.GtkCombo() + AutoComp.AutoCombo(t,self.pmap.keys()) + elif _name2list.has_key(v1): t = gtk.GtkCombo() _name2list[v1].sort() t.set_popdown_strings(_name2list[v1]) @@ -269,7 +279,7 @@ class FilterEditor: t = gtk.GtkEntry() tlist.append(t) t.show() - table.attach(l,0,1,pos,pos+1,EXPAND|FILL,0,5,5) + table.attach(l,0,1,pos,pos+1,FILL,0,5,5) table.attach(t,1,2,pos,pos+1,EXPAND|FILL,0,5,5) pos = pos + 1 self.notebook.append_page(table,gtk.GtkLabel(name)) diff --git a/src/plugins/WebPage.py b/src/plugins/WebPage.py index 6fad5ea1c..eeb68cfd3 100644 --- a/src/plugins/WebPage.py +++ b/src/plugins/WebPage.py @@ -528,112 +528,22 @@ class IndividualPage: first = 1 for child in family.getChildList(): + name = child.getPrimaryName().getRegularName() if first == 1: first = 0 else: self.doc.write_text('\n') if self.list.has_key(child): self.doc.start_link("%s.html" % child.getId()) - self.doc.write_text(child.getPrimaryName().getRegularName()) + self.doc.write_text(name) self.doc.end_link() else: - self.doc.write_text(child.getPrimaryName().getRegularName()) + self.doc.write_text(name) self.doc.end_paragraph() self.doc.end_cell() self.doc.end_row() self.doc.end_table() -#------------------------------------------------------------------------ -# -# -# -#------------------------------------------------------------------------ -def individual_filter(database,person,list,generations): - list.append(person) - -#------------------------------------------------------------------------ -# -# -# -#------------------------------------------------------------------------ -def ancestor_filter(database,person,list,generations): - - if person == None: - return - if person not in list: - list.append(person) - if generations <= 1: - return - - family = person.getMainParents() - if family != None: - ancestor_filter(database,family.getFather(),list,generations-1) - ancestor_filter(database,family.getMother(),list,generations-1) - -#------------------------------------------------------------------------ -# -# -# -#------------------------------------------------------------------------ -def descendant_filter(database,person,list,generations): - - if person == None or person in list: - return - if person not in list: - list.append(person) - if generations <= 1: - return - - for family in person.getFamilyList(): - for child in family.getChildList(): - descendant_filter(database,child,list,generations-1) - -#------------------------------------------------------------------------ -# -# -# -#------------------------------------------------------------------------ -def an_des_filter(database,person,list,generations): - - descendant_filter(database,person,list,generations) - ancestor_filter(database,person,list,generations) - -#------------------------------------------------------------------------ -# -# -# -#------------------------------------------------------------------------ -def entire_db_filter(database,person,list,generations): - - for entry in database.getPersonMap().values(): - list.append(entry) - -#------------------------------------------------------------------------ -# -# -# -#------------------------------------------------------------------------ -def an_des_of_gparents_filter(database,person,list,generations): - - my_list = [] - - family = person.getMainParents() - if family == None: - return - - for p in [ family.getMother(), family.getFather() ]: - if p: - pf = p.getMainParents() - if pf: - if pf.getFather(): - my_list.append(pf.getFather()) - if pf.getMother(): - my_list.append(pf.getMother()) - - for person in my_list: - descendant_filter(database,person,list,generations) - ancestor_filter(database,person,list,generations) - #------------------------------------------------------------------------ # # @@ -676,14 +586,43 @@ class WebReport(Report): doc.end_paragraph() person_list.sort(sort.by_last_name) - doc.write_text('
') + + a = {} + for person in person_list: + n = person.getPrimaryName().getSurname() + if n: + a[n[0]] = 1 + else: + a[''] = 1 + + col_len = len(person_list) + len(a.keys()) + col_len = col_len/2 + + doc.write_text('') + doc.write_text('
') + last = '' + end_col = 0 for person in person_list: name = person.getPrimaryName().getName() + if name and name[0] != last: + last = name[0] + doc.start_paragraph('IndexLabel') + doc.write_text(name[0]) + doc.end_paragraph() + col_len = col_len - 1 doc.start_link("%s.html" % person.getId()) doc.write_text(name) doc.end_link() - doc.newline() - doc.write_text('
') + if col_len <= 0 and end_col == 0: + doc.write_text('
') + doc.start_paragraph('IndexLabel') + doc.write_text(_("%s (continued)") % name[0]) + doc.end_paragraph() + end_col = 1 + else: + doc.newline() + col_len = col_len - 1 + doc.write_text('
') doc.close() def write_report(self): @@ -908,7 +847,13 @@ class WebReportDialog(ReportDialog): p = ParagraphStyle() p.set(font=font,bborder=1) self.default_style.add_style("SourcesTitle",p) - + + font = FontStyle() + font.set(bold=1,face=FONT_SANS_SERIF,size=14,italic=1) + p = ParagraphStyle() + p.set(font=font) + self.default_style.add_style("IndexLabel",p) + font = FontStyle() font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1) p = ParagraphStyle()