* src/EditPerson.py: don't use quote date

* src/PeopleModel.py: remove BOLD
* src/PeopleView.py: start of sorting support
* src/WriteXML.py: use hlink for Witness
* various: pychecker fixes
* configure.in: bump up to 1.1.3, the "Splunge: this is a
greate idea, but possibly lousy, and I'm not being indecisive"
release


svn: r3915
This commit is contained in:
Don Allingham 2005-01-16 04:00:35 +00:00
parent 55c549de0a
commit 347ac96279
19 changed files with 77 additions and 121 deletions

View File

@ -1,3 +1,13 @@
2005-01-15 Don Allingham <dallingham@users.sourceforge.net>
* src/EditPerson.py: don't use quote date
* src/PeopleModel.py: remove BOLD
* src/PeopleView.py: start of sorting support
* src/WriteXML.py: use hlink for Witness
* various: pychecker fixes
* configure.in: bump up to 1.1.3, the "Splunge: this is a
greate idea, but possibly lousy, and I'm not being indecisive"
release
2005-01-15 Alex Roitman <shura@alex.neuro.umn.edu>
* src/docgen/KwordDoc.py: Register with paper capabilites.
* src/docgen/PdfDoc.py: Register with paper capabilites.

2
NEWS
View File

@ -5,7 +5,7 @@ Version 1.1.3 -- the "Splunge: this is a great idea, but possibly lousy,
* Alternative .ini -based backend for storing gramps settings (replaces gconf).
* Modules providing database access and basic classes are UI-independent now.
* Improved Name handling.
* Date hadnling improvements.
* Date handling improvements.
* Documentation for core API can now be autogenerated (requires epydoc).
* Dramatic performance improvements for large databases.
* Spanish Date handler (Julio Sanchez).

View File

@ -7,8 +7,8 @@ AC_PREREQ(2.57)
AC_INIT(gramps, 1.1.3, gramps-bugs@lists.sourceforge.net)
AC_CONFIG_SRCDIR(src/gramps.py)
AM_INIT_AUTOMAKE(1.6.3)
RELEASE=0.CVS$(head -c 10 ${srcdir}/ChangeLog | tr -d '-')
dnl RELEASE=1
dnl RELEASE=0.CVS$(head -c 10 ${srcdir}/ChangeLog | tr -d '-')
RELEASE=1
VERSIONSTRING=$VERSION
if test x"$RELEASE" != "x"

View File

@ -103,8 +103,7 @@ class AddressEditor:
title_label = self.top.get_widget("title")
Utils.set_titles(self.window,title_label,
text,_('Address Editor'))
Utils.set_titles(self.window,title_label,_('Address Editor'))
if self.addr:
self.srcreflist = self.addr.get_source_references()

View File

@ -434,7 +434,6 @@ class ArgHandler:
os._exit(1)
elif format == 'gramps-pkg':
import TarFile
import time
import WriteXML
from cStringIO import StringIO

View File

