* various: Add undo functionality

svn: r3065
This commit is contained in:
Don Allingham 2004-03-30 04:50:24 +00:00
parent feef42099d
commit 8592fa2cc9
25 changed files with 854 additions and 809 deletions

View File

@ -1,3 +1,6 @@
2004-03-29 Don Allingham <dallingham@users.sourceforge.net>
* various: Add undo functionality
2004-03-27 Alex Roitman <shura@alex.neuro.umn.edu> 2004-03-27 Alex Roitman <shura@alex.neuro.umn.edu>
* src/plugins/rel_it.py: Convert to class. * src/plugins/rel_it.py: Convert to class.

View File

@ -129,7 +129,9 @@ class AddMediaObject:
if self.update: if self.update:
self.update() self.update()
self.object = mobj self.object = mobj
self.db.commit_media_object(mobj) trans = self.db.start_transaction()
self.db.commit_media_object(mobj,trans)
self.db.add_transaction(trans)
def on_name_changed(self,obj): def on_name_changed(self,obj):
""" """

View File

@ -217,7 +217,6 @@ class AddSpouse:
self.db.add_person(person) self.db.add_person(person)
else: else:
self.db.add_person_no_map(person,person.get_id()) self.db.add_person_no_map(person,person.get_id())
self.db.build_person_display(person.get_id())
self.addperson(person) self.addperson(person)
self.update_data(person.get_id()) self.update_data(person.get_id())
#self.slist.center_selected() #self.slist.center_selected()
@ -241,12 +240,14 @@ class AddSpouse:
Utils.destroy_passed_object(obj) Utils.destroy_passed_object(obj)
return return
trans = self.db.start_transaction()
if not self.active_family: if not self.active_family:
self.active_family = self.db.new_family() self.active_family = self.db.new_family()
self.person.add_family_id(self.active_family.get_id()) self.person.add_family_id(self.active_family.get_id())
self.db.commit_person(self.person) self.db.commit_person(self.person,trans)
spouse.add_family_id(self.active_family.get_id()) spouse.add_family_id(self.active_family.get_id())
self.db.commit_person(spouse) self.db.commit_person(spouse,trans)
if self.person.get_gender() == RelLib.Person.male: if self.person.get_gender() == RelLib.Person.male:
self.active_family.set_mother_id(spouse.get_id()) self.active_family.set_mother_id(spouse.get_id())
@ -255,8 +256,10 @@ class AddSpouse:
self.active_family.set_father_id(spouse.get_id()) self.active_family.set_father_id(spouse.get_id())
self.active_family.set_mother_id(self.person.get_id()) self.active_family.set_mother_id(self.person.get_id())
self.active_family.set_relationship(const.save_frel(unicode(self.relation_type.get_text()))) rtype = const.save_frel(unicode(self.relation_type.get_text()))
self.db.commit_family(self.active_family) self.active_family.set_relationship(rtype)
self.db.commit_family(self.active_family,trans)
self.db.add_transaction(trans)
Utils.destroy_passed_object(obj) Utils.destroy_passed_object(obj)
self.update(self.active_family) self.update(self.active_family)

View File

@ -293,7 +293,8 @@ class ChooseParents:
def redrawf(self): def redrawf(self):
"""Redraws the potential father list""" """Redraws the potential father list"""
self.father_model = gtk.TreeModelSort(PeopleModel.PeopleModel(self.db, self.father_filter)) self.father_nsort = PeopleModel.PeopleModel(self.db, self.father_filter)
self.father_model = gtk.TreeModelSort(self.father_nsort)
self.father_list.set_model(self.father_model) self.father_list.set_model(self.father_model)
if self.type == "Partners": if self.type == "Partners":
self.flabel.set_label("<b>%s</b>" % _("Par_ent")) self.flabel.set_label("<b>%s</b>" % _("Par_ent"))
@ -302,7 +303,8 @@ class ChooseParents:
def redrawm(self): def redrawm(self):
"""Redraws the potential mother list""" """Redraws the potential mother list"""
self.mother_model = gtk.TreeModelSort(PeopleModel.PeopleModel(self.db, self.mother_filter)) self.mother_nsort = PeopleModel.PeopleModel(self.db, self.mother_filter)
self.mother_model = gtk.TreeModelSort(self.mother_nsort)
self.mother_list.set_model(self.mother_model) self.mother_list.set_model(self.mother_model)
if self.type == "Partners": if self.type == "Partners":
self.mlabel.set_label("<b>%s</b>" % _("Pa_rent")) self.mlabel.set_label("<b>%s</b>" % _("Pa_rent"))
@ -351,16 +353,18 @@ class ChooseParents:
family.set_mother_id(mother_id) family.set_mother_id(mother_id)
family.add_child_id(self.person.get_id()) family.add_child_id(self.person.get_id())
trans = self.db.start_transaction()
if father_id: if father_id:
father = self.db.find_person_from_id(father_id) father = self.db.find_person_from_id(father_id)
father.add_family_id(family.get_id()) father.add_family_id(family.get_id())
self.db.commit_person(father) self.db.commit_person(father,trans)
if mother_id: if mother_id:
mother = self.db.find_person_from_id(mother_id) mother = self.db.find_person_from_id(mother_id)
mother.add_family_id(family.get_id()) mother.add_family_id(family.get_id())
self.db.commit_person(mother) self.db.commit_person(mother,trans)
self.db.commit_family(family) self.db.commit_family(family,trans)
self.db.add_transaction(trans)
return family return family
def mother_list_select_row(self,obj): def mother_list_select_row(self,obj):
@ -414,8 +418,13 @@ class ChooseParents:
if len(family_id_list) >= 1: if len(family_id_list) >= 1:
family = self.db.find_family_from_id(family_id_list[0]) family = self.db.find_family_from_id(family_id_list[0])
mother_id = family.get_mother_id() mother_id = family.get_mother_id()
self.mother_selection.select(mother_id) mother = self.db.find_person_from_id(mother_id)
#self.mother_model.center_selected() sname = mother.get_primary_name().get_surname()
tpath = self.mother_nsort.on_get_path(sname)
self.mother_list.expand_row(tpath,0)
path = self.mother_nsort.on_get_path(mother_id)
self.mother_selection.select_path(path)
self.mother_list.scroll_to_cell(path,None,1,0.5,0)
def mother_list_select_row(self,obj): def mother_list_select_row(self,obj):
"""Called when a row is selected in the father list. Sets the """Called when a row is selected in the father list. Sets the
@ -432,9 +441,14 @@ class ChooseParents:
family_id_list = self.mother.get_family_id_list() family_id_list = self.mother.get_family_id_list()
if len(family_id_list) >= 1: if len(family_id_list) >= 1:
family = self.db.find_family_from_id(family_id_list[0]) family = self.db.find_family_from_id(family_id_list[0])
father_id = family.get_father_id() father_id = family.get_mother_id()
self.father_selection.select(father_id) father = self.db.find_person_from_id(father_id)
#self.father_model.center_selected() sname = father.get_primary_name().get_surname()
tpath = self.father_nsort.on_get_path(sname)
self.father_list.expand_row(tpath,0)
path = self.father_nsort.on_get_path(father_id)
self.father_selection.select_path(path)
self.father_list.scroll_to_cell(path,None,1,0.5,0)
def save_parents_clicked(self,obj): def save_parents_clicked(self,obj):
""" """
@ -491,7 +505,6 @@ class ChooseParents:
id = self.db.add_person(person) id = self.db.add_person(person)
else: else:
self.db.add_person_no_map(person,id) self.db.add_person_no_map(person,id)
self.db.build_person_display(id)
self.type = const.save_frel(unicode(self.prel.get_text())) self.type = const.save_frel(unicode(self.prel.get_text()))
dinfo = self.db.get_person_display(id) dinfo = self.db.get_person_display(id)
@ -538,12 +551,15 @@ class ChooseParents:
break break
else: else:
self.person.add_parent_family_id(family.get_id(),mother_rel,father_rel) self.person.add_parent_family_id(family.get_id(),mother_rel,father_rel)
self.db.commit_person(self.person)
self.db.commit_family(family) trans = self.db.start_transaction()
self.db.commit_person(self.person,trans)
self.db.commit_family(family,trans)
if self.father: if self.father:
self.db.commit_person(self.father) self.db.commit_person(self.father,trans)
if self.mother: if self.mother:
self.db.commit_person(self.mother) self.db.commit_person(self.mother,trans)
self.db.add_transaction(trans)
class ModifyParents: class ModifyParents:
def __init__(self,db,person,family_id,family_update,full_update,parent_window=None): def __init__(self,db,person,family_id,family_update,full_update,parent_window=None):

View File

