Faster sorting and improved web page generation

svn: r228
This commit is contained in:
Don Allingham
2001-07-06 00:04:20 +00:00
parent f3512e24fd
commit 96cd065266
5 changed files with 1218 additions and 872 deletions

View File

@@ -19,7 +19,6 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Standard python modules # Standard python modules
@@ -107,7 +106,7 @@ family_window = None
queryTop = None queryTop = None
prefsTop = None prefsTop = None
pv = {} pv = {}
sortFunc = sort.by_last_name2 sortFunc = sort.fast_name_sort
sbar_active = 1 sbar_active = 1
DataFilter = Filter.create("") DataFilter = Filter.create("")
@@ -1194,31 +1193,31 @@ def on_person_list_click_column(obj,column):
dateArrow.hide() dateArrow.hide()
deathArrow.hide() deathArrow.hide()
nameArrow.show() nameArrow.show()
if sortFunc != sort.by_last_name2: if sortFunc != sort.fast_name_sort:
sortFunc = sort.by_last_name2 sortFunc = sort.fast_name_sort
nameArrow.set(GTK.ARROW_DOWN,2) nameArrow.set(GTK.ARROW_DOWN,2)
else: else:
sortFunc = sort.by_last_name_backwards2 sortFunc = sort.reverse_name_sort
nameArrow.set(GTK.ARROW_UP,2) nameArrow.set(GTK.ARROW_UP,2)
elif column == 2: elif column == 2:
nameArrow.hide() nameArrow.hide()
deathArrow.hide() deathArrow.hide()
dateArrow.show() dateArrow.show()
if sortFunc != sort.by_birthdate2: if sortFunc != sort.fast_birth_sort:
sortFunc = sort.by_birthdate2 sortFunc = sort.fast_birth_sort
dateArrow.set(GTK.ARROW_DOWN,2) dateArrow.set(GTK.ARROW_DOWN,2)
else: else:
sortFunc = sort.by_birthdate_backwards2 sortFunc = reverse_birth_sort
dateArrow.set(GTK.ARROW_UP,2) dateArrow.set(GTK.ARROW_UP,2)
elif column == 3: elif column == 3:
nameArrow.hide() nameArrow.hide()
deathArrow.show() deathArrow.show()
dateArrow.hide() dateArrow.hide()
if sortFunc != sort.by_deathdate2: if sortFunc != sort.fast_death_sort:
sortFunc = sort.by_deathdate2 sortFunc = sort.fast_death_sort
deathArrow.set(GTK.ARROW_DOWN,2) deathArrow.set(GTK.ARROW_DOWN,2)
else: else:
sortFunc = sort.by_deathdate_backwards2 sortFunc = sort.reverse_death_sort
deathArrow.set(GTK.ARROW_UP,2) deathArrow.set(GTK.ARROW_UP,2)
apply_filter() apply_filter()
@@ -2008,7 +2007,7 @@ def apply_filter():
if Config.hide_altnames == 0: if Config.hide_altnames == 0:
names = names + altnames names = names + altnames
names.sort(sortFunc) names = sortFunc(names)
person_list.freeze() person_list.freeze()
person_list.clear() person_list.clear()

View File