@ -152,7 +152,7 @@ class DateDisplay:
return "%s %s - %s%s" % (qual_str,d1,d2,self.calendar[cal])
elif mod == Date.MOD_RANGE:
d1 = self.display_iso(start)
d2 = self.display_cal[cal](date.get_stop_date())
d2 = self.display_iso(date.get_stop_date())
return "%s %s - %s%s" % (qual_str,d1,d2,self.calendar[cal])
else:
text = self.display_iso(start)
@ -206,6 +206,8 @@ class DateDisplayEn(DateDisplay):
list value (DateDisplay.format[]).
"""
DateDisplay.__init__(self,format)
self.verify_format(format)
if format == None:
self.format = 0
@ -246,10 +248,12 @@ class DateDisplayEn(DateDisplay):
elif mod == Date.MOD_RANGE:
d1 = self.display_cal[cal](start)
d2 = self.display_cal[cal](date.get_stop_date())
return "%sbetween %s and %s%s" % (qual_str,d1,d2,self.calendar[cal])
return "%sbetween %s and %s%s" % (qual_str,d1,d2,
self.calendar[cal])
else:
text = self.display_cal[date.get_calendar()](start)
return "%s%s%s%s" % (qual_str,self._mod_str[mod],text,self.calendar[cal])
return "%s%s%s%s" % (qual_str,self._mod_str[mod],
text,self.calendar[cal])
def _display_gregorian(self,date_val):
year = self._slash_year(date_val[2],date_val[3])

View File

@ -234,8 +234,10 @@ class EditPerson:
self.prefix_label.set_text(_('Patronymic:'))
self.prefix_label.set_use_underline(True)
self.orig_birth = self.db.get_event_from_handle(person.get_birth_handle())
self.orig_death = self.db.get_event_from_handle(person.get_death_handle())
birth_handle = person.get_birth_handle()
death_handle = person.get_death_handle()
self.orig_birth = self.db.get_event_from_handle(birth_handle)
self.orig_death = self.db.get_event_from_handle(death_handle)
self.death = RelLib.Event(self.orig_death)
self.birth = RelLib.Event(self.orig_birth)
self.pname = RelLib.Name(person.get_primary_name())
@ -986,7 +988,7 @@ class EditPerson:
pname = place_title(self.db,event)
node = self.etree.add([const.display_pevent(event.get_name()),
event.get_description(),
event.get_quote_date(),pname],event)
event.get_date(),pname],event)
self.emap[str(event)] = node
if self.elist:
self.etree.select_row(0)

View File

@ -494,8 +494,8 @@ class EditPlace:
if event and event.get_place_handle() == self.place.get_handle():
fevent.append((f,event))
for media_handle in self.db.get_media_object_handles():
object = self.db.get_object_from_handle(media_handle)
if object and object.get_place_handle() == self.place.get_handle():
obj = self.db.get_object_from_handle(media_handle)
if obj and obj.get_place_handle() == self.place.get_handle():
mlist.append(object)
any = 0

View File

@ -104,9 +104,9 @@ class EventEditor:
self.witnesslist = []
self.date = Date.Date(self.event.get_date_object())
transname = const.display_event(event.get_name())
# add the name to the list if it is not already there. This tends to occur
# in translated languages with the 'Death' event, which is a partial match
# to other events
# add the name to the list if it is not already there. This
# tends to occur in translated languages with the 'Death'
# event, which is a partial match to other events
if not transname in elist:
elist.append(transname)
else:
@ -292,7 +292,9 @@ class EventEditor:
eplace_obj = self.get_place(self.place_field)
buf = self.note_field.get_buffer()
enote = unicode(buf.get_text(buf.get_start_iter(),buf.get_end_iter(),gtk.FALSE))
start = buf.get_start_iter()
stop = buf.get_end_iter()
enote = unicode(buf.get_text(start,stop,False))
eformat = self.preform.get_active()
edesc = unicode(self.descr_field.get_text())
epriv = self.priv.get_active()

View File

@ -40,7 +40,7 @@ from gettext import gettext as _
#-------------------------------------------------------------------------
import gtk
import gnome
import gnome.ui
from gnome.ui import Druid, DruidPageEdge, DruidPageStandard
#-------------------------------------------------------------------------
#
@ -93,7 +93,7 @@ class Exporter:
self.logo = gtk.gdk.pixbuf_new_from_file("%s/gramps.png" % const.rootDir)
self.splash = gtk.gdk.pixbuf_new_from_file("%s/splash.jpg" % const.rootDir)
self.d = gnome.ui.Druid()
self.d = Druid()
self.w.add(self.d)
self.d.add(self.build_info_page())
self.d.add(self.build_format_page())
@ -129,7 +129,7 @@ class Exporter:
Build initial druid page with the overall information about the process.
This is a static page, nothing fun here :-)
"""
p = gnome.ui.DruidPageEdge(0)
p = DruidPageEdge(0)
p.set_title(_('Saving your data'))
p.set_title_color(self.fg_color)
p.set_bg_color(self.bg_color)
@ -153,7 +153,7 @@ class Exporter:
Build the last druid page. The actual text will be added after the
save is performed and the success status us known.
"""
p = gnome.ui.DruidPageEdge(1)
p = DruidPageEdge(1)
p.set_title_color(self.fg_color)
p.set_bg_color(self.bg_color)
p.set_logo(self.logo)
@ -168,7 +168,7 @@ class Exporter:
is necessary, because no choice is made by the user when this
page is set up.
"""
p = gnome.ui.DruidPageStandard()
p = DruidPageStandard()
p.set_title(_('Final save confirmation'))
p.set_title_foreground(self.fg_color)
p.set_background(self.bg_color)
@ -235,7 +235,7 @@ class Exporter:
"""
self.format_buttons = []
p = gnome.ui.DruidPageStandard()
p = DruidPageStandard()
p.set_title(_('Choosing the format to save'))
p.set_title_foreground(self.fg_color)
p.set_background(self.bg_color)
@ -292,7 +292,7 @@ class Exporter:
option_box_class = self.exports[ix][3][1]
self.option_box_instance = option_box_class(self.person)
p = gnome.ui.DruidPageStandard()
p = DruidPageStandard()
p.set_title(title)
p.set_title_foreground(self.fg_color)
p.set_background(self.bg_color)
@ -310,7 +310,7 @@ class Exporter:
"""
Build a druid page embedding the FileChooserWidget.
"""
p = gnome.ui.DruidPageStandard()
p = DruidPageStandard()
p.set_title(_('Selecting the file name'))
p.set_title_foreground(self.fg_color)
p.set_background(self.bg_color)

View File

@ -47,8 +47,6 @@ import GrampsKeys
import RelLib
import const
import Utils
import PaperMenu
import Plugins
import DateHandler
#-------------------------------------------------------------------------

View File

@ -301,15 +301,9 @@ class PeopleModel(gtk.GenericTreeModel):
def column_int_id(self,data,node):
return node
def column_bold(self,data,node):
return pango.WEIGHT_NORMAL
def column_header(self,node):
return node
def column_header_bold(self,node):
return pango.WEIGHT_NORMAL #BOLD
def column_header_view(self,node):
return True
@ -332,13 +326,11 @@ COLUMN_DEFS = [
# these columns are hidden, and must always be last in the list
(PeopleModel.column_sort_name, None, gobject.TYPE_STRING),
(PeopleModel.column_bold, PeopleModel.column_header_bold,gobject.TYPE_INT),
(PeopleModel.column_int_id, None, gobject.TYPE_STRING),
]
# dynamic calculation of column indices, for use by various Views
COLUMN_INT_ID = len(COLUMN_DEFS) - 1
COLUMN_BOLD = COLUMN_INT_ID - 1
# indices into main column definition table
COLUMN_DEF_LIST = 0

View File

@ -80,19 +80,34 @@ class PeopleView:
self.columns = []
self.build_columns()
#self.person_tree.set_property('fixed-height-mode',True)
self.person_selection = self.person_tree.get_selection()
self.person_selection.connect('changed',self.row_changed)
self.person_tree.connect('row_activated', self.alpha_event)
self.person_tree.connect('button-press-event',
self.on_plist_button_press)
def sort_clicked(self,obj):
for col in self.columns:
if obj == col:
if col.get_sort_indicator():
if col.get_sort_order() == gtk.SORT_ASCENDING:
col.set_sort_order(gtk.SORT_DESCENDING)
else:
col.set_sort_order(gtk.SORT_ASCENDING)
else:
col.set_sort_order(gtk.SORT_ASCENDING)
col.set_sort_indicator(True)
else:
col.set_sort_indicator(False)
def build_columns(self):
for column in self.columns:
self.person_tree.remove_column(column)
column = gtk.TreeViewColumn(_('Name'), self.renderer,text=0)
column.set_resizable(gtk.TRUE)
#column.set_clickable(True)
#column.connect('clicked',self.sort_clicked)
column.set_min_width(225)
column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
self.person_tree.append_column(column)
@ -105,6 +120,8 @@ class PeopleView:
name = column_names[pair[1]]
column = gtk.TreeViewColumn(name, self.renderer, text=pair[1])
column.set_resizable(gtk.TRUE)
#column.set_clickable(True)
#column.connect('clicked',self.sort_clicked)
column.set_min_width(60)
column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY)
self.columns.append(column)
@ -113,11 +130,10 @@ class PeopleView:
def build_tree(self):
self.person_model = PeopleModel.PeopleModel(self.parent.db,self.DataFilter)
self.sort_model = self.person_model
self.person_tree.set_model(self.sort_model)
self.person_tree.set_model(self.person_model)
def blist(self, store, path, node, id_list):
id_list.append(self.sort_model.get_value(
id_list.append(self.person_model.get_value(
node,
PeopleModel.COLUMN_INT_ID))
@ -143,8 +159,7 @@ class PeopleView:
def change_db(self,db):
self.build_columns()
self.person_model = PeopleModel.PeopleModel(db,self.DataFilter)
self.sort_model = self.person_model
self.person_tree.set_model(self.sort_model)
self.person_tree.set_model(self.person_model)
def remove_from_person_list(self,person):
"""Remove the selected person from the list. A person object is