@ -92,7 +92,8 @@ class DbPrompter:
"on_ok_button1_clicked": self.save_ok_button_clicked, "on_ok_button1_clicked": self.save_ok_button_clicked,
"destroy_passed_object": self.cancel_button_clicked, "destroy_passed_object": self.cancel_button_clicked,
}) })
wFs.get_widget('fileselection').set_title('%s - GRAMPS' % _('Create database')) filesel = wFs.get_widget('fileselection')
filesel.set_title('%s - GRAMPS' % _('Create database'))
def save_ok_button_clicked(self,obj): def save_ok_button_clicked(self,obj):
filename = obj.get_filename().encode('iso8859-1') filename = obj.get_filename().encode('iso8859-1')
@ -101,6 +102,18 @@ class DbPrompter:
self.db.read_file(filename) self.db.read_file(filename)
def open_activate(self): def open_activate(self):
wFs = gtk.glade.XML (const.gladeFile, "fileselection","gramps")
wFs.signal_autoconnect({
"on_ok_button1_clicked": self.ok_button_clicked,
"destroy_passed_object": self.cancel_button_clicked,
})
self.filesel = wFs.get_widget('fileselection')
self.filesel.set_title('%s - GRAMPS' % _('Open database'))
if GrampsCfg.lastfile:
self.filesel.set_filename(GrampsCfg.lastfile)
return
wFs = gtk.glade.XML(const.revisionFile, "dbopen","gramps") wFs = gtk.glade.XML(const.revisionFile, "dbopen","gramps")
wFs.signal_autoconnect({ wFs.signal_autoconnect({
"on_ok_button1_clicked": self.ok_button_clicked, "on_ok_button1_clicked": self.ok_button_clicked,
@ -130,7 +143,7 @@ class DbPrompter:
self.show() self.show()
def ok_button_clicked(self,obj): def ok_button_clicked(self,obj):
filename = self.dbname.get_full_path(0) filename = self.filesel.get_filename()
if not filename: if not filename:
return return

View File

@ -1409,6 +1409,9 @@ class EditPerson:
self.person.set_death_id(self.death.get_id()) self.person.set_death_id(self.death.get_id())
def on_apply_person_clicked(self,obj): def on_apply_person_clicked(self,obj):
trans = self.db.start_transaction()
surname = unicode(self.surname_field.get_text()) surname = unicode(self.surname_field.get_text())
suffix = unicode(self.suffix.get_text()) suffix = unicode(self.suffix.get_text())
prefix = unicode(self.prefix.get_text()) prefix = unicode(self.prefix.get_text())
@ -1424,7 +1427,7 @@ class EditPerson:
self.birth.set_place_id(self.get_place(self.bplace,1)) self.birth.set_place_id(self.get_place(self.bplace,1))
if idval != self.person.get_id(): if idval != self.person.get_id():
m = self.db.get_person_id_map() m = self.db.get_person_keys()
if not m.has_key(idval): if not m.has_key(idval):
if m.has_key(self.person.get_id()): if m.has_key(self.person.get_id()):
del m[self.person.get_id()] del m[self.person.get_id()]
@ -1476,20 +1479,20 @@ class EditPerson:
self.pdmap[p[0]] = key self.pdmap[p[0]] = key
if self.orig_birth == None: if self.orig_birth == None:
self.db.add_event(self.birth) self.db.add_event(self.birth,trans)
self.person.set_birth_id(self.birth.get_id()) self.person.set_birth_id(self.birth.get_id())
elif not self.orig_birth.are_equal(self.birth): elif not self.orig_birth.are_equal(self.birth):
self.db.commit_event(self.birth) self.db.commit_event(self.birth,trans)
# Update each of the families child lists to reflect any # Update each of the families child lists to reflect any
# change in ordering due to the new birth date # change in ordering due to the new birth date
family = self.person.get_main_parents_family_id() family = self.person.get_main_parents_family_id()
if (family): if (family):
f = self.db.find_family_no_map(family) f = self.db.find_family_no_map(family,trans)
new_order = self.reorder_child_list(self.person,f.get_child_id_list()) new_order = self.reorder_child_list(self.person,f.get_child_id_list())
f.set_child_id_list(new_order) f.set_child_id_list(new_order)
for (family, rel1, rel2) in self.person.get_parent_family_id_list(): for (family, rel1, rel2) in self.person.get_parent_family_id_list():
f = self.db.find_family_no_map(family) f = self.db.find_family_no_map(family,trans)
new_order = self.reorder_child_list(self.person,f.get_child_id_list()) new_order = self.reorder_child_list(self.person,f.get_child_id_list())
f.set_child_id_list(new_order) f.set_child_id_list(new_order)
@ -1497,10 +1500,10 @@ class EditPerson:
self.death.set_place_id(self.get_place(self.dplace,1)) self.death.set_place_id(self.get_place(self.dplace,1))
if self.orig_death == None: if self.orig_death == None:
self.db.add_event(self.death) self.db.add_event(self.death,trans)
self.person.set_death_id(self.death.get_id()) self.person.set_death_id(self.death.get_id())
elif not self.orig_death.are_equal(self.death): elif not self.orig_death.are_equal(self.death):
self.db.commit_event(self.death) self.db.commit_event(self.death,trans)
male = self.is_male.get_active() male = self.is_male.get_active()
female = self.is_female.get_active() female = self.is_female.get_active()
@ -1580,10 +1583,10 @@ class EditPerson:
self.update_lists() self.update_lists()
if self.callback: if self.callback:
change = (self.orig_surname != surname) or (self.orig_id != idval) change = (self.orig_surname != surname) or (self.orig_id != idval)
self.callback(self,change) self.callback(self,trans)
self.db.commit_person(self.person)
self.db.commit_person(self.person, trans)
self.db.add_transaction(trans)
self.close(1) self.close(1)
def get_place(self,field,makenew=0): def get_place(self,field,makenew=0):

View File

@ -369,7 +369,10 @@ class EditPlace:
self.gallery_ok = 1 self.gallery_ok = 1
self.update_lists() self.update_lists()
self.db.commit_place(self.place) trans = self.db.start_transaction()
self.db.commit_place(self.place,trans)
self.db.add_transaction(trans)
if self.callback: if self.callback:
self.callback(self.place) self.callback(self.place)
@ -553,16 +556,25 @@ class DeletePlaceQuery:
self.update = update self.update = update
def query_response(self): def query_response(self):
self.db.remove_place(self.place.get_id()) trans = self.db.start_transaction()
self.db.remove_place(self.place.get_id(),trans)
for key in self.db.get_person_keys(): for key in self.db.get_person_keys():
p = self.db.get_person(key) p = self.db.get_person(key)
for event in [p.get_birth(), p.get_death()] + p.get_event_list(): for event_id in [p.get_birth_id(), p.get_death_id()] + p.get_event_list():
if event.get_place_id() == self.place: event = self.db.find_event_from_id(event_id)
event.set_place_id(None) if event and event.get_place_id() == self.place.get_id():
for f in self.db.get_family_id_map().values():
for event in f.get_event_list():
if event.get_place_id() == self.place:
event.set_place_id(None) event.set_place_id(None)
self.db.commit_event(event,trans)
for fid in self.db.get_family_keys():
f = self.db.find_family_from_id(fid)
for event_id in f.get_event_list():
event = self.db.find_event_from_id(event_id)
if event and event.get_place_id() == self.place.get_id():
event.set_place_id(None)
self.db.commit_event(event,trans)
self.db.add_transaction(trans)
self.update(None) self.update(None)

View File

@ -326,7 +326,10 @@ class EditSource:
self.gallery_ok = 1 self.gallery_ok = 1
self.db.commit_source(self.source) trans = self.db.start_transaction()
self.db.commit_source(self.source,trans)
self.db.add_transaction(trans)
if self.callback: if self.callback:
self.callback(self.source) self.callback(self.source)
self.close(obj) self.close(obj)
@ -362,42 +365,53 @@ class DelSrcQuery:
m = 1 m = 1
if m: if m:
object.set_source_reference_list(l) object.set_source_reference_list(l)
return m
def query_response(self): def query_response(self):
self.db.remove_source_id(self.source.get_id()) trans = self.db.start_transaction()
for key in self.db.get_person_keys(): for key in self.db.get_person_keys():
commit = 0
p = self.db.get_person(key) p = self.db.get_person(key)
for v_id in p.get_event_list() + [p.get_birth_id(), p.get_death_id()]: for v_id in p.get_event_list() + [p.get_birth_id(), p.get_death_id()]:
v = self.db.find_event_from_id(v_id) v = self.db.find_event_from_id(v_id)
if v: if v:
self.delete_source(v) commit += self.delete_source(v)
for v in p.get_attribute_list(): for v in p.get_attribute_list():
self.delete_source(v) commit += self.delete_source(v)
for v in p.get_alternate_names() + [p.get_primary_name()]: for v in p.get_alternate_names() + [p.get_primary_name()]:
self.delete_source(v) commit += self.delete_source(v)
for v in p.get_address_list(): for v in p.get_address_list():
self.delete_source(v) commit += self.delete_source(v)
if commit > 0:
self.db.commit_person(p,trans)
for p_id in self.db.get_family_keys(): for p_id in self.db.get_family_keys():
commit = 0
p = self.db.find_family_from_id(p_id) p = self.db.find_family_from_id(p_id)
for v_id in p.get_event_list(): for v_id in p.get_event_list():
v = self.db.find_event_from_id(v_id) v = self.db.find_event_from_id(v_id)
if v: if v:
self.delete_source(v) commit += self.delete_source(v)
for v in p.get_attribute_list(): for v in p.get_attribute_list():
self.delete_source(v) commit += self.delete_source(v)
if commit > 0:
self.db.commit_family(p,trans)
for p_id in self.db.get_object_keys(): for p_id in self.db.get_object_keys():
p = self.db.find_object_from_id(p_id) p = self.db.find_object_from_id(p_id)
self.delete_source(p) if self.delete_source(p):
self.db.commit_media_object(p,trans)
for key in self.db.get_place_id_keys(): for key in self.db.get_place_id_keys():
p = self.db.find_place_from_id(key) p = self.db.find_place_from_id(key)
self.delete_source(self.db.find_place_from_id(key)) if self.delete_source(self.db.find_place_from_id(key)):
self.db.commit_place(p,trans)
self.update(0) self.db.remove_source_id(self.source.get_id(),trans)
self.db.add_transaction(trans)
self.update()

View File

@ -356,7 +356,9 @@ class EventEditor:
if self.event.get_privacy() != priv: if self.event.get_privacy() != priv:
self.event.set_privacy(priv) self.event.set_privacy(priv)
self.parent.lists_changed = 1 self.parent.lists_changed = 1
self.db.commit_event(self.event) trans = self.db.start_transaction()
self.db.commit_event(self.event,trans)
self.db.add_transaction(trans)
def on_switch_page(self,obj,a,page): def on_switch_page(self,obj,a,page):
buf = self.note_field.get_buffer() buf = self.note_field.get_buffer()

View File

@ -87,16 +87,26 @@ class FamilyView:
self.sp_par_arrow = "Down" self.sp_par_arrow = "Down"
self.child_arrow = "Up" self.child_arrow = "Up"
if not already_init: if not already_init:
self.top.get_widget('add_parents2').connect('clicked',self.add_parents_clicked) self.top.get_widget('add_parents2').connect('clicked',
self.top.get_widget('del_parents2').connect('clicked',self.del_parents_clicked) self.add_parents_clicked)
self.top.get_widget('add_spparents2').connect('clicked',self.add_sp_parents) self.top.get_widget('del_parents2').connect('clicked',
self.top.get_widget('del_spparents2').connect('clicked',self.del_sp_parents) self.del_parents_clicked)
self.top.get_widget('fam_back2').connect('clicked',self.child_back) self.top.get_widget('add_spparents2').connect('clicked',
self.top.get_widget('del_child_btn2').connect('clicked',self.remove_child_clicked) self.add_sp_parents)
self.top.get_widget('add_child_btn2').connect('clicked',self.add_child_clicked) self.top.get_widget('del_spparents2').connect('clicked',
self.top.get_widget('select_child2').connect('clicked',self.select_child_clicked) self.del_sp_parents)
self.top.get_widget('ap_parents_btn2').connect('clicked',self.ap_parents_clicked) self.top.get_widget('fam_back2').connect('clicked',
self.top.get_widget('sp_parents_btn2').connect('clicked',self.sp_parents_clicked) self.child_back)
self.top.get_widget('del_child_btn2').connect('clicked',
self.remove_child_clicked)
self.top.get_widget('add_child_btn2').connect('clicked',
self.add_child_clicked)
self.top.get_widget('select_child2').connect('clicked',
self.select_child_clicked)
self.top.get_widget('ap_parents_btn2').connect('clicked',
self.ap_parents_clicked)
self.top.get_widget('sp_parents_btn2').connect('clicked',
self.sp_parents_clicked)
self.parent.views.get_nth_page(2).show_all() self.parent.views.get_nth_page(2).show_all()
if self.parent.views.get_current_page() == 1: if self.parent.views.get_current_page() == 1:
self.parent.views.set_current_page(2) self.parent.views.set_current_page(2)
@ -117,16 +127,26 @@ class FamilyView:
self.sp_par_arrow = "Right" self.sp_par_arrow = "Right"
self.child_arrow = "Left" self.child_arrow = "Left"
if not already_init: if not already_init:
self.top.get_widget('add_parents').connect('clicked',self.add_parents_clicked) self.top.get_widget('add_parents').connect('clicked',
self.top.get_widget('del_parents').connect('clicked',self.del_parents_clicked) self.add_parents_clicked)
self.top.get_widget('add_spparents').connect('clicked',self.add_sp_parents) self.top.get_widget('del_parents').connect('clicked',
self.top.get_widget('del_spparents').connect('clicked',self.del_sp_parents) self.del_parents_clicked)
self.top.get_widget('fam_back').connect('clicked',self.child_back) self.top.get_widget('add_spparents').connect('clicked',
self.top.get_widget('del_child_btn').connect('clicked',self.remove_child_clicked) self.add_sp_parents)
self.top.get_widget('add_child_btn').connect('clicked',self.add_child_clicked) self.top.get_widget('del_spparents').connect('clicked',
self.top.get_widget('select_child').connect('clicked',self.select_child_clicked) self.del_sp_parents)
self.top.get_widget('ap_parents_btn').connect('clicked',self.ap_parents_clicked) self.top.get_widget('fam_back').connect('clicked',
self.top.get_widget('sp_parents_btn').connect('clicked',self.sp_parents_clicked) self.child_back)
self.top.get_widget('del_child_btn').connect('clicked',
self.remove_child_clicked)
self.top.get_widget('add_child_btn').connect('clicked',
self.add_child_clicked)
self.top.get_widget('select_child').connect('clicked',
self.select_child_clicked)
self.top.get_widget('ap_parents_btn').connect('clicked',
self.ap_parents_clicked)
self.top.get_widget('sp_parents_btn').connect('clicked',
self.sp_parents_clicked)
self.parent.views.get_nth_page(1).show_all() self.parent.views.get_nth_page(1).show_all()
if self.parent.views.get_current_page() == 2: if self.parent.views.get_current_page() == 2:
self.parent.views.set_current_page(1) self.parent.views.set_current_page(1)
@ -234,7 +254,7 @@ class FamilyView:
and event.state == gtk.gdk.CONTROL_MASK: and event.state == gtk.gdk.CONTROL_MASK:
self.spouse_swap(obj) self.spouse_swap(obj)
elif event.keyval == gtk.gdk.keyval_from_name("Delete") and not event.state: elif event.keyval == gtk.gdk.keyval_from_name("Delete") and not event.state:
self.remove_spouse(obj) self.remove_spouse(obj,trans)
elif event.keyval == gtk.gdk.keyval_from_name("Insert") and not event.state: elif event.keyval == gtk.gdk.keyval_from_name("Insert") and not event.state:
self.select_spouse(obj) self.select_spouse(obj)
elif event.keyval == gtk.gdk.keyval_from_name("Insert") \ elif event.keyval == gtk.gdk.keyval_from_name("Insert") \
@ -530,7 +550,9 @@ class FamilyView:
def set_preferred_spouse(self,obj): def set_preferred_spouse(self,obj):
if self.selected_spouse: if self.selected_spouse:
self.person.set_preferred_family_id(self.family) self.person.set_preferred_family_id(self.family)
self.parent.db.commit_person(self.person) trans = self.parent.db.start_transaction()
self.parent.db.commit_person(self.person,trans)
self.parent.db.add_transaction(trans)
self.load_family() self.load_family()
def edit_spouse_callback(self,obj): def edit_spouse_callback(self,obj):
@ -597,28 +619,30 @@ class FamilyView:
def spouse_after_edit(self,epo): def spouse_after_edit(self,epo):
ap = self.parent.active_person ap = self.parent.active_person
if epo: if epo:
self.parent.db.build_person_display(epo.person.get_id(),epo.original_id) trans = self.parent.db.start_transaction()
self.parent.db.commit_person(epo.person) self.parent.db.commit_person(epo.person,trans)
self.parent.db.add_transaction(trans)
self.parent.people_view.remove_from_person_list(epo.person,epo.original_id) self.parent.people_view.remove_from_person_list(epo.person,epo.original_id)
self.parent.people_view.redisplay_person_list(epo.person) self.parent.people_view.redisplay_person_list(epo.person)
self.parent.active_person = ap self.parent.active_person = ap
self.load_family(self.family) self.load_family(self.family)
def new_spouse_after_edit(self,epo,change): def new_spouse_after_edit(self,epo,trans):
if epo.person.get_id() == "": if epo.person.get_id() == "":
self.parent.db.add_person(epo.person) self.parent.db.add_person(epo.person,trans)
else: else:
self.parent.db.add_person_no_map(epo.person,epo.person.get_id()) self.parent.db.add_person_no_map(epo.person,epo.person.get_id(),trans)
self.family = self.parent.db.new_family(trans)
self.parent.people_view.add_to_person_list(epo.person,0) self.parent.people_view.add_to_person_list(epo.person,0)
self.family = self.parent.db.new_family()
self.person.add_family_id(self.family.get_id()) self.person.add_family_id(self.family.get_id())
epo.person.add_family_id(self.family.get_id()) epo.person.add_family_id(self.family.get_id())
self.parent.db.commit_person(epo.person) self.parent.db.commit_person(epo.person,trans)
self.parent.db.commit_person(self.person) self.parent.db.commit_person(self.person,trans)
if self.person.get_gender() == RelLib.Person.male: if self.person.get_gender() == RelLib.Person.male:
self.family.set_mother_id(epo.person.get_id()) self.family.set_mother_id(epo.person.get_id())
@ -627,7 +651,7 @@ class FamilyView:
self.family.set_father_id(epo.person.get_id()) self.family.set_father_id(epo.person.get_id())
self.family.set_mother_id(self.person.get_id()) self.family.set_mother_id(self.person.get_id())
self.parent.db.commit_family(self.family) self.parent.db.commit_family(self.family,trans)
self.load_family(self.family) self.load_family(self.family)
Marriage.Marriage(self.parent,self.family,self.parent.db, Marriage.Marriage(self.parent,self.family,self.parent.db,
@ -671,14 +695,13 @@ class FamilyView:
self.parent.update_person_list(person) self.parent.update_person_list(person)
self.load_family(self.family) self.load_family(self.family)
def new_child_after_edit(self,epo): def new_child_after_edit(self,epo,trans):
if epo.person.get_id() == "": if epo.person.get_id() == "":
self.parent.db.add_person(epo.person) self.parent.db.add_person(epo.person,trans)
else: else:
self.parent.db.add_person_no_map(epo.person,epo.person.get_id()) self.parent.db.add_person_no_map(epo.person,epo.person.get_id(),trans)
self.parent.db.build_person_display(epo.person.get_id())
self.parent.people_view.add_to_person_list(epo.person,0) self.parent.people_view.add_to_person_list(epo.person,0)
if not self.family: if not self.family:
@ -691,8 +714,8 @@ class FamilyView:
self.family.add_child_id(epo.person.get_id()) self.family.add_child_id(epo.person.get_id())
epo.person.add_parent_family_id(self.family.get_id(),"Birth","Birth") epo.person.add_parent_family_id(self.family.get_id(),"Birth","Birth")
self.parent.db.commit_person(epo.person) self.parent.db.commit_person(epo.person,trans)
self.parent.db.commit_family(self.family) self.parent.db.commit_family(self.family,trans)
self.display_marriage(self.family) self.display_marriage(self.family)
def select_child_clicked(self,obj): def select_child_clicked(self,obj):
@ -716,6 +739,8 @@ class FamilyView:
id = self.child_model.get_value(iter,2) id = self.child_model.get_value(iter,2)
child = self.parent.db.get_person(id) child = self.parent.db.get_person(id)
trans = self.parent.db.start_transaction()
self.family.remove_child_id(child.get_id()) self.family.remove_child_id(child.get_id())
child.remove_parent_family_id(self.family.get_id()) child.remove_parent_family_id(self.family.get_id())
@ -725,8 +750,10 @@ class FamilyView:
elif self.family.get_mother_id() == None: elif self.family.get_mother_id() == None:
self.delete_family_from(self.family.get_father_id()) self.delete_family_from(self.family.get_father_id())
self.parent.db.commit_person(child) self.parent.db.commit_person(child,trans)
self.parent.db.commit_family(self.family) self.parent.db.commit_family(self.family,trans)
self.parent.db.add_transaction(trans)
self.load_family() self.load_family()
def remove_spouse(self,obj): def remove_spouse(self,obj):
@ -752,16 +779,18 @@ class FamilyView:
else: else:
self.family.set_mother_id(None) self.family.set_mother_id(None)
trans = self.parent.db.start_transaction()
if self.selected_spouse: if self.selected_spouse:
self.selected_spouse.remove_family_id(self.family.get_id()) self.selected_spouse.remove_family_id(self.family.get_id(),trans)
self.parent.db.commit_person(self.selected_spouse) self.parent.db.commit_person(self.selected_spouse,trans)
self.parent.db.commit_family(self.family) self.parent.db.commit_family(self.family,trans)
if len(self.family.get_child_id_list()) == 0: if len(self.family.get_child_id_list()) == 0:
self.person.remove_family_id(self.family.get_id()) self.person.remove_family_id(self.family.get_id(),trans)
self.parent.db.commit_person(self.person) self.parent.db.commit_person(self.person,trans)
self.parent.db.delete_family(self.family.get_id()) self.parent.db.delete_family(self.family.get_id(),trans)
if len(self.person.get_family_id_list()) > 0: if len(self.person.get_family_id_list()) > 0:
family_id = self.person.get_family_id_list()[0] family_id = self.person.get_family_id_list()[0]
self.load_family(self.parent.db.find_family_from_id(family_id)) self.load_family(self.parent.db.find_family_from_id(family_id))
@ -769,6 +798,7 @@ class FamilyView:
self.load_family(self.family) self.load_family(self.family)
else: else:
self.load_family(self.family) self.load_family(self.family)
self.parent.db.add_transaction(trans)
if len(self.person.get_family_id_list()) <= 1: if len(self.person.get_family_id_list()) <= 1:
self.spouse_selection.set_mode(gtk.SELECTION_NONE) self.spouse_selection.set_mode(gtk.SELECTION_NONE)
@ -806,7 +836,9 @@ class FamilyView:
person = self.parent.db.find_person_from_id(person_id) person = self.parent.db.find_person_from_id(person_id)
self.parent.change_active_person(person) self.parent.change_active_person(person)
self.parent.db.commit_family(family) trans = self.parent.db.start_transaction()
self.parent.db.commit_family(family,trans)
self.parent.db.add_transaction(trans)
self.load_family(family) self.load_family(family)
def clear(self): def clear(self):
@ -938,13 +970,15 @@ class FamilyView:
return _("%s: unknown") % (l) return _("%s: unknown") % (l)
def delete_family_from(self,person): def delete_family_from(self,person):
person.remove_family_id(self.family.get_id()) trans = self.parent.db.start_transaction()
self.parent.db.delete_family(self.family.get_id()) person.remove_family_id(self.family.get_id(),trans)
self.parent.db.delete_family(self.family.get_id(),trans)
flist = self.person.get_family_id_list() flist = self.person.get_family_id_list()
if len(flist) > 0: if len(flist) > 0:
self.family = flist[0] self.family = flist[0]
else: else:
self.family = None self.family = None
self.parent.db.add_transaction(trans)
def display_marriage(self,family): def display_marriage(self,family):
self.child_model.clear() self.child_model.clear()
@ -1228,7 +1262,10 @@ class FamilyView:
fam = person.get_parent_family_id_list()[row[0]] fam = person.get_parent_family_id_list()[row[0]]
person.remove_parent_family_id(fam[0]) person.remove_parent_family_id(fam[0])
self.parent.db.commit_person(person) trans = self.parent.db.start_transaction()
self.parent.db.commit_person(person,trans)
self.parent.db.add_transaction(trans)
self.load_family() self.load_family()
def drag_data_received(self,widget,context,x,y,sel_data,info,time): def drag_data_received(self,widget,context,x,y,sel_data,info,time):

View File

@ -235,7 +235,7 @@ def loadConfig(call):
global familyview global familyview
_callback = call _callback = call
lastfile = get_string("/apps/gramps/last-file") lastfile = get_string("/apps/gramps/recent-file")
uselds = get_bool("/apps/gramps/use-lds") uselds = get_bool("/apps/gramps/use-lds")
ac = get_bool("/apps/gramps/disable-auto-complete",0) ac = get_bool("/apps/gramps/disable-auto-complete",0)
mediaref = get_bool("/apps/gramps/make-reference",1) mediaref = get_bool("/apps/gramps/make-reference",1)
@ -372,7 +372,7 @@ def sync():
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def save_last_file(file): def save_last_file(file):
set_string("/apps/gramps/last-file",file) set_string("/apps/gramps/recent-file",file)
sync() sync()
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -705,7 +705,6 @@ class GrampsParser:
self.family = None self.family = None
def stop_person(self,tag): def stop_person(self,tag):
self.db.build_person_display(self.person.get_id())
self.db.commit_person(self.person) self.db.commit_person(self.person)
self.person = None self.person = None

View File

@ -525,7 +525,7 @@ class Gallery(ImageSelect):
if GrampsCfg.globalprop: if GrampsCfg.globalprop:
GlobalMediaProperties(self.db,photo,None) GlobalMediaProperties(self.db,photo,None)
else: else:
if self.db.get_object_map().has_key(data.data): if self.db.has_object_id(data.data):
icon_index = self.get_index(w,x,y) icon_index = self.get_index(w,x,y)
index = 0 index = 0
for p in self.dataobj.get_media_list(): for p in self.dataobj.get_media_list():
@ -822,7 +822,10 @@ class LocalMediaProperties:
if self.lists_changed: if self.lists_changed:
self.photo.set_attribute_list(self.alist) self.photo.set_attribute_list(self.alist)
self.parent.lists_changed = 1 self.parent.lists_changed = 1
self.db.commit_media_object(self.object)
trans = self.db.start_transaction()
self.db.commit_media_object(self.object,trans)
self.db.add_transaction(trans)
def on_help_clicked(self, obj): def on_help_clicked(self, obj):
"""Display the relevant portion of GRAMPS manual""" """Display the relevant portion of GRAMPS manual"""
@ -1061,7 +1064,9 @@ class GlobalMediaProperties:
self.object.set_attribute_list(self.alist) self.object.set_attribute_list(self.alist)
if self.update != None: if self.update != None:
self.update() self.update()
self.db.commit_media_object(self.object) trans = self.db.start_transaction()
self.db.commit_media_object(self.object,trans)
self.db.add_transaction(trans)
def on_help_clicked(self, obj): def on_help_clicked(self, obj):
"""Display the relevant portion of GRAMPS manual""" """Display the relevant portion of GRAMPS manual"""
@ -1115,8 +1120,8 @@ class DeleteMediaQuery:
self.update = update self.update = update
def query_response(self): def query_response(self):
del self.db.get_object_map()[self.media.get_id()] trans = self.db.start_transaction()
for key in self.db.get_person_keys(): for key in self.db.get_person_keys():
p = self.db.get_person(key) p = self.db.get_person(key)
nl = [] nl = []
@ -1128,8 +1133,10 @@ class DeleteMediaQuery:
change = 1 change = 1
if change: if change:
p.set_media_list(nl) p.set_media_list(nl)
self.db.commit_person(p,trans)
for p in self.db.get_family_id_map().values(): for fid in self.db.get_family_keys():
p = self.db.find_family_from_id(fid)
nl = [] nl = []
change = 0 change = 0
for photo in p.get_media_list(): for photo in p.get_media_list():
@ -1139,9 +1146,10 @@ class DeleteMediaQuery:
change = 1 change = 1
if change: if change:
p.set_media_list(nl) p.set_media_list(nl)
self.db.commit_family(p,trans)
for key in self.db.get_source_keys(): for key in self.db.get_source_keys():
p = self.db.get_source(key) sid = self.db.find_source_from_id(key,trans)
nl = [] nl = []
change = 0 change = 0
for photo in p.get_media_list(): for photo in p.get_media_list():
@ -1151,9 +1159,10 @@ class DeleteMediaQuery:
change = 1 change = 1
if change: if change:
p.set_media_list(nl) p.set_media_list(nl)
self.db.commit_source(p,trans)
for key in self.db.get_place_id_keys(): for key in self.db.get_place_id_keys():
p = self.db.get_place_id(key) p = self.db.find_place_from_id(key)
nl = [] nl = []
change = 0 change = 0
for photo in p.get_media_list(): for photo in p.get_media_list():
@ -1163,6 +1172,9 @@ class DeleteMediaQuery:
change = 1 change = 1
if change: if change:
p.set_media_list(nl) p.set_media_list(nl)
self.db.commit_place(p,trans)
self.db.remove_object(self.media.get_id(),trans)
self.db.add_transaction(trans)
if self.update: if self.update:
self.update(0) self.update()

View File

@ -635,7 +635,9 @@ class Marriage:
self.update_lists() self.update_lists()
self.update_fv(self.family) self.update_fv(self.family)
self.db.commit_family(self.family) trans = self.db.start_transaction()
self.db.commit_family(self.family,trans)
self.db.add_transaction(trans)
self.close(1) self.close(1)

View File

@ -150,14 +150,6 @@ class MediaView:
self.build_columns() self.build_columns()
self.build_tree() self.build_tree()
def goto(self,id):
self.selection.unselect_all()
iter = self.id2col[id]
self.selection.select_iter(iter)
itpath = self.model.get_path (iter)
col = self.list.get_column (0)
self.list.scroll_to_cell (itpath, col, gtk.TRUE, 0.5, 0)
def build_tree(self): def build_tree(self):
self.list.set_model(None) self.list.set_model(None)
self.model = gtk.TreeModelSort(DisplayModels.MediaModel(self.parent.db)) self.model = gtk.TreeModelSort(DisplayModels.MediaModel(self.parent.db))
@ -295,7 +287,7 @@ class MediaView:
id = store.get_value(iter,1) id = store.get_value(iter,1)
mobj = self.db.find_object_from_id(id) mobj = self.db.find_object_from_id(id)
if self.is_object_used(mobj): if self.is_object_used(mobj):
ans = ImageSelect.DeleteMediaQuery(mobj,self.db,self.update) ans = ImageSelect.DeleteMediaQuery(mobj,self.db,self.build_tree)
QuestionDialog(_('Delete Media Object?'), QuestionDialog(_('Delete Media Object?'),
_('This media object is currently being used. ' _('This media object is currently being used. '
'If you delete this object, it will be removed ' 'If you delete this object, it will be removed '
@ -304,8 +296,10 @@ class MediaView:
_('_Delete Media Object'), _('_Delete Media Object'),
ans.query_response) ans.query_response)
else: else:
self.db.remove_object(mobj.get_id()) trans = self.db.start_transaction()
self.update(0) self.db.remove_object(mobj.get_id(),trans)
self.db.add_transaction(trans)
self.build_tree()
def is_object_used(self,mobj): def is_object_used(self,mobj):
for family_id in self.db.get_family_keys(): for family_id in self.db.get_family_keys():
@ -366,7 +360,8 @@ class MediaView:
photo.set_thumbnail(RelImage.build_thumbnail(name)) photo.set_thumbnail(RelImage.build_thumbnail(name))
description = os.path.basename(name) description = os.path.basename(name)
photo.set_description(description) photo.set_description(description)
self.db.add_object(photo) trans = self.db.start_transaction()
self.db.add_object(photo,trans)
self.load_media() self.load_media()
if GrampsCfg.mediaref == 0: if GrampsCfg.mediaref == 0:
name = RelImage.import_media_object(name, name = RelImage.import_media_object(name,
@ -375,7 +370,10 @@ class MediaView:
if name: if name:
photo.set_path(name) photo.set_path(name)
photo.setLocal(1) photo.setLocal(1)
self.db.commit_media_object(photo)
self.db.commit_media_object(photo,trans)
self.db.add_transaction(trans)
if GrampsCfg.globalprop: if GrampsCfg.globalprop:
ImageSelect.GlobalMediaProperties(self.db,photo,self.load_media) ImageSelect.GlobalMediaProperties(self.db,photo,self.load_media)
elif protocol != "": elif protocol != "":
@ -394,7 +392,8 @@ class MediaView:
photo.set_description(d) photo.set_description(d)
photo.setLocal(1) photo.setLocal(1)
photo.set_path(tfile) photo.set_path(tfile)
self.db.add_object(photo) trans = self.db.start_transaction()
self.db.add_object(photo,trans)
oref = RelLib.MediaRef() oref = RelLib.MediaRef()
oref.set_reference(photo) oref.set_reference(photo)
try: try:
@ -407,7 +406,10 @@ class MediaView:
except: except:
photo.set_path(tfile) photo.set_path(tfile)
return return
self.db.commit_media_object(photo)
self.db.commit_media_object(photo,trans)
self.db.add_transaction(trans)
if GrampsCfg.globalprop: if GrampsCfg.globalprop:
ImageSelect.GlobalMediaProperties(self.db,photo,None) ImageSelect.GlobalMediaProperties(self.db,photo,None)

View File

@ -307,7 +307,7 @@ class MergePeople:
event = self.p2.get_death() event = self.p2.get_death()
event.set_name("Alternate Death") event.set_name("Alternate Death")
self.p1.add_event(event) self.p1.add_event(event)
if self.glade.get_widget("bfather2").get_active(): if self.glade.get_widget("bfather2").get_active():
orig_family = self.p1.get_main_parents_family_id() orig_family = self.p1.get_main_parents_family_id()
if orig_family: if orig_family:
@ -347,7 +347,6 @@ class MergePeople:
try: try:
self.db.remove_person_id(self.p2.get_id()) self.db.remove_person_id(self.p2.get_id())
self.db.personMap[self.p1.get_id()] = self.p1 self.db.personMap[self.p1.get_id()] = self.p1
self.db.build_person_display(self.p1.get_id(),old_id)
except: except:
print "%s is not in the person map!" % (GrampsCfg.nameof(self.p2)) print "%s is not in the person map!" % (GrampsCfg.nameof(self.p2))
self.update(self.p1,self.p2,old_id) self.update(self.p1,self.p2,old_id)

View File

@ -62,7 +62,7 @@ class PeopleModel(gtk.GenericTreeModel):
if not self.db.is_open(): if not self.db.is_open():
return return
for person_id in self.db.get_person_keys(): for person_id in self.db.get_person_keys():
person = self.db.find_person_from_id(person_id) person = self.db.find_person_from_id(person_id)
@ -141,7 +141,8 @@ class PeopleModel(gtk.GenericTreeModel):
else: else:
return u'' return u''
else: else:
return self.fmap[col](self.db.person_map[str(iter)]) val = self.fmap[col](self.db.person_map[str(iter)])
return val
def on_iter_next(self, node): def on_iter_next(self, node):
'''returns the next node at this level of the tree''' '''returns the next node at this level of the tree'''

View File

@ -1,325 +0,0 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#-------------------------------------------------------------------------
#
# GNOME
#
#-------------------------------------------------------------------------
from gobject import TYPE_STRING, TYPE_INT
import gtk
import pango
#-------------------------------------------------------------------------
#
# internationalization
#
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# constants
#
#-------------------------------------------------------------------------
_BCOL = 8
_IDCOL = 1
_TOP_FONT=pango.WEIGHT_ULTRABOLD
_TEXT_FONT=pango.WEIGHT_NORMAL
#-------------------------------------------------------------------------
#
# PeopleStore
#
#-------------------------------------------------------------------------
class PeopleStore:
def __init__(self,tree,parent,select_func=None,event_func=None,
mode=gtk.SELECTION_SINGLE):
self.titles = [
(_('Name'),5,250), (_('ID'),1,50),(_('Gender'),2,70),
(_('Birth date'),6,150),(_('Death date'),7,150)
]
ncols = len(self.titles) + 3
self.tree = tree
self.parent = parent
self.tree.connect('row-expanded',self.on_row_expanded)
self.mylist = [TYPE_STRING]*ncols + [TYPE_INT]
self.tree.set_rules_hint(gtk.TRUE)
self.model = None
self.tree_roots = {}
self.tree_open = {}
self.tree_list = {}
self.selection = None
self.mode = mode
self.new_model()
self.count = 0
self.cid = None
self.cids = []
cnum = 0
for name in self.titles:
renderer = gtk.CellRendererText()
renderer.set_fixed_height_from_font(1)
if name[0] != '':
column = gtk.TreeViewColumn(name[0],renderer,text=cnum)
column.set_min_width(name[2])
column.set_resizable(gtk.TRUE)
column.set_clickable(gtk.TRUE)
column.set_sort_column_id(name[1])
cnum += 1
self.cids.append(name[1])
self.tree.append_column(column)
self.connect_model()
if select_func:
self.selection.connect('changed',select_func)
if event_func:
self.double_click = event_func
self.tree.connect('row_activated', self.row_activated)
def row_activated (self, treeview, path, column):
self.double_click (treeview)
def enable_sort(self):
if self.cids[0] != -1:
self.model.set_sort_column_id(self.cids[0],gtk.SORT_ASCENDING)
def unselect(self):
self.selection.unselect_all()
def set_reorderable(self,order):
self.tree.set_reorderable(order)
def new_model(self):
if self.model:
self.cid = self.model.get_sort_column_id()
del self.model
del self.selection
self.count = 0
self.model = gtk.TreeStore(*self.mylist)
self.selection = self.tree.get_selection()
self.selection.set_mode(self.mode)
self.sel_iter = None
def connect_model(self):
self.tree.set_model(self.model)
if self.sel_iter:
self.selection.select_iter(self.sel_iter)
if self.cid:
self.model.set_sort_column_id(self.cid[0],self.cid[1])
self.sort()
def sort(self):
val = self.model.get_sort_column_id()
col = val[0]
if col < 0:
return
if col > 0:
self.model.set_sort_column_id(col,val[1])
else:
self.model.set_sort_column_id(self.cids[0],val[1])
self.model.sort_column_changed()
def get_selected(self):
return self.selection.get_selected()
def get_row_at(self,x,y):
path = self.tree.get_path_at_pos(x,y)
if path == None:
return self.count -1
else:
return path[0][0]-1
def get_selected_row(self):
store, iter = self.selection.get_selected()
if iter:
rows = store.get_path(iter)
return rows[0]
else:
return -1
def get_selected_objects(self):
if self.count == 0:
return []
elif self.mode == gtk.SELECTION_SINGLE:
store,iter = self.selection.get_selected()
if iter:
return [self.model.get_value(iter,_IDCOL)]
else:
return []
else:
mlist = []
self.selection.selected_foreach(self.blist,mlist)
return mlist
def get_icon(self):
if self.mode == gtk.SELECTION_SINGLE:
store,iter = self.selection.get_selected()
path = self.model.get_path(iter)
else:
mlist = []
self.selection.selected_foreach(self.blist,mlist)
path = self.model.get_path(mlist[0])
return self.tree.create_row_drag_icon(path)
def blist(self,store,path,iter,id_list):
id_list.append(self.model.get_value(iter,_IDCOL))
def clear(self):
self.count = 0
self.tree_roots = {}
self.tree_open = {}
self.model.clear()
def remove(self,iter):
try:
iter_parent = self.model.iter_parent (iter)
self.model.remove(iter)
if iter_parent and not self.model.iter_has_child (iter_parent):
name = unicode(self.model.get_value(iter_parent,0))
self.model.remove (iter_parent)
if self.tree_roots.has_key(name):
del self.tree_roots[name]
if self.tree_open.has_key(name):
del self.tree_open[name]
if self.tree_list.has_key(name):
del self.tree_list[name]
self.count = self.count - 1
except:
pass
def get_row(self,iter):
row = self.model.get_path(iter)
return row[0]
def select_row(self,row):
self.selection.select_path((row))
def select_iter(self,iter):
self.selection.select_iter(iter)
def get_object(self,iter):
return self.model.get_value(iter,_IDCOL)
def insert(self,position,data,info=None,select=0):
self.count = self.count + 1
iter = self.model.insert(position)
col = 0
for object in data:
self.model.set_value(iter,col,object)
col = col + 1
self.model.set_value(iter,_IDCOL,info)
self.model.set_value(iter,_BCOL,_TOP_FONT)
if select:
self.selection.select_iter(iter)
return iter
def get_data(self,iter,cols):
return [ self.model.get_value(iter,c) for c in cols ]
def on_row_expanded(self, view, iter, path):
name = self.model.get_value(iter,0)
self.fill_row(name,iter)
def expand_row(self,name,iter=None):
path = self.model.get_path(self.tree_roots[name])
self.parent.parent.status_text(_('Updating display...'))
self.tree.expand_row(path,1)
self.parent.parent.modify_statusbar()
def fill_row(self,name,iter=None):
name = unicode(name)
if not iter:
iter = self.tree_roots[name]
child = self.model.iter_children(iter)
if self.model.get_value(child,0) is None:
self.model.remove(child)
for d in self.tree_list[name]:
new_iter = self.model.append(iter)
self.model.set(new_iter,0,d[0],1,d[1],2,d[2],3,d[3],4,d[4],
5,d[5],6,d[6],7,d[7])
self.parent.id2col[d[1]] = (self,new_iter)
self.expand_row (name, iter)
def add(self,data,select=0):
self.count = self.count + 1
name = data[-1]
if self.tree_roots.has_key(name):
top = self.tree_roots[name]
else:
top = self.model.append(None)
self.model.append(top)
self.tree_open[name] = 0
self.tree_list[name] = []
self.model.set_value(top,0,name)
self.model.set_value(top,5,name.upper())
self.model.set_value(top,_BCOL,_TOP_FONT)
self.tree_roots[name] = top
if self.tree_open[name] or select:
iter = self.model.append(top)
col = 0
for object in data[:-1]:
self.model.set_value(iter,col,object)
col = col + 1
self.model.set_value(iter,_BCOL,_TEXT_FONT)
if select:
self.sel_iter = iter
self.selection.select_iter(self.sel_iter)
return iter
else:
self.tree_list[name].append(data)
return None
def set(self,iter,data,select=0):
col = 0
for object in data:
self.model.set_value(iter,col,object)
col = col + 1
self.model.set_value(iter,_BCOL,_TEXT_FONT)
if select:
self.sel_iter = iter
return iter
def add_and_select(self,data):
self.count = self.count + 1
iter = self.model.append()
col = 0
for object in data:
self.model.set_value(iter,col,object)
col = col + 1
self.model.set_value(iter,_BCOL,_TEXT_FONT)
self.selection.select_iter(iter)
def center_selected(self):
model,iter = self.selection.get_selected()
if iter:
path = model.get_path(iter)
self.tree.scroll_to_cell(path,None,gtk.TRUE,0.5,0.5)

View File

@ -151,11 +151,7 @@ class PeopleView:
def remove_from_person_list(self,person,old_id=None): def remove_from_person_list(self,person,old_id=None):
"""Remove the selected person from the list. A person object is expected, """Remove the selected person from the list. A person object is expected,
not an ID""" not an ID"""
if old_id == None or person.get_id() == old_id: self.build_tree()
path = self.person_model.on_get_path(person.get_id())
self.person_model.row_deleted(path)
else:
self.person_model.rebuild_data()
def remove_from_history(self,person,old_id=None): def remove_from_history(self,person,old_id=None):
"""Removes a person from the history list""" """Removes a person from the history list"""
@ -187,8 +183,8 @@ class PeopleView:
self.apply_filter(self.person_tree) self.apply_filter(self.person_tree)
self.goto_active_person() self.goto_active_person()
def add_to_person_list(self,person,change): def add_to_person_list(self,person,change=0):
self.rebuild_data() self.build_tree()
def goto_active_person(self,first=0): def goto_active_person(self,first=0):
if not self.parent.active_person: if not self.parent.active_person:
@ -253,4 +249,7 @@ class PeopleView:
menu.popup(None,None,None,event.button,event.time) menu.popup(None,None,None,event.button,event.time)
def redisplay_person_list(self,person): def redisplay_person_list(self,person):
self.person_model.rebuild_data() self.person_model = PeopleModel.PeopleModel(self.parent.db)
self.sort_model = gtk.TreeModelSort(self.person_model)
self.person_tree.set_model(self.sort_model)

View File

@ -68,21 +68,18 @@ class PlaceView:
def __init__(self,parent,db,glade,update): def __init__(self,parent,db,glade,update):
self.parent = parent self.parent = parent
self.db = db
self.glade = glade self.glade = glade
self.db = db
self.list = glade.get_widget("place_list") self.list = glade.get_widget("place_list")
self.update = update self.list.connect('button-press-event',self.button_press)
self.list.connect('key-press-event',self.key_press)
self.selection = self.list.get_selection()
self.selection.set_mode(gtk.SELECTION_MULTIPLE)
self.renderer = gtk.CellRendererText() self.renderer = gtk.CellRendererText()
self.active = None
self.model = gtk.TreeModelSort(DisplayModels.PlaceModel(self.db)) self.model = gtk.TreeModelSort(DisplayModels.PlaceModel(self.db))
self.list.set_model(self.model) self.list.set_model(self.model)
self.selection = self.list.get_selection()
self.selection.set_mode(gtk.SELECTION_MULTIPLE)
self.list.connect('button-press-event',self.button_press)
self.list.connect('key-press-event',self.key_press)
self.topWindow = self.glade.get_widget("gramps") self.topWindow = self.glade.get_widget("gramps")
self.columns = [] self.columns = []
@ -127,35 +124,6 @@ class PlaceView:
self.list.set_model(self.model) self.list.set_model(self.model)
self.selection = self.list.get_selection() self.selection = self.list.get_selection()
def load_places(self,id=None):
"""Rebuilds the entire place view. This can be very time consuming
on large databases, and should only be called when absolutely
necessary"""
pass
#self.build_tree()
def goto(self,id):
self.selection.unselect_all()
iter = self.id2col[id]
self.selection.select_iter(iter)
itpath = self.model.get_path (iter)
col = self.list.get_column (0)
self.list.scroll_to_cell (itpath, col, gtk.TRUE, 0.5, 0)
def merge(self):
mlist = []
self.selection.selected_foreach(self.blist,mlist)
if len(mlist) != 2:
msg = _("Cannot merge places.")
msg2 = _("Exactly two places must be selected to perform a merge. "
"A second place can be selected by holding down the "
"control key while clicking on the desired place.")
ErrorDialog(msg,msg2)
else:
import MergeData
MergeData.MergePlaces(self.db,mlist[0],mlist[1],self.load_places)
def button_press(self,obj,event): def button_press(self,obj,event):
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
mlist = [] mlist = []
@ -201,26 +169,25 @@ class PlaceView:
menu.append(item) menu.append(item)
menu.popup(None,None,None,event.button,event.time) menu.popup(None,None,None,event.button,event.time)
def new_place_after_edit(self,place):
self.db.add_place(place)
self.update(0)
def update_display(self,place):
if place:
self.db.build_place_display(place.get_id())
self.update(0)
def on_add_place_clicked(self,obj): def on_add_place_clicked(self,obj):
EditPlace.EditPlace(self.parent,RelLib.Place(),self.new_place_after_edit) EditPlace.EditPlace(self.parent,RelLib.Place(),self.new_place_after_edit)
def new_place_after_edit(self,place):
self.db.add_place(place)
def update_display(self,place):
self.build_tree()
def on_delete_clicked(self,obj): def on_delete_clicked(self,obj):
mlist = [] mlist = []
self.selection.selected_foreach(self.blist,mlist) self.selection.selected_foreach(self.blist,mlist)
trans = self.db.start_transaction()
for place in mlist: for place in mlist:
used = 0 used = 0
for key in self.db.get_person_keys(): for key in self.db.get_person_keys():
p = self.db.get_person(key) p = self.db.find_person_from_id(key)
event_list = [] event_list = []
for e in [p.get_birth_id(),p.get_death_id()] + p.get_event_list(): for e in [p.get_birth_id(),p.get_death_id()] + p.get_event_list():
event = self.db.find_event_from_id(e) event = self.db.find_event_from_id(e)
@ -233,7 +200,8 @@ class PlaceView:
if p.get_lds_sealing(): if p.get_lds_sealing():
event_list.append(p.get_lds_sealing()) event_list.append(p.get_lds_sealing())
for event in event_list: for event in event_list:
if event.get_place_id() == place: if event.get_place_id() == place.get_id():
print event.get_id()
used = 1 used = 1
for fid in self.db.get_family_keys(): for fid in self.db.get_family_keys():
@ -246,7 +214,8 @@ class PlaceView:
if f.get_lds_sealing(): if f.get_lds_sealing():
event_list.append(f.get_lds_sealing()) event_list.append(f.get_lds_sealing())
for event in event_list: for event in event_list:
if event.get_place_id() == place: if event.get_place_id() == place.get_id():
print event.get_id()
used = 1 used = 1
if used == 1: if used == 1:
@ -259,8 +228,10 @@ class PlaceView:
_('_Delete Place'), _('_Delete Place'),
ans.query_response) ans.query_response)
else: else:
self.db.remove_place(place.get_id()) trans = self.db.start_transaction()
self.update(0) self.db.remove_place(place.get_id(),trans)
self.db.add_transaction(trans)
self.build_tree()
def on_edit_clicked(self,obj): def on_edit_clicked(self,obj):
"""Display the selected places in the EditPlace display""" """Display the selected places in the EditPlace display"""
@ -273,3 +244,18 @@ class PlaceView:
def blist(self,store,path,iter,list): def blist(self,store,path,iter,list):
id = self.db.get_place_id(store.get_value(iter,1)) id = self.db.get_place_id(store.get_value(iter,1))
list.append(id) list.append(id)
def merge(self):
mlist = []
self.selection.selected_foreach(self.blist,mlist)
if len(mlist) != 2:
msg = _("Cannot merge places.")
msg2 = _("Exactly two places must be selected to perform a merge. "
"A second place can be selected by holding down the "
"control key while clicking on the desired place.")
ErrorDialog(msg,msg2)
else:
import MergeData
MergeData.MergePlaces(self.db,mlist[0],mlist[1],self.build_tree)

File diff suppressed because it is too large Load Diff

View File

@ -300,7 +300,10 @@ class SelectChild:
select_child.add_parent_family_id(self.family.get_id(),mrel,frel) select_child.add_parent_family_id(self.family.get_id(),mrel,frel)
self.db.commit_person(select_child) trans = self.db.start_transaction()
self.db.commit_person(select_child,trans)
self.db.add_transaction(trans)
self.redraw(self.family) self.redraw(self.family)
self.close(obj) self.close(obj)
@ -430,6 +433,9 @@ class EditRel:
frel = "Unknown" frel = "Unknown"
self.child.change_parent_family_id(self.family.get_id(),mrel,frel) self.child.change_parent_family_id(self.family.get_id(),mrel,frel)
self.db.commit_person(self.child) trans = self.start_transaction()
self.db.commit_person(self.child,trans)
self.db.add_transaction(trans)
self.update() self.update()
self.top.destroy() self.top.destroy()

View File

@ -68,8 +68,8 @@ class SourceView:
self.db = db self.db = db
self.update = update self.update = update
self.list = glade.get_widget("source_list") self.list = glade.get_widget("source_list")
self.list.connect('button-press-event',self.button_press)
self.selection = self.list.get_selection() self.selection = self.list.get_selection()
colno = 0
self.renderer = gtk.CellRendererText() self.renderer = gtk.CellRendererText()
@ -80,12 +80,6 @@ class SourceView:
self.columns = [] self.columns = []
self.build_columns() self.build_columns()
def load_sources(self,id=None):
pass
def on_click(self,column):
self.click_col = column
def build_columns(self): def build_columns(self):
for column in self.columns: for column in self.columns:
self.list.remove_column(column) self.list.remove_column(column)
@ -112,25 +106,18 @@ class SourceView:
self.list.append_column(column) self.list.append_column(column)
index += 1 index += 1
def on_click(self,column):
self.click_col = column
def change_db(self,db): def change_db(self,db):
self.build_columns() self.build_columns()
self.build_tree() self.build_tree()
def goto(self,id):
iter = self.map[id]
self.list.get_selection().select_iter(iter)
itpath = self.model.get_path (iter)
col = self.list.get_column (0)
self.list.scroll_to_cell (itpath, col, gtk.TRUE, 0.5, 0)
def build_tree(self): def build_tree(self):
self.list.set_model(None) self.list.set_model(None)
self.model = gtk.TreeModelSort(DisplayModels.SourceModel(self.parent.db)) self.model = gtk.TreeModelSort(DisplayModels.SourceModel(self.parent.db))
self.list.set_model(self.model) self.list.set_model(self.model)
self.selection = self.list.get_selection() self.selection = self.list.get_selection()
self.list.connect('button-press-event',self.button_press)
def button_press(self,obj,event): def button_press(self,obj,event):
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
@ -182,7 +169,6 @@ class SourceView:
self.topWindow,self.new_after_edit) self.topWindow,self.new_after_edit)
def on_delete_clicked(self,obj): def on_delete_clicked(self,obj):
store,iter = self.selection.get_selected() store,iter = self.selection.get_selected()
if not iter: if not iter:
return return
@ -191,7 +177,7 @@ class SourceView:
source = self.db.get_source(id) source = self.db.get_source(id)
if self.is_used(source): if self.is_used(source):
ans = EditSource.DelSrcQuery(source,self.db,self.update) ans = EditSource.DelSrcQuery(source,self.db,self.build_tree)
QuestionDialog(_('Delete %s?') % source.get_title(), QuestionDialog(_('Delete %s?') % source.get_title(),
_('This source is currently being used. Deleting it ' _('This source is currently being used. Deleting it '
@ -200,8 +186,10 @@ class SourceView:
_('_Delete Source'), _('_Delete Source'),
ans.query_response,self.topWindow) ans.query_response,self.topWindow)
else: else:
self.db.remove_source_id(source.get_id()) trans = self.db.start_transaction()
self.update(0) self.db.remove_source_id(source.get_id(),trans)
self.db.add_transaction(trans)
self.build_tree()
def is_used(self,source): def is_used(self,source):
for key in self.db.get_place_id_keys(): for key in self.db.get_place_id_keys():
@ -258,8 +246,7 @@ class SourceView:
def new_after_edit(self,source): def new_after_edit(self,source):
self.db.add_source(source) self.db.add_source(source)
self.update(0) self.build_tree()
def update_display(self,place): def update_display(self,place):
self.db.build_source_display(place.get_id()) self.build_tree()
self.update(0)

View File

@ -51,7 +51,7 @@
<accelerator key="N" modifiers="GDK_CONTROL_MASK" signal="activate"/> <accelerator key="N" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1865"> <widget class="GtkImage" id="image1882">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-new</property> <property name="stock">gtk-new</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -73,7 +73,7 @@
<accelerator key="O" modifiers="GDK_CONTROL_MASK" signal="activate"/> <accelerator key="O" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1866"> <widget class="GtkImage" id="image1883">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-open</property> <property name="stock">gtk-open</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -107,7 +107,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1867"> <widget class="GtkImage" id="image1884">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-convert</property> <property name="stock">gtk-convert</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -135,7 +135,7 @@
<accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/> <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1868"> <widget class="GtkImage" id="image1885">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-quit</property> <property name="stock">gtk-quit</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -171,7 +171,7 @@
<accelerator key="Insert" modifiers="GDK_CONTROL_MASK" signal="activate"/> <accelerator key="Insert" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1869"> <widget class="GtkImage" id="image1886">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-add</property> <property name="stock">gtk-add</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -194,7 +194,7 @@
<accelerator key="Delete" modifiers="GDK_CONTROL_MASK" signal="activate"/> <accelerator key="Delete" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1870"> <widget class="GtkImage" id="image1887">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-remove</property> <property name="stock">gtk-remove</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -207,6 +207,14 @@
</widget> </widget>
</child> </child>
<child>
<widget class="GtkImageMenuItem" id="undo1">
<property name="visible">True</property>
<property name="stock_item">GNOMEUIINFO_MENU_UNDO_ITEM</property>
<signal name="activate" handler="on_undo_activate" last_modification_time="Fri, 26 Mar 2004 00:07:15 GMT"/>
</widget>
</child>
<child> <child>
<widget class="GtkMenuItem" id="edit_item"> <widget class="GtkMenuItem" id="edit_item">
<property name="visible">True</property> <property name="visible">True</property>
@ -232,7 +240,7 @@
<accelerator key="F" modifiers="GDK_CONTROL_MASK" signal="activate"/> <accelerator key="F" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1871"> <widget class="GtkImage" id="image1888">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-find</property> <property name="stock">gtk-find</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -254,7 +262,7 @@
<accelerator key="M" modifiers="GDK_CONTROL_MASK" signal="activate"/> <accelerator key="M" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1872"> <widget class="GtkImage" id="image1889">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-convert</property> <property name="stock">gtk-convert</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -281,7 +289,7 @@
<signal name="activate" handler="on_preferences1_activate"/> <signal name="activate" handler="on_preferences1_activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1873"> <widget class="GtkImage" id="image1890">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-preferences</property> <property name="stock">gtk-preferences</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -302,7 +310,7 @@
<signal name="activate" handler="on_column_order_activate" last_modification_time="Wed, 10 Mar 2004 04:36:07 GMT"/> <signal name="activate" handler="on_column_order_activate" last_modification_time="Wed, 10 Mar 2004 04:36:07 GMT"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1874"> <widget class="GtkImage" id="image1891">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-properties</property> <property name="stock">gtk-properties</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -323,7 +331,7 @@
<signal name="activate" handler="on_default_person_activate" last_modification_time="Sat, 16 Aug 2003 01:58:26 GMT"/> <signal name="activate" handler="on_default_person_activate" last_modification_time="Sat, 16 Aug 2003 01:58:26 GMT"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1875"> <widget class="GtkImage" id="image1892">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-home</property> <property name="stock">gtk-home</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -409,7 +417,7 @@
<accelerator key="D" modifiers="GDK_CONTROL_MASK" signal="activate"/> <accelerator key="D" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1876"> <widget class="GtkImage" id="image1893">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-index</property> <property name="stock">gtk-index</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -431,7 +439,7 @@
<accelerator key="B" modifiers="GDK_CONTROL_MASK" signal="activate"/> <accelerator key="B" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1877"> <widget class="GtkImage" id="image1894">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gnome-stock-book-open</property> <property name="stock">gnome-stock-book-open</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -504,7 +512,7 @@
<accelerator key="F1" modifiers="0" signal="activate"/> <accelerator key="F1" modifiers="0" signal="activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1878"> <widget class="GtkImage" id="image1895">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-help</property> <property name="stock">gtk-help</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -525,7 +533,7 @@
<signal name="activate" handler="on_faq_activate" last_modification_time="Wed, 26 Nov 2003 17:59:23 GMT"/> <signal name="activate" handler="on_faq_activate" last_modification_time="Wed, 26 Nov 2003 17:59:23 GMT"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1879"> <widget class="GtkImage" id="image1896">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gnome-stock-book-open</property> <property name="stock">gnome-stock-book-open</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -552,7 +560,7 @@
<signal name="activate" handler="on_gramps_home_page_activate"/> <signal name="activate" handler="on_gramps_home_page_activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1880"> <widget class="GtkImage" id="image1897">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-jump-to</property> <property name="stock">gtk-jump-to</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -573,7 +581,7 @@
<signal name="activate" handler="on_gramps_mailing_lists_activate"/> <signal name="activate" handler="on_gramps_mailing_lists_activate"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1881"> <widget class="GtkImage" id="image1898">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gnome-stock-mail</property> <property name="stock">gnome-stock-mail</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -627,7 +635,7 @@
<signal name="activate" handler="on_about_activate" last_modification_time="Tue, 01 Apr 2003 03:44:24 GMT"/> <signal name="activate" handler="on_about_activate" last_modification_time="Tue, 01 Apr 2003 03:44:24 GMT"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1882"> <widget class="GtkImage" id="image1899">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gnome-stock-about</property> <property name="stock">gnome-stock-about</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>

View File

@ -148,7 +148,6 @@ class Gramps:
self.db.set_researcher(GrampsCfg.get_researcher()) self.db.set_researcher(GrampsCfg.get_researcher())
def pref_callback(self,val): def pref_callback(self,val):
self.db.rebuild_person_table()
self.modify_statusbar() self.modify_statusbar()
self.family_view.init_interface() self.family_view.init_interface()
self.update_display(1) self.update_display(1)
@ -259,6 +258,7 @@ class Gramps:
self.child_windows = {} self.child_windows = {}
self.gtop.signal_autoconnect({ self.gtop.signal_autoconnect({
"on_undo_activate" : self.undo,
"on_column_order_activate": self.column_order, "on_column_order_activate": self.column_order,
"on_back_clicked" : self.back_clicked, "on_back_clicked" : self.back_clicked,
"on_back_pressed" : self.back_pressed, "on_back_pressed" : self.back_pressed,
@ -346,6 +346,16 @@ class Gramps:
self.topWindow.show() self.topWindow.show()
self.enable_toolbar(self.use_toolbar) self.enable_toolbar(self.use_toolbar)
def undo(self,*args):
self.db.undo()
p = self.db.try_to_find_person_from_id(self.active_person.get_id())
self.change_active_person(p)
self.place_view.change_db(self.db)
self.people_view.change_db(self.db)
self.source_view.change_db(self.db)
self.media_view.change_db(self.db)
self.family_view.load_family()
def set_column_order(self,list): def set_column_order(self,list):
self.db.set_column_order(list) self.db.set_column_order(list)
self.people_view.build_columns() self.people_view.build_columns()
@ -894,8 +904,6 @@ class Gramps:
self.family_view.clear() self.family_view.clear()
self.family_view.load_family() self.family_view.load_family()
self.pedigree_view.clear() self.pedigree_view.clear()
self.source_view.load_sources()
self.place_view.load_places()
self.media_view.load_media() self.media_view.load_media()
def tool_callback(self,val): def tool_callback(self,val):
@ -931,17 +939,12 @@ class Gramps:
self.family_view.load_family() self.family_view.load_family()
elif page == PEDIGREE_VIEW: elif page == PEDIGREE_VIEW:
self.pedigree_view.load_canvas(self.active_person) self.pedigree_view.load_canvas(self.active_person)
elif page == SOURCE_VIEW:
self.source_view.load_sources()
elif page == PLACE_VIEW: elif page == PLACE_VIEW:
if len(self.db.get_place_id_keys()) > 2000: if len(self.db.get_place_id_keys()) > 2000:
self.status_text(_('Updating display - this may take a few seconds...')) self.status_text(_('Updating display - this may take a few seconds...'))
else: else:
self.status_text(_('Updating display...')) self.status_text(_('Updating display...'))
self.place_view.load_places()
self.modify_statusbar() self.modify_statusbar()
else:
self.media_view.load_media()
def on_tools_clicked(self,obj): def on_tools_clicked(self,obj):
if self.active_person: if self.active_person:
@ -953,23 +956,13 @@ class Gramps:
Plugins.ReportPlugins(self,self.db,self.active_person) Plugins.ReportPlugins(self,self.db,self.active_person)
def on_ok_button1_clicked(self,obj): def on_ok_button1_clicked(self,obj):
filename = self.filesel.get_filename()
dbname = obj.get_data("dbname")
getoldrev = obj.get_data("getoldrev")
filename = dbname.get_full_path(0)
if filename == "" or filename == None: if filename == "" or filename == None:
return return
filename = os.path.normpath(os.path.abspath(filename)) filename = os.path.normpath(os.path.abspath(filename))
self.filesel.destroy()
self.clear_database() self.clear_database()
self.auto_save_load(filename)
if getoldrev.get_active():
vc = VersionControl.RcsVersionControl(filename)
VersionControl.RevisionSelect(self.db,filename,vc,
self.load_revision)
else:
self.auto_save_load(filename)
def on_help_dbopen_clicked(self,obj): def on_help_dbopen_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual""" """Display the relevant portion of GRAMPS manual"""
@ -1053,7 +1046,10 @@ class Gramps:
if o.get_reference_id() == ObjectId: if o.get_reference_id() == ObjectId:
nl.remove(o) nl.remove(o)
p.set_media_list(nl) p.set_media_list(nl)
self.db.remove_object(ObjectId)
trans = self.db.start_transaction()
self.db.remove_object(ObjectId)
self.db.add_transaction(trans)
def leave_clicked(): def leave_clicked():
# File is lost => do nothing, leave as is # File is lost => do nothing, leave as is
@ -1210,6 +1206,8 @@ class Gramps:
def delete_person_response(self): def delete_person_response(self):
trans = self.db.start_transaction()
if self.db.get_default_person() == self.active_person: if self.db.get_default_person() == self.active_person:
self.db.set_default_person(None) self.db.set_default_person(None)
@ -1222,7 +1220,8 @@ class Gramps:
for child_id in family.get_child_id_list(): for child_id in family.get_child_id_list():
child = self.db.find_person_from_id(child_id) child = self.db.find_person_from_id(child_id)
child.remove_parent_family_id(family.get_id()) child.remove_parent_family_id(family.get_id())
self.db.delete_family(family.get_id()) self.db.commit_person(child,trans)
self.db.delete_family(family.get_id(),trans)
else: else:
family.set_father_id(None) family.set_father_id(None)
else: else:
@ -1230,23 +1229,27 @@ class Gramps:
for child_id in family.get_child_id_list(): for child_id in family.get_child_id_list():
child = self.db.find_person_from_id(child_id) child = self.db.find_person_from_id(child_id)
child.remove_parent_family_id(family) child.remove_parent_family_id(family)
self.db.delete_family(family) self.db.commit_person(child,trans)
self.db.delete_family(family,trans)
else: else:
family.set_mother_id(None) family.set_mother_id(None)
self.db.commit_family(family,trans)
for (family_id,mrel,frel) in self.active_person.get_parent_family_id_list(): for (family_id,mrel,frel) in self.active_person.get_parent_family_id_list():
if family_id: if family_id:
family = self.db.find_family_from_id(family_id) family = self.db.find_family_from_id(family_id)
family.remove_child_id(self.active_person.get_id()) family.remove_child_id(self.active_person.get_id())
self.db.commit_family(family,trans)
self.people_view.remove_from_history(self.active_person) self.people_view.remove_from_history(self.active_person)
self.db.remove_person_id(self.active_person.get_id()) self.db.remove_person_id(self.active_person.get_id(),trans)
self.people_view.remove_from_person_list(self.active_person) self.people_view.remove_from_person_list(self.active_person)
if self.hindex >= 0: if self.hindex >= 0:
self.active_person = self.db.get_person(self.history[self.hindex]) self.active_person = self.db.get_person(self.history[self.hindex])
else: else:
self.change_active_person(None) self.change_active_person(None)
self.db.add_transaction(trans)
self.redraw_histmenu() self.redraw_histmenu()
def merge_update(self,p1,p2,old_id): def merge_update(self,p1,p2,old_id):
@ -1261,15 +1264,16 @@ class Gramps:
def goto_active_person(self,first=0): def goto_active_person(self,first=0):
self.people_view.goto_active_person(first) self.people_view.goto_active_person(first)
def change_active_person(self,person): def change_active_person(self,person,force=0):
self.active_person = person
if person == None: if person == None:
self.set_buttons(0) self.set_buttons(0)
self.active_person = None self.active_person = None
self.modify_statusbar() self.modify_statusbar()
elif self.active_person == None or \ elif self.active_person == None or \
person.get_id() != self.active_person.get_id(): person.get_id() != self.active_person.get_id():
self.active_person = person
self.modify_statusbar() self.modify_statusbar()
self.set_buttons(1)
if person: if person:
if self.hindex+1 < len(self.history): if self.hindex+1 < len(self.history):
self.history = self.history[0:self.hindex+1] self.history = self.history[0:self.hindex+1]
@ -1292,6 +1296,7 @@ class Gramps:
else: else:
self.backbtn.set_sensitive(0) self.backbtn.set_sensitive(0)
self.back.set_sensitive(0) self.back.set_sensitive(0)
else:
self.set_buttons(1) self.set_buttons(1)
def modify_statusbar(self): def modify_statusbar(self):
@ -1327,31 +1332,19 @@ class Gramps:
DisplayTrace.DisplayTrace() DisplayTrace.DisplayTrace()
return "" return ""
def fs_close_window(self,obj):
self.filesel.destroy()
def on_open_activate(self,obj): def on_open_activate(self,obj):
wFs = gtk.glade.XML(const.revisionFile, "dbopen","gramps")
top = gtk.glade.XML (const.gladeFile, "fileselection","gramps")
self.dbopen_fs = wFs.get_widget("dbopen") top.signal_autoconnect({
"on_ok_button1_clicked": self.on_ok_button1_clicked,
Utils.set_titles(self.dbopen_fs, wFs.get_widget('title'), "destroy_passed_object": self.fs_close_window,
_('Open a database')) })
self.filesel = top.get_widget('fileselection')
dbname = wFs.get_widget("dbname") if GrampsCfg.lastfile:
getoldrev = wFs.get_widget("getoldrev") self.filesel.set_filename(GrampsCfg.lastfile)
self.dbopen_fs.set_data("dbname",dbname)
dbname.set_default_path(GrampsCfg.db_dir)
dbname.set_filename(GrampsCfg.db_dir)
dbname.gtk_entry().set_position(len(GrampsCfg.db_dir))
self.dbopen_fs.set_data("getoldrev",getoldrev)
getoldrev.set_sensitive(GrampsCfg.usevc)
self.dbopen_fs.set_transient_for(self.topWindow)
self.dbopen_fs.show()
self.dbopen_button = self.dbopen_fs.run()
if self.dbopen_button == gtk.RESPONSE_OK:
self.on_ok_button1_clicked(self.dbopen_fs)
elif self.dbopen_button == gtk.RESPONSE_HELP:
self.on_help_dbopen_clicked(obj)
self.dbopen_fs.destroy()
def on_revert_activate(self,obj): def on_revert_activate(self,obj):
pass pass
@ -1429,15 +1422,12 @@ class Gramps:
elif page == SOURCE_VIEW: elif page == SOURCE_VIEW:
self.enable_buttons(1) self.enable_buttons(1)
self.merge_button.set_sensitive(0) self.merge_button.set_sensitive(0)
self.source_view.load_sources()
elif page == PLACE_VIEW: elif page == PLACE_VIEW:
self.enable_buttons(1) self.enable_buttons(1)
self.place_view.load_places()
self.merge_button.set_sensitive(1) self.merge_button.set_sensitive(1)
elif page == MEDIA_VIEW: elif page == MEDIA_VIEW:
self.enable_buttons(1) self.enable_buttons(1)
self.merge_button.set_sensitive(0) self.merge_button.set_sensitive(0)
self.media_view.load_media()
def on_apply_filter_clicked(self,obj): def on_apply_filter_clicked(self,obj):
self.people_view.apply_filter_clicked() self.people_view.apply_filter_clicked()
@ -1455,15 +1445,14 @@ class Gramps:
filter.hide() filter.hide()
filter.set_sensitive(qual) filter.set_sensitive(qual)
def new_after_edit(self,epo): def new_after_edit(self,epo,trans):
if epo: if epo:
if epo.person.get_id() == "": if epo.person.get_id() == "":
self.db.add_person(epo.person) self.db.add_person(epo.person,trans)
else: else:
self.db.add_person_no_map(epo.person,epo.person.get_id()) self.db.add_person_no_map(epo.person,epo.person.get_id(),trans)
self.db.build_person_display(epo.person.get_id())
self.change_active_person(epo.person) self.change_active_person(epo.person)
self.people_view.redisplay_person_list(epo.person) self.people_view.add_to_person_list(epo.person)
if self.views.get_current_page() in [FAMILY_VIEW1,FAMILY_VIEW2]: if self.views.get_current_page() in [FAMILY_VIEW1,FAMILY_VIEW2]:
self.family_view.load_family() self.family_view.load_family()