@@ -98,17 +98,14 @@ class IndividualPage:
self.photos = (photos == 2) or (photos == 1 and not self.alive) self.photos = (photos == 2) or (photos == 1 and not self.alive)
self.dir = dir_name self.dir = dir_name
self.link = link self.link = link
self.slist = []
self.scnt = 1
tbl = TableStyle() tbl = TableStyle()
tbl.set_width(100) tbl.set_width(100)
tbl.set_column_widths([15,85]) tbl.set_column_widths([15,85])
self.doc.add_table_style("IndTable",tbl) self.doc.add_table_style("IndTable",tbl)
tbl = TableStyle()
tbl.set_width(100)
tbl.set_column_widths([15,15,70])
self.doc.add_table_style("FamTable",tbl)
cell = TableCellStyle() cell = TableCellStyle()
self.doc.add_cell_style("NormalCell",cell) self.doc.add_cell_style("NormalCell",cell)
@@ -120,19 +117,25 @@ class IndividualPage:
# #
# #
#-------------------------------------------------------------------- #--------------------------------------------------------------------
def write_normal_row(self,list): def write_normal_row(self,label,data,sref):
self.doc.start_row() self.doc.start_row()
first = 1 self.doc.start_cell("NormalCell")
for i in list: self.doc.start_paragraph("Label")
self.doc.start_cell("NormalCell") self.doc.write_text(label)
if first == 1: self.doc.end_paragraph()
self.doc.start_paragraph("Label") self.doc.end_cell()
else:
self.doc.start_paragraph("Data") self.doc.start_cell("NormalCell")
first = 0 self.doc.start_paragraph("Data")
self.doc.write_text(i) self.doc.write_text(data)
self.doc.end_paragraph() if sref != None and sref.getBase() != None :
self.doc.end_cell() self.doc.start_link("#s%d" % self.scnt)
self.doc.write_text("<SUP>%d</SUP>" % self.scnt)
self.doc.end_link()
self.scnt = self.scnt + 1
self.slist.append(sref)
self.doc.end_paragraph()
self.doc.end_cell()
self.doc.end_row() self.doc.end_row()
#-------------------------------------------------------------------- #--------------------------------------------------------------------
@@ -145,18 +148,13 @@ class IndividualPage:
self.doc.start_cell("NormalCell") self.doc.start_cell("NormalCell")
self.doc.start_paragraph("Label") self.doc.start_paragraph("Label")
self.doc.end_paragraph() self.doc.write_text(list[0])
self.doc.end_cell()
self.doc.start_cell("NormalCell")
self.doc.start_paragraph("Label")
self.doc.write_text(list[1])
self.doc.end_paragraph() self.doc.end_paragraph()
self.doc.end_cell() self.doc.end_cell()
self.doc.start_cell("NormalCell") self.doc.start_cell("NormalCell")
self.doc.start_paragraph("Data") self.doc.start_paragraph("Data")
self.doc.write_text(list[2]) self.doc.write_text(list[1])
self.doc.end_paragraph() self.doc.end_paragraph()
self.doc.end_cell() self.doc.end_cell()
@@ -187,6 +185,30 @@ class IndividualPage:
self.doc.end_paragraph() self.doc.end_paragraph()
self.doc.end_cell() self.doc.end_cell()
self.doc.end_row() self.doc.end_row()
def write_sources(self):
self.doc.start_paragraph("SourcesTitle")
self.doc.write_text(_("Sources"))
self.doc.end_paragraph()
index = 0
for sref in self.slist:
self.doc.start_paragraph("Data")
self.doc.write_text('<A NAME="#s%d">%d. ' % (index,index))
index = index + 1
self.doc.write_text("%s. " % sref.getBase().getTitle())
author = sref.getBase().getAuthor()
if author != "":
self.doc.write_text("%s. " % author)
pubinfo = sref.getBase().getPubInfo()
if pubinfo != "":
self.doc.write_text("%s. " % pubinfo)
if sref.getDate() != "":
self.doc.write_text("%s. " % sref.getDate())
if sref.getPage() != "":
self.doc.write_text("%s. " % sref.getPage())
self.doc.end_paragraph()
#-------------------------------------------------------------------- #--------------------------------------------------------------------
# #
# #
@@ -197,7 +219,8 @@ class IndividualPage:
self.doc.open("%s%s%s" % (self.dir,os.sep,filebase)) self.doc.open("%s%s%s" % (self.dir,os.sep,filebase))
photo_list = self.person.getPhotoList() photo_list = self.person.getPhotoList()
name = self.person.getPrimaryName().getRegularName() name_obj = self.person.getPrimaryName()
name = name_obj.getRegularName()
self.doc.start_paragraph("Title") self.doc.start_paragraph("Title")
self.doc.write_text(_("Summary of %s") % name) self.doc.write_text(_("Summary of %s") % name)
@@ -213,11 +236,11 @@ class IndividualPage:
self.doc.end_paragraph() self.doc.end_paragraph()
self.doc.start_table("one","IndTable") self.doc.start_table("one","IndTable")
self.write_normal_row([ "%s:" % _("Name"), name]) self.write_normal_row("%s:" % _("Name"), name, name_obj.getSourceRef())
if self.person.getGender() == Person.male: if self.person.getGender() == Person.male:
self.write_normal_row([ "%s:" % _("Gender"), _("Male")]) self.write_normal_row("%s:" % _("Gender"), _("Male"),None)
else: else:
self.write_normal_row([ "%s:" % _("Gender"), _("Female")]) self.write_normal_row("%s:" % _("Gender"), _("Female"),None)
family = self.person.getMainFamily() family = self.person.getMainFamily()
if family: if family:
@@ -234,6 +257,8 @@ class IndividualPage:
self.write_facts() self.write_facts()
self.write_notes() self.write_notes()
self.write_families() self.write_families()
if self.scnt > 1:
self.write_sources()
if self.link: if self.link:
self.doc.start_paragraph("Data") self.doc.start_paragraph("Data")
@@ -280,9 +305,9 @@ class IndividualPage:
if place == "": if place == "":
val = "%s. %s" % (date,description) val = "%s. %s" % (date,description)
else: else:
val = _("%s in %s. %s") % (date,place,description) val = "%s, %s. %s" % (date,place,description)
self.write_normal_row([name, val]) self.write_normal_row(name, val, event.getSourceRef())
self.doc.end_table() self.doc.end_table()
@@ -328,7 +353,7 @@ class IndividualPage:
else: else:
val = "%s, %s. %s" % (date,place,description) val = "%s, %s. %s" % (date,place,description)
self.write_marriage_row(["",name, val]) self.write_marriage_row([name, val])
#-------------------------------------------------------------------- #--------------------------------------------------------------------
# #
@@ -340,7 +365,7 @@ class IndividualPage:
self.doc.write_text(_("Marriages/Children")) self.doc.write_text(_("Marriages/Children"))
self.doc.end_paragraph() self.doc.end_paragraph()
self.doc.start_table("three","FamTable") self.doc.start_table("three","IndTable")
for family in self.person.getFamilyList(): for family in self.person.getFamilyList():
if self.person == family.getFather(): if self.person == family.getFather():
@@ -348,7 +373,7 @@ class IndividualPage:
else: else:
spouse = family.getFather() spouse = family.getFather()
self.doc.start_row() self.doc.start_row()
self.doc.start_cell("NormalCell",3) self.doc.start_cell("NormalCell",2)
self.doc.start_paragraph("Spouse") self.doc.start_paragraph("Spouse")
if spouse: if spouse:
self.doc.start_link("i%s.html" % str(spouse.getId())) self.doc.start_link("i%s.html" % str(spouse.getId()))
@@ -553,6 +578,12 @@ def report(database,person):
p.set(font=font,bborder=1) p.set(font=font,bborder=1)
styles.add_style("NotesTitle",p) 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 = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1) font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle() p = ParagraphStyle()