View File

@ -126,7 +126,7 @@ def importData(database, filename, cb=None, use_trans=True):
ansel = False
gramps = False
for index in range(0,50):
for index in range(50):
line = f.readline().split()
if len(line) == 0:
break
@ -195,7 +195,6 @@ def import2(database, filename, cb, codeset, use_trans):
ErrorDialog(m1,m2)
return
except:
import DisplayTrace
Utils.destroy_passed_object(statusWindow)
DisplayTrace.DisplayTrace()
return
@ -1982,7 +1981,6 @@ def readData(database,active_person,cb):
try:
importData(database,filename)
except:
import DisplayTrace
DisplayTrace.DisplayTrace()
else:
choose.destroy()

View File

@ -48,13 +48,10 @@ from gettext import gettext as _
#
#-------------------------------------------------------------------------
def import_media_object(filename,path,base):
import shutil
if not os.path.exists(filename):
ErrorDialog(_("Could not import %s") % filename,
_("The file has been moved or deleted"))
return ""
return filename
#-------------------------------------------------------------------------

View File

@ -40,7 +40,7 @@ from types import ClassType, InstanceType
#
#-------------------------------------------------------------------------
import gtk
import gnome.ui
from gnome.ui import FileEntry
#-------------------------------------------------------------------------
#
@ -1069,7 +1069,7 @@ class ReportDialog(BareReportDialog):
hid = self.get_stylesheet_savefile()
if hid[-4:]==".xml":
hid = hid[0:-4]
self.target_fileentry = gnome.ui.FileEntry(hid,_("Save As"))
self.target_fileentry = FileEntry(hid,_("Save As"))
self.target_fileentry.set_modal(True)
if self.get_target_is_directory():
@ -1270,7 +1270,7 @@ class ReportDialog(BareReportDialog):
label = gtk.Label("%s:" % _("User Template"))
label.set_alignment(0.0,0.5)
self.html_table.attach(label, 1, 2, 2, 3, gtk.SHRINK|gtk.FILL)
self.html_fileentry = gnome.ui.FileEntry("HTML_Template",
self.html_fileentry = FileEntry("HTML_Template",
_("Choose File"))
self.html_fileentry.set_modal(True)
if template_name and not active_index:

View File

@ -538,69 +538,8 @@ def probably_alive(person,db):
if descendants_too_old (person, min_generation):
return False
return False
# What about their parents?
def parents_too_old (person, age_difference):
family_handle = person.get_main_parents_family_handle()
if family_handle:
family = db.get_family_from_handle(family_handle)
for parent_id in [family.get_father_handle(), family.get_mother_handle()]:
if not parent_id:
continue
parent = db.get_person_from_handle(parent_id)
if parent.birth_handle:
parent_birth = db.get_event_from_handle(parent.birth_handle)
if parent_birth.get_date():
d = SingleDate (parent_birth.get_date_object().get_start_date())
d.set_year (d.get_year() + max_generation + age_difference)
if not not_too_old (d):
return True
if parent.death_handle:
parent_death = db.get_event_from_handle(parent.death_handle)
if parent_death.get_date() != "":
d = SingleDate (parent_death.get_date_object().get_start_date())
d.set_year (d.get_year() + age_difference)
if not not_too_old (d):
return True
if parents_too_old (person, 0):
return False
# As a last resort, trying seeing if their spouse's age gives
# any clue.
for family_handle in person.get_family_handle_list():
family = db.get_family_from_handle(family_handle)
for spouse_id in [family.get_father_handle(), family.get_mother_handle()]:
if not spouse_id or spouse_id == person.handle:
continue
spouse = db.get_person_from_handle(spouse_id)
sp_birth_handle = spouse.get_birth_handle()
sp_death_handle = spouse.get_death_handle()
if sp_birth_handle:
spouse_birth = db.get_event_from_handle(sp_birth_handle)
if not spouse_birth.get_date().is_empty():
d = Date.Date(spouse_birth.get_date_object())
d.set_year(d.get_year() + max_age_difference)
if not not_too_old (d):
return False
if sp_death_handle:
spouse_death = db.get_event_from_handle(sp_death_handle)
if spouse_death.get_date() != "":
d = Date.Date(spouse_death.get_date_object())
d.set_year (d.get_year() - min_generation)
if not not_too_old (d):
return False
if parents_too_old (spouse, max_age_difference):
return False
return True
def not_too_old(date):
time_struct = time.localtime(time.time())
current_year = time_struct[0]

View File

@ -302,8 +302,8 @@ class GedcomWriterOptionBox:
self.person = person
def get_option_box(self):
self.restrict = 1
self.private = 1
self.restrict = True
self.private = True
self.cnvtxt = ansel_utf8.utf8_to_ansel
self.adopt = GedcomInfo.ADOPT_EVENT
@ -1075,7 +1075,8 @@ class GedcomWriter:
self.writeln('%d %s' % (index,name))
self.print_date("%d DATE" % (index + 1), ord.get_date_object())
if ord.get_family_handle():
self.writeln('%d FAMC @%s@' % (index+1,self.fid(ord.get_family_handle().get_gramps_id())))
family_id = ord.get_family_handle()
self.writeln('%d FAMC @%s@' % (index+1,self.fid(family_id)))
if ord.get_temple():
self.writeln('%d TEMP %s' % (index+1,ord.get_temple()))
if ord.get_place_handle():

View File

@ -479,7 +479,7 @@ class XmlWriter:
com = self.fix(w.get_comment())
if w.get_type() == RelLib.Event.ID:
self.g.write('%s<witness>\n' % sp)
self.g.write(' %s<ref>%s</ref>\n' % (sp,w.get_value()))
self.g.write(' %s<hlink>%s</hlink>\n' % (sp,w.get_value()))
if com:
self.g.write(' %s<comment>%s</comment>\n' % (sp,com))
self.g.write('%s</witness>\n' % sp)
@ -520,7 +520,7 @@ class XmlWriter:
sp2 = " " * (index+1)
self.g.write('%s<lds_ord type="%s">\n' % (sp,self.fix(name)))
dateobj = ord.get_date_object()
if dateobj != None and not dateobj.is_empty():
if dateobj and not dateobj.is_empty():
self.write_date(dateobj,index+1)
if ord.get_temple():
self.g.write('%s<temple val="%s"/>\n' % (sp2,self.fix(ord.get_temple())))
@ -528,8 +528,8 @@ class XmlWriter:
if ord.get_status() != 0:
self.g.write('%s<status val="%d"/>\n' % (sp2,ord.get_status()))
if ord.get_family_handle():
self.g.write('%s<sealed_to hlink="%s"/>\n' % \
(sp2,self.fix(ord.get_family_handle().get_handle())))
self.g.write('%s<sealed_to hlink="%s"/>\n' %
(sp2,self.fix(ord.get_family_handle())))
if ord.get_note() != "":
self.write_note("note",ord.get_note_object(),index+1)
for s in ord.get_source_references():