View File

@@ -75,3 +75,11 @@ def runTool(database,active_person,callback):
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def get_description(): def get_description():
return _("Generates SoundEx codes for names") return _("Generates SoundEx codes for names")
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def get_name():
return _("Utilities/Generate SoundEx codes")

File diff suppressed because it is too large Load Diff

View File

@@ -26,18 +26,113 @@ from Date import *
# #
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def by_last_name2(first, second) : def build_sort_name(person):
n = person[0]
nm = "%-25s%-30s%s" % (n.Surname,n.FirstName,n.Suffix)
return (nm,person)
name1 = first[0] #-------------------------------------------------------------------------
name2 = second[0] #
#
#
#-------------------------------------------------------------------------
def build_sort_birth(person):
n = person[1].birth.date.start
if name1.getSurname() == name2.getSurname() : y = n.year
if name1.getFirstName() == name2.getFirstName() : if y == -1:
return cmp(name1.getSuffix(), name2.getSuffix()) y = 9999
else : m = n.month
return cmp(name1.getFirstName(), name2.getFirstName()) if m == -1:
else : m = 99
return cmp(name1.getSurname(), name2.getSurname()) d = n.day
if d == -1:
d = 99
nm = "%04d%2d%2d" % (y,m,d)
return (nm,person)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def build_sort_death(person):
n = person[1].death.date.start
y = n.year
if y == -1:
y = 9999
m = n.month
if m == -1:
m = 99
d = n.day
if d == -1:
d = 99
nm = "%04d%2d%2d" % (y,m,d)
return (nm,person)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def fast_name_sort(list):
nlist = map(build_sort_name,list)
nlist.sort()
return map(lambda(key,x): x, nlist)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def reverse_name_sort(list):
nlist = map(build_sort_name,list)
nlist.sort()
nlist.reverse()
return map(lambda(key,x): x, nlist)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def fast_birth_sort(list):
nlist = map(build_sort_birth,list)
nlist.sort()
return map(lambda(key,x): x, nlist)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def reverse_birth_sort(list):
nlist = map(build_sort_birth,list)
nlist.sort()
nlist.reverse()
return map(lambda(key,x): x, nlist)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def fast_death_sort(list):
nlist = map(build_sort_death,list)
nlist.sort()
return map(lambda(key,x): x, nlist)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def reverse_death_sort(list):
nlist = map(build_sort_death,list)
nlist.sort()
nlist.reverse()
return map(lambda(key,x): x, nlist)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@@ -65,14 +160,6 @@ def by_last_name(first, second) :
def by_last_name_backwards(first, second) : def by_last_name_backwards(first, second) :
return by_last_name(second,first) return by_last_name(second,first)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def by_last_name_backwards2(first, second) :
return by_last_name2(second,first)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# #
@@ -87,78 +174,4 @@ def by_birthdate(first, second) :
return by_last_name(first,second) return by_last_name(first,second)
return val return val
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def by_deathdate(first, second) :
date1 = first.getDeath().getDateObj()
date2 = second.getDeath().getDateObj()
val = compare_dates(date1,date2)
if val == 0:
return by_last_name(first,second)
return val
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def by_birthdate_backwards(first, second) :
return by_birthdate(second,first)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def by_deathdate_backwards(first, second) :
return by_deathdate(second,first)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def by_birthdate2(first, second) :
date1 = first[1].getBirth().getDateObj()
date2 = second[1].getBirth().getDateObj()
val = compare_dates(date1,date2)
if val == 0:
return by_last_name2(first,second)
return val
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def by_deathdate2(first, second) :
date1 = first[1].getDeath().getDateObj()
date2 = second[1].getDeath().getDateObj()
val = compare_dates(date1,date2)
if val == 0:
return by_last_name2(first,second)
return val
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def by_birthdate_backwards2(first, second) :
return by_birthdate2(second,first)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def by_deathdate_backwards2(first, second) :
return by_deathdate2(second,first)