* various: Add undo functionality
svn: r3065
This commit is contained in:
parent
feef42099d
commit
8592fa2cc9
@ -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>
|
||||
* src/plugins/rel_it.py: Convert to class.
|
||||
|
||||
|
@ -129,7 +129,9 @@ class AddMediaObject:
|
||||
if self.update:
|
||||
self.update()
|
||||
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):
|
||||
"""
|
||||
|
@ -217,7 +217,6 @@ class AddSpouse:
|
||||
self.db.add_person(person)
|
||||
else:
|
||||
self.db.add_person_no_map(person,person.get_id())
|
||||
self.db.build_person_display(person.get_id())
|
||||
self.addperson(person)
|
||||
self.update_data(person.get_id())
|
||||
#self.slist.center_selected()
|
||||
@ -241,12 +240,14 @@ class AddSpouse:
|
||||
Utils.destroy_passed_object(obj)
|
||||
return
|
||||
|
||||
trans = self.db.start_transaction()
|
||||
|
||||
if not self.active_family:
|
||||
self.active_family = self.db.new_family()
|
||||
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())
|
||||
self.db.commit_person(spouse)
|
||||
self.db.commit_person(spouse,trans)
|
||||
|
||||
if self.person.get_gender() == RelLib.Person.male:
|
||||
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_mother_id(self.person.get_id())
|
||||
|
||||
self.active_family.set_relationship(const.save_frel(unicode(self.relation_type.get_text())))
|
||||
self.db.commit_family(self.active_family)
|
||||
rtype = const.save_frel(unicode(self.relation_type.get_text()))
|
||||
self.active_family.set_relationship(rtype)
|
||||
self.db.commit_family(self.active_family,trans)
|
||||
self.db.add_transaction(trans)
|
||||
Utils.destroy_passed_object(obj)
|
||||
self.update(self.active_family)
|
||||
|
||||
|
@ -293,7 +293,8 @@ class ChooseParents:
|
||||
|
||||
def redrawf(self):
|
||||
"""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)
|
||||
if self.type == "Partners":
|
||||
self.flabel.set_label("<b>%s</b>" % _("Par_ent"))
|
||||
@ -302,7 +303,8 @@ class ChooseParents:
|
||||
|
||||
def redrawm(self):
|
||||
"""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)
|
||||
if self.type == "Partners":
|
||||
self.mlabel.set_label("<b>%s</b>" % _("Pa_rent"))
|
||||
@ -351,16 +353,18 @@ class ChooseParents:
|
||||
family.set_mother_id(mother_id)
|
||||
family.add_child_id(self.person.get_id())
|
||||
|
||||
trans = self.db.start_transaction()
|
||||
if father_id:
|
||||
father = self.db.find_person_from_id(father_id)
|
||||
father.add_family_id(family.get_id())
|
||||
self.db.commit_person(father)
|
||||
self.db.commit_person(father,trans)
|
||||
if mother_id:
|
||||
mother = self.db.find_person_from_id(mother_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
|
||||
|
||||
def mother_list_select_row(self,obj):
|
||||
@ -414,8 +418,13 @@ class ChooseParents:
|
||||
if len(family_id_list) >= 1:
|
||||
family = self.db.find_family_from_id(family_id_list[0])
|
||||
mother_id = family.get_mother_id()
|
||||
self.mother_selection.select(mother_id)
|
||||
#self.mother_model.center_selected()
|
||||
mother = self.db.find_person_from_id(mother_id)
|
||||
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):
|
||||
"""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()
|
||||
if len(family_id_list) >= 1:
|
||||
family = self.db.find_family_from_id(family_id_list[0])
|
||||
father_id = family.get_father_id()
|
||||
self.father_selection.select(father_id)
|
||||
#self.father_model.center_selected()
|
||||
father_id = family.get_mother_id()
|
||||
father = self.db.find_person_from_id(father_id)
|
||||
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):
|
||||
"""
|
||||
@ -491,7 +505,6 @@ class ChooseParents:
|
||||
id = self.db.add_person(person)
|
||||
else:
|
||||
self.db.add_person_no_map(person,id)
|
||||
self.db.build_person_display(id)
|
||||
|
||||
self.type = const.save_frel(unicode(self.prel.get_text()))
|
||||
dinfo = self.db.get_person_display(id)
|
||||
@ -538,12 +551,15 @@ class ChooseParents:
|
||||
break
|
||||
else:
|
||||
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:
|
||||
self.db.commit_person(self.father)
|
||||
self.db.commit_person(self.father,trans)
|
||||
if self.mother:
|
||||
self.db.commit_person(self.mother)
|
||||
self.db.commit_person(self.mother,trans)
|
||||
self.db.add_transaction(trans)
|
||||
|
||||
class ModifyParents:
|
||||
def __init__(self,db,person,family_id,family_update,full_update,parent_window=None):
|
||||
|
@ -92,7 +92,8 @@ class DbPrompter:
|
||||
"on_ok_button1_clicked": self.save_ok_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):
|
||||
filename = obj.get_filename().encode('iso8859-1')
|
||||
@ -101,6 +102,18 @@ class DbPrompter:
|
||||
self.db.read_file(filename)
|
||||
|
||||
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.signal_autoconnect({
|
||||
"on_ok_button1_clicked": self.ok_button_clicked,
|
||||
@ -130,7 +143,7 @@ class DbPrompter:
|
||||
self.show()
|
||||
|
||||
def ok_button_clicked(self,obj):
|
||||
filename = self.dbname.get_full_path(0)
|
||||
filename = self.filesel.get_filename()
|
||||
|
||||
if not filename:
|
||||
return
|
||||
|
@ -1409,6 +1409,9 @@ class EditPerson:
|
||||
self.person.set_death_id(self.death.get_id())
|
||||
|
||||
def on_apply_person_clicked(self,obj):
|
||||
|
||||
trans = self.db.start_transaction()
|
||||
|
||||
surname = unicode(self.surname_field.get_text())
|
||||
suffix = unicode(self.suffix.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))
|
||||
|
||||
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 m.has_key(self.person.get_id()):
|
||||
del m[self.person.get_id()]
|
||||
@ -1476,20 +1479,20 @@ class EditPerson:
|
||||
self.pdmap[p[0]] = key
|
||||
|
||||
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())
|
||||
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
|
||||
# change in ordering due to the new birth date
|
||||
family = self.person.get_main_parents_family_id()
|
||||
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())
|
||||
f.set_child_id_list(new_order)
|
||||
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())
|
||||
f.set_child_id_list(new_order)
|
||||
|
||||
@ -1497,10 +1500,10 @@ class EditPerson:
|
||||
self.death.set_place_id(self.get_place(self.dplace,1))
|
||||
|
||||
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())
|
||||
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()
|
||||
female = self.is_female.get_active()
|
||||
@ -1580,10 +1583,10 @@ class EditPerson:
|
||||
self.update_lists()
|
||||
if self.callback:
|
||||
change = (self.orig_surname != surname) or (self.orig_id != idval)
|
||||
self.callback(self,change)
|
||||
|
||||
self.db.commit_person(self.person)
|
||||
self.callback(self,trans)
|
||||
|
||||
self.db.commit_person(self.person, trans)
|
||||
self.db.add_transaction(trans)
|
||||
self.close(1)
|
||||
|
||||
def get_place(self,field,makenew=0):
|
||||
|
@ -369,7 +369,10 @@ class EditPlace:
|
||||
self.gallery_ok = 1
|
||||
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:
|
||||
self.callback(self.place)
|
||||
|
||||
@ -553,16 +556,25 @@ class DeletePlaceQuery:
|
||||
self.update = update
|
||||
|
||||
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():
|
||||
p = self.db.get_person(key)
|
||||
for event in [p.get_birth(), p.get_death()] + p.get_event_list():
|
||||
if event.get_place_id() == self.place:
|
||||
event.set_place_id(None)
|
||||
for f in self.db.get_family_id_map().values():
|
||||
for event in f.get_event_list():
|
||||
if event.get_place_id() == self.place:
|
||||
for event_id in [p.get_birth_id(), p.get_death_id()] + p.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)
|
||||
|
||||
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)
|
||||
|
@ -326,7 +326,10 @@ class EditSource:
|
||||
|
||||
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:
|
||||
self.callback(self.source)
|
||||
self.close(obj)
|
||||
@ -362,42 +365,53 @@ class DelSrcQuery:
|
||||
m = 1
|
||||
if m:
|
||||
object.set_source_reference_list(l)
|
||||
return m
|
||||
|
||||
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():
|
||||
commit = 0
|
||||
p = self.db.get_person(key)
|
||||
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)
|
||||
if v:
|
||||
self.delete_source(v)
|
||||
commit += self.delete_source(v)
|
||||
|
||||
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()]:
|
||||
self.delete_source(v)
|
||||
commit += self.delete_source(v)
|
||||
|
||||
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():
|
||||
commit = 0
|
||||
p = self.db.find_family_from_id(p_id)
|
||||
for v_id in p.get_event_list():
|
||||
v = self.db.find_event_from_id(v_id)
|
||||
if v:
|
||||
self.delete_source(v)
|
||||
commit += self.delete_source(v)
|
||||
|
||||
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():
|
||||
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():
|
||||
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()
|
||||
|
@ -356,7 +356,9 @@ class EventEditor:
|
||||
if self.event.get_privacy() != priv:
|
||||
self.event.set_privacy(priv)
|
||||
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):
|
||||
buf = self.note_field.get_buffer()
|
||||
|
@ -87,16 +87,26 @@ class FamilyView:
|
||||
self.sp_par_arrow = "Down"
|
||||
self.child_arrow = "Up"
|
||||
if not already_init:
|
||||
self.top.get_widget('add_parents2').connect('clicked',self.add_parents_clicked)
|
||||
self.top.get_widget('del_parents2').connect('clicked',self.del_parents_clicked)
|
||||
self.top.get_widget('add_spparents2').connect('clicked',self.add_sp_parents)
|
||||
self.top.get_widget('del_spparents2').connect('clicked',self.del_sp_parents)
|
||||
self.top.get_widget('fam_back2').connect('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.top.get_widget('add_parents2').connect('clicked',
|
||||
self.add_parents_clicked)
|
||||
self.top.get_widget('del_parents2').connect('clicked',
|
||||
self.del_parents_clicked)
|
||||
self.top.get_widget('add_spparents2').connect('clicked',
|
||||
self.add_sp_parents)
|
||||
self.top.get_widget('del_spparents2').connect('clicked',
|
||||
self.del_sp_parents)
|
||||
self.top.get_widget('fam_back2').connect('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()
|
||||
if self.parent.views.get_current_page() == 1:
|
||||
self.parent.views.set_current_page(2)
|
||||
@ -117,16 +127,26 @@ class FamilyView:
|
||||
self.sp_par_arrow = "Right"
|
||||
self.child_arrow = "Left"
|
||||
if not already_init:
|
||||
self.top.get_widget('add_parents').connect('clicked',self.add_parents_clicked)
|
||||
self.top.get_widget('del_parents').connect('clicked',self.del_parents_clicked)
|
||||
self.top.get_widget('add_spparents').connect('clicked',self.add_sp_parents)
|
||||
self.top.get_widget('del_spparents').connect('clicked',self.del_sp_parents)
|
||||
self.top.get_widget('fam_back').connect('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.top.get_widget('add_parents').connect('clicked',
|
||||
self.add_parents_clicked)
|
||||
self.top.get_widget('del_parents').connect('clicked',
|
||||
self.del_parents_clicked)
|
||||
self.top.get_widget('add_spparents').connect('clicked',
|
||||
self.add_sp_parents)
|
||||
self.top.get_widget('del_spparents').connect('clicked',
|
||||
self.del_sp_parents)
|
||||
self.top.get_widget('fam_back').connect('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()
|
||||
if self.parent.views.get_current_page() == 2:
|
||||
self.parent.views.set_current_page(1)
|
||||
@ -234,7 +254,7 @@ class FamilyView:
|
||||
and event.state == gtk.gdk.CONTROL_MASK:
|
||||
self.spouse_swap(obj)
|
||||
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:
|
||||
self.select_spouse(obj)
|
||||
elif event.keyval == gtk.gdk.keyval_from_name("Insert") \
|
||||
@ -530,7 +550,9 @@ class FamilyView:
|
||||
def set_preferred_spouse(self,obj):
|
||||
if self.selected_spouse:
|
||||
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()
|
||||
|
||||
def edit_spouse_callback(self,obj):
|
||||
@ -597,28 +619,30 @@ class FamilyView:
|
||||
def spouse_after_edit(self,epo):
|
||||
ap = self.parent.active_person
|
||||
if epo:
|
||||
self.parent.db.build_person_display(epo.person.get_id(),epo.original_id)
|
||||
self.parent.db.commit_person(epo.person)
|
||||
trans = self.parent.db.start_transaction()
|
||||
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.redisplay_person_list(epo.person)
|
||||
|
||||
self.parent.active_person = ap
|
||||
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() == "":
|
||||
self.parent.db.add_person(epo.person)
|
||||
self.parent.db.add_person(epo.person,trans)
|
||||
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.family = self.parent.db.new_family()
|
||||
self.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(self.person)
|
||||
self.parent.db.commit_person(epo.person,trans)
|
||||
self.parent.db.commit_person(self.person,trans)
|
||||
|
||||
if self.person.get_gender() == RelLib.Person.male:
|
||||
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_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)
|
||||
|
||||
Marriage.Marriage(self.parent,self.family,self.parent.db,
|
||||
@ -671,14 +695,13 @@ class FamilyView:
|
||||
self.parent.update_person_list(person)
|
||||
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() == "":
|
||||
self.parent.db.add_person(epo.person)
|
||||
self.parent.db.add_person(epo.person,trans)
|
||||
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)
|
||||
|
||||
if not self.family:
|
||||
@ -691,8 +714,8 @@ class FamilyView:
|
||||
|
||||
self.family.add_child_id(epo.person.get_id())
|
||||
epo.person.add_parent_family_id(self.family.get_id(),"Birth","Birth")
|
||||
self.parent.db.commit_person(epo.person)
|
||||
self.parent.db.commit_family(self.family)
|
||||
self.parent.db.commit_person(epo.person,trans)
|
||||
self.parent.db.commit_family(self.family,trans)
|
||||
self.display_marriage(self.family)
|
||||
|
||||
def select_child_clicked(self,obj):
|
||||
@ -716,6 +739,8 @@ class FamilyView:
|
||||
id = self.child_model.get_value(iter,2)
|
||||
child = self.parent.db.get_person(id)
|
||||
|
||||
trans = self.parent.db.start_transaction()
|
||||
|
||||
self.family.remove_child_id(child.get_id())
|
||||
child.remove_parent_family_id(self.family.get_id())
|
||||
|
||||
@ -725,8 +750,10 @@ class FamilyView:
|
||||
elif self.family.get_mother_id() == None:
|
||||
self.delete_family_from(self.family.get_father_id())
|
||||
|
||||
self.parent.db.commit_person(child)
|
||||
self.parent.db.commit_family(self.family)
|
||||
self.parent.db.commit_person(child,trans)
|
||||
self.parent.db.commit_family(self.family,trans)
|
||||
self.parent.db.add_transaction(trans)
|
||||
|
||||
self.load_family()
|
||||
|
||||
def remove_spouse(self,obj):
|
||||
@ -752,16 +779,18 @@ class FamilyView:
|
||||
else:
|
||||
self.family.set_mother_id(None)
|
||||
|
||||
trans = self.parent.db.start_transaction()
|
||||
|
||||
if self.selected_spouse:
|
||||
self.selected_spouse.remove_family_id(self.family.get_id())
|
||||
self.parent.db.commit_person(self.selected_spouse)
|
||||
self.selected_spouse.remove_family_id(self.family.get_id(),trans)
|
||||
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:
|
||||
self.person.remove_family_id(self.family.get_id())
|
||||
self.parent.db.commit_person(self.person)
|
||||
self.parent.db.delete_family(self.family.get_id())
|
||||
self.person.remove_family_id(self.family.get_id(),trans)
|
||||
self.parent.db.commit_person(self.person,trans)
|
||||
self.parent.db.delete_family(self.family.get_id(),trans)
|
||||
if len(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))
|
||||
@ -769,6 +798,7 @@ class FamilyView:
|
||||
self.load_family(self.family)
|
||||
else:
|
||||
self.load_family(self.family)
|
||||
self.parent.db.add_transaction(trans)
|
||||
|
||||
if len(self.person.get_family_id_list()) <= 1:
|
||||
self.spouse_selection.set_mode(gtk.SELECTION_NONE)
|
||||
@ -806,7 +836,9 @@ class FamilyView:
|
||||
person = self.parent.db.find_person_from_id(person_id)
|
||||
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)
|
||||
|
||||
def clear(self):
|
||||
@ -938,13 +970,15 @@ class FamilyView:
|
||||
return _("%s: unknown") % (l)
|
||||
|
||||
def delete_family_from(self,person):
|
||||
person.remove_family_id(self.family.get_id())
|
||||
self.parent.db.delete_family(self.family.get_id())
|
||||
trans = self.parent.db.start_transaction()
|
||||
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()
|
||||
if len(flist) > 0:
|
||||
self.family = flist[0]
|
||||
else:
|
||||
self.family = None
|
||||
self.parent.db.add_transaction(trans)
|
||||
|
||||
def display_marriage(self,family):
|
||||
self.child_model.clear()
|
||||
@ -1228,7 +1262,10 @@ class FamilyView:
|
||||
fam = person.get_parent_family_id_list()[row[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()
|
||||
|
||||
def drag_data_received(self,widget,context,x,y,sel_data,info,time):
|
||||
|
@ -235,7 +235,7 @@ def loadConfig(call):
|
||||
global familyview
|
||||
|
||||
_callback = call
|
||||
lastfile = get_string("/apps/gramps/last-file")
|
||||
lastfile = get_string("/apps/gramps/recent-file")
|
||||
uselds = get_bool("/apps/gramps/use-lds")
|
||||
ac = get_bool("/apps/gramps/disable-auto-complete",0)
|
||||
mediaref = get_bool("/apps/gramps/make-reference",1)
|
||||
@ -372,7 +372,7 @@ def sync():
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
def save_last_file(file):
|
||||
set_string("/apps/gramps/last-file",file)
|
||||
set_string("/apps/gramps/recent-file",file)
|
||||
sync()
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
@ -705,7 +705,6 @@ class GrampsParser:
|
||||
self.family = None
|
||||
|
||||
def stop_person(self,tag):
|
||||
self.db.build_person_display(self.person.get_id())
|
||||
self.db.commit_person(self.person)
|
||||
self.person = None
|
||||
|
||||
|
@ -525,7 +525,7 @@ class Gallery(ImageSelect):
|
||||
if GrampsCfg.globalprop:
|
||||
GlobalMediaProperties(self.db,photo,None)
|
||||
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)
|
||||
index = 0
|
||||
for p in self.dataobj.get_media_list():
|
||||
@ -822,7 +822,10 @@ class LocalMediaProperties:
|
||||
if self.lists_changed:
|
||||
self.photo.set_attribute_list(self.alist)
|
||||
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):
|
||||
"""Display the relevant portion of GRAMPS manual"""
|
||||
@ -1061,7 +1064,9 @@ class GlobalMediaProperties:
|
||||
self.object.set_attribute_list(self.alist)
|
||||
if self.update != None:
|
||||
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):
|
||||
"""Display the relevant portion of GRAMPS manual"""
|
||||
@ -1115,8 +1120,8 @@ class DeleteMediaQuery:
|
||||
self.update = update
|
||||
|
||||
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():
|
||||
p = self.db.get_person(key)
|
||||
nl = []
|
||||
@ -1128,8 +1133,10 @@ class DeleteMediaQuery:
|
||||
change = 1
|
||||
if change:
|
||||
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 = []
|
||||
change = 0
|
||||
for photo in p.get_media_list():
|
||||
@ -1139,9 +1146,10 @@ class DeleteMediaQuery:
|
||||
change = 1
|
||||
if change:
|
||||
p.set_media_list(nl)
|
||||
self.db.commit_family(p,trans)
|
||||
|
||||
for key in self.db.get_source_keys():
|
||||
p = self.db.get_source(key)
|
||||
sid = self.db.find_source_from_id(key,trans)
|
||||
nl = []
|
||||
change = 0
|
||||
for photo in p.get_media_list():
|
||||
@ -1151,9 +1159,10 @@ class DeleteMediaQuery:
|
||||
change = 1
|
||||
if change:
|
||||
p.set_media_list(nl)
|
||||
self.db.commit_source(p,trans)
|
||||
|
||||
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 = []
|
||||
change = 0
|
||||
for photo in p.get_media_list():
|
||||
@ -1163,6 +1172,9 @@ class DeleteMediaQuery:
|
||||
change = 1
|
||||
if change:
|
||||
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:
|
||||
self.update(0)
|
||||
self.update()
|
||||
|
@ -635,7 +635,9 @@ class Marriage:
|
||||
|
||||
self.update_lists()
|
||||
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)
|
||||
|
||||
|
@ -150,14 +150,6 @@ class MediaView:
|
||||
self.build_columns()
|
||||
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):
|
||||
self.list.set_model(None)
|
||||
self.model = gtk.TreeModelSort(DisplayModels.MediaModel(self.parent.db))
|
||||
@ -295,7 +287,7 @@ class MediaView:
|
||||
id = store.get_value(iter,1)
|
||||
mobj = self.db.find_object_from_id(id)
|
||||
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?'),
|
||||
_('This media object is currently being used. '
|
||||
'If you delete this object, it will be removed '
|
||||
@ -304,8 +296,10 @@ class MediaView:
|
||||
_('_Delete Media Object'),
|
||||
ans.query_response)
|
||||
else:
|
||||
self.db.remove_object(mobj.get_id())
|
||||
self.update(0)
|
||||
trans = self.db.start_transaction()
|
||||
self.db.remove_object(mobj.get_id(),trans)
|
||||
self.db.add_transaction(trans)
|
||||
self.build_tree()
|
||||
|
||||
def is_object_used(self,mobj):
|
||||
for family_id in self.db.get_family_keys():
|
||||
@ -366,7 +360,8 @@ class MediaView:
|
||||
photo.set_thumbnail(RelImage.build_thumbnail(name))
|
||||
description = os.path.basename(name)
|
||||
photo.set_description(description)
|
||||
self.db.add_object(photo)
|
||||
trans = self.db.start_transaction()
|
||||
self.db.add_object(photo,trans)
|
||||
self.load_media()
|
||||
if GrampsCfg.mediaref == 0:
|
||||
name = RelImage.import_media_object(name,
|
||||
@ -375,7 +370,10 @@ class MediaView:
|
||||
if name:
|
||||
photo.set_path(name)
|
||||
photo.setLocal(1)
|
||||
self.db.commit_media_object(photo)
|
||||
|
||||
self.db.commit_media_object(photo,trans)
|
||||
self.db.add_transaction(trans)
|
||||
|
||||
if GrampsCfg.globalprop:
|
||||
ImageSelect.GlobalMediaProperties(self.db,photo,self.load_media)
|
||||
elif protocol != "":
|
||||
@ -394,7 +392,8 @@ class MediaView:
|
||||
photo.set_description(d)
|
||||
photo.setLocal(1)
|
||||
photo.set_path(tfile)
|
||||
self.db.add_object(photo)
|
||||
trans = self.db.start_transaction()
|
||||
self.db.add_object(photo,trans)
|
||||
oref = RelLib.MediaRef()
|
||||
oref.set_reference(photo)
|
||||
try:
|
||||
@ -407,7 +406,10 @@ class MediaView:
|
||||
except:
|
||||
photo.set_path(tfile)
|
||||
return
|
||||
self.db.commit_media_object(photo)
|
||||
|
||||
self.db.commit_media_object(photo,trans)
|
||||
self.db.add_transaction(trans)
|
||||
|
||||
if GrampsCfg.globalprop:
|
||||
ImageSelect.GlobalMediaProperties(self.db,photo,None)
|
||||
|
||||
|
@ -307,7 +307,7 @@ class MergePeople:
|
||||
event = self.p2.get_death()
|
||||
event.set_name("Alternate Death")
|
||||
self.p1.add_event(event)
|
||||
|
||||
|
||||
if self.glade.get_widget("bfather2").get_active():
|
||||
orig_family = self.p1.get_main_parents_family_id()
|
||||
if orig_family:
|
||||
@ -347,7 +347,6 @@ class MergePeople:
|
||||
try:
|
||||
self.db.remove_person_id(self.p2.get_id())
|
||||
self.db.personMap[self.p1.get_id()] = self.p1
|
||||
self.db.build_person_display(self.p1.get_id(),old_id)
|
||||
except:
|
||||
print "%s is not in the person map!" % (GrampsCfg.nameof(self.p2))
|
||||
self.update(self.p1,self.p2,old_id)
|
||||
|
@ -62,7 +62,7 @@ class PeopleModel(gtk.GenericTreeModel):
|
||||
|
||||
if not self.db.is_open():
|
||||
return
|
||||
|
||||
|
||||
for person_id in self.db.get_person_keys():
|
||||
|
||||
person = self.db.find_person_from_id(person_id)
|
||||
@ -141,7 +141,8 @@ class PeopleModel(gtk.GenericTreeModel):
|
||||
else:
|
||||
return u''
|
||||
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):
|
||||
'''returns the next node at this level of the tree'''
|
||||
|
@ -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)
|
@ -151,11 +151,7 @@ class PeopleView:
|
||||
def remove_from_person_list(self,person,old_id=None):
|
||||
"""Remove the selected person from the list. A person object is expected,
|
||||
not an ID"""
|
||||
if old_id == None or person.get_id() == old_id:
|
||||
path = self.person_model.on_get_path(person.get_id())
|
||||
self.person_model.row_deleted(path)
|
||||
else:
|
||||
self.person_model.rebuild_data()
|
||||
self.build_tree()
|
||||
|
||||
def remove_from_history(self,person,old_id=None):
|
||||
"""Removes a person from the history list"""
|
||||
@ -187,8 +183,8 @@ class PeopleView:
|
||||
self.apply_filter(self.person_tree)
|
||||
self.goto_active_person()
|
||||
|
||||
def add_to_person_list(self,person,change):
|
||||
self.rebuild_data()
|
||||
def add_to_person_list(self,person,change=0):
|
||||
self.build_tree()
|
||||
|
||||
def goto_active_person(self,first=0):
|
||||
if not self.parent.active_person:
|
||||
@ -253,4 +249,7 @@ class PeopleView:
|
||||
menu.popup(None,None,None,event.button,event.time)
|
||||
|
||||
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)
|
||||
|
||||
|
@ -68,21 +68,18 @@ class PlaceView:
|
||||
|
||||
def __init__(self,parent,db,glade,update):
|
||||
self.parent = parent
|
||||
self.db = db
|
||||
self.glade = glade
|
||||
self.db = db
|
||||
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.active = None
|
||||
|
||||
self.model = gtk.TreeModelSort(DisplayModels.PlaceModel(self.db))
|
||||
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.columns = []
|
||||
@ -127,35 +124,6 @@ class PlaceView:
|
||||
self.list.set_model(self.model)
|
||||
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):
|
||||
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||
mlist = []
|
||||
@ -201,26 +169,25 @@ class PlaceView:
|
||||
menu.append(item)
|
||||
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):
|
||||
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):
|
||||
mlist = []
|
||||
self.selection.selected_foreach(self.blist,mlist)
|
||||
|
||||
|
||||
trans = self.db.start_transaction()
|
||||
|
||||
for place in mlist:
|
||||
used = 0
|
||||
for key in self.db.get_person_keys():
|
||||
p = self.db.get_person(key)
|
||||
p = self.db.find_person_from_id(key)
|
||||
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)
|
||||
@ -233,7 +200,8 @@ class PlaceView:
|
||||
if p.get_lds_sealing():
|
||||
event_list.append(p.get_lds_sealing())
|
||||
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
|
||||
|
||||
for fid in self.db.get_family_keys():
|
||||
@ -246,7 +214,8 @@ class PlaceView:
|
||||
if f.get_lds_sealing():
|
||||
event_list.append(f.get_lds_sealing())
|
||||
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
|
||||
|
||||
if used == 1:
|
||||
@ -259,8 +228,10 @@ class PlaceView:
|
||||
_('_Delete Place'),
|
||||
ans.query_response)
|
||||
else:
|
||||
self.db.remove_place(place.get_id())
|
||||
self.update(0)
|
||||
trans = self.db.start_transaction()
|
||||
self.db.remove_place(place.get_id(),trans)
|
||||
self.db.add_transaction(trans)
|
||||
self.build_tree()
|
||||
|
||||
def on_edit_clicked(self,obj):
|
||||
"""Display the selected places in the EditPlace display"""
|
||||
@ -273,3 +244,18 @@ class PlaceView:
|
||||
def blist(self,store,path,iter,list):
|
||||
id = self.db.get_place_id(store.get_value(iter,1))
|
||||
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)
|
||||
|
||||
|
643
src/RelLib.py
643
src/RelLib.py
File diff suppressed because it is too large
Load Diff
@ -300,7 +300,10 @@ class SelectChild:
|
||||
|
||||
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.close(obj)
|
||||
|
||||
@ -430,6 +433,9 @@ class EditRel:
|
||||
frel = "Unknown"
|
||||
|
||||
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.top.destroy()
|
||||
|
@ -68,8 +68,8 @@ class SourceView:
|
||||
self.db = db
|
||||
self.update = update
|
||||
self.list = glade.get_widget("source_list")
|
||||
self.list.connect('button-press-event',self.button_press)
|
||||
self.selection = self.list.get_selection()
|
||||
colno = 0
|
||||
|
||||
self.renderer = gtk.CellRendererText()
|
||||
|
||||
@ -80,12 +80,6 @@ class SourceView:
|
||||
self.columns = []
|
||||
self.build_columns()
|
||||
|
||||
def load_sources(self,id=None):
|
||||
pass
|
||||
|
||||
def on_click(self,column):
|
||||
self.click_col = column
|
||||
|
||||
def build_columns(self):
|
||||
for column in self.columns:
|
||||
self.list.remove_column(column)
|
||||
@ -112,25 +106,18 @@ class SourceView:
|
||||
self.list.append_column(column)
|
||||
index += 1
|
||||
|
||||
def on_click(self,column):
|
||||
self.click_col = column
|
||||
|
||||
def change_db(self,db):
|
||||
self.build_columns()
|
||||
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):
|
||||
self.list.set_model(None)
|
||||
self.model = gtk.TreeModelSort(DisplayModels.SourceModel(self.parent.db))
|
||||
|
||||
self.list.set_model(self.model)
|
||||
|
||||
self.selection = self.list.get_selection()
|
||||
self.list.connect('button-press-event',self.button_press)
|
||||
|
||||
def button_press(self,obj,event):
|
||||
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||
@ -182,7 +169,6 @@ class SourceView:
|
||||
self.topWindow,self.new_after_edit)
|
||||
|
||||
def on_delete_clicked(self,obj):
|
||||
|
||||
store,iter = self.selection.get_selected()
|
||||
if not iter:
|
||||
return
|
||||
@ -191,7 +177,7 @@ class SourceView:
|
||||
source = self.db.get_source(id)
|
||||
|
||||
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(),
|
||||
_('This source is currently being used. Deleting it '
|
||||
@ -200,8 +186,10 @@ class SourceView:
|
||||
_('_Delete Source'),
|
||||
ans.query_response,self.topWindow)
|
||||
else:
|
||||
self.db.remove_source_id(source.get_id())
|
||||
self.update(0)
|
||||
trans = self.db.start_transaction()
|
||||
self.db.remove_source_id(source.get_id(),trans)
|
||||
self.db.add_transaction(trans)
|
||||
self.build_tree()
|
||||
|
||||
def is_used(self,source):
|
||||
for key in self.db.get_place_id_keys():
|
||||
@ -258,8 +246,7 @@ class SourceView:
|
||||
|
||||
def new_after_edit(self,source):
|
||||
self.db.add_source(source)
|
||||
self.update(0)
|
||||
self.build_tree()
|
||||
|
||||
def update_display(self,place):
|
||||
self.db.build_source_display(place.get_id())
|
||||
self.update(0)
|
||||
self.build_tree()
|
||||
|
@ -51,7 +51,7 @@
|
||||
<accelerator key="N" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1865">
|
||||
<widget class="GtkImage" id="image1882">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-new</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -73,7 +73,7 @@
|
||||
<accelerator key="O" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1866">
|
||||
<widget class="GtkImage" id="image1883">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-open</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -107,7 +107,7 @@
|
||||
<property name="use_underline">True</property>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1867">
|
||||
<widget class="GtkImage" id="image1884">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-convert</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -135,7 +135,7 @@
|
||||
<accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1868">
|
||||
<widget class="GtkImage" id="image1885">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-quit</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -171,7 +171,7 @@
|
||||
<accelerator key="Insert" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1869">
|
||||
<widget class="GtkImage" id="image1886">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -194,7 +194,7 @@
|
||||
<accelerator key="Delete" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1870">
|
||||
<widget class="GtkImage" id="image1887">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-remove</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -207,6 +207,14 @@
|
||||
</widget>
|
||||
</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>
|
||||
<widget class="GtkMenuItem" id="edit_item">
|
||||
<property name="visible">True</property>
|
||||
@ -232,7 +240,7 @@
|
||||
<accelerator key="F" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1871">
|
||||
<widget class="GtkImage" id="image1888">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-find</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -254,7 +262,7 @@
|
||||
<accelerator key="M" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1872">
|
||||
<widget class="GtkImage" id="image1889">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-convert</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -281,7 +289,7 @@
|
||||
<signal name="activate" handler="on_preferences1_activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1873">
|
||||
<widget class="GtkImage" id="image1890">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-preferences</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"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1874">
|
||||
<widget class="GtkImage" id="image1891">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-properties</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"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1875">
|
||||
<widget class="GtkImage" id="image1892">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-home</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -409,7 +417,7 @@
|
||||
<accelerator key="D" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1876">
|
||||
<widget class="GtkImage" id="image1893">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-index</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -431,7 +439,7 @@
|
||||
<accelerator key="B" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1877">
|
||||
<widget class="GtkImage" id="image1894">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gnome-stock-book-open</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -504,7 +512,7 @@
|
||||
<accelerator key="F1" modifiers="0" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1878">
|
||||
<widget class="GtkImage" id="image1895">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-help</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"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1879">
|
||||
<widget class="GtkImage" id="image1896">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gnome-stock-book-open</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -552,7 +560,7 @@
|
||||
<signal name="activate" handler="on_gramps_home_page_activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1880">
|
||||
<widget class="GtkImage" id="image1897">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-jump-to</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -573,7 +581,7 @@
|
||||
<signal name="activate" handler="on_gramps_mailing_lists_activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1881">
|
||||
<widget class="GtkImage" id="image1898">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gnome-stock-mail</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"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image1882">
|
||||
<widget class="GtkImage" id="image1899">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gnome-stock-about</property>
|
||||
<property name="icon_size">1</property>
|
||||
|
@ -148,7 +148,6 @@ class Gramps:
|
||||
self.db.set_researcher(GrampsCfg.get_researcher())
|
||||
|
||||
def pref_callback(self,val):
|
||||
self.db.rebuild_person_table()
|
||||
self.modify_statusbar()
|
||||
self.family_view.init_interface()
|
||||
self.update_display(1)
|
||||
@ -259,6 +258,7 @@ class Gramps:
|
||||
self.child_windows = {}
|
||||
|
||||
self.gtop.signal_autoconnect({
|
||||
"on_undo_activate" : self.undo,
|
||||
"on_column_order_activate": self.column_order,
|
||||
"on_back_clicked" : self.back_clicked,
|
||||
"on_back_pressed" : self.back_pressed,
|
||||
@ -346,6 +346,16 @@ class Gramps:
|
||||
self.topWindow.show()
|
||||
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):
|
||||
self.db.set_column_order(list)
|
||||
self.people_view.build_columns()
|
||||
@ -894,8 +904,6 @@ class Gramps:
|
||||
self.family_view.clear()
|
||||
self.family_view.load_family()
|
||||
self.pedigree_view.clear()
|
||||
self.source_view.load_sources()
|
||||
self.place_view.load_places()
|
||||
self.media_view.load_media()
|
||||
|
||||
def tool_callback(self,val):
|
||||
@ -931,17 +939,12 @@ class Gramps:
|
||||
self.family_view.load_family()
|
||||
elif page == PEDIGREE_VIEW:
|
||||
self.pedigree_view.load_canvas(self.active_person)
|
||||
elif page == SOURCE_VIEW:
|
||||
self.source_view.load_sources()
|
||||
elif page == PLACE_VIEW:
|
||||
if len(self.db.get_place_id_keys()) > 2000:
|
||||
self.status_text(_('Updating display - this may take a few seconds...'))
|
||||
else:
|
||||
self.status_text(_('Updating display...'))
|
||||
self.place_view.load_places()
|
||||
self.modify_statusbar()
|
||||
else:
|
||||
self.media_view.load_media()
|
||||
|
||||
def on_tools_clicked(self,obj):
|
||||
if self.active_person:
|
||||
@ -953,23 +956,13 @@ class Gramps:
|
||||
Plugins.ReportPlugins(self,self.db,self.active_person)
|
||||
|
||||
def on_ok_button1_clicked(self,obj):
|
||||
|
||||
dbname = obj.get_data("dbname")
|
||||
getoldrev = obj.get_data("getoldrev")
|
||||
filename = dbname.get_full_path(0)
|
||||
|
||||
filename = self.filesel.get_filename()
|
||||
if filename == "" or filename == None:
|
||||
return
|
||||
filename = os.path.normpath(os.path.abspath(filename))
|
||||
|
||||
self.filesel.destroy()
|
||||
self.clear_database()
|
||||
|
||||
if getoldrev.get_active():
|
||||
vc = VersionControl.RcsVersionControl(filename)
|
||||
VersionControl.RevisionSelect(self.db,filename,vc,
|
||||
self.load_revision)
|
||||
else:
|
||||
self.auto_save_load(filename)
|
||||
self.auto_save_load(filename)
|
||||
|
||||
def on_help_dbopen_clicked(self,obj):
|
||||
"""Display the relevant portion of GRAMPS manual"""
|
||||
@ -1053,7 +1046,10 @@ class Gramps:
|
||||
if o.get_reference_id() == ObjectId:
|
||||
nl.remove(o)
|
||||
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():
|
||||
# File is lost => do nothing, leave as is
|
||||
@ -1210,6 +1206,8 @@ class Gramps:
|
||||
|
||||
def delete_person_response(self):
|
||||
|
||||
trans = self.db.start_transaction()
|
||||
|
||||
if self.db.get_default_person() == self.active_person:
|
||||
self.db.set_default_person(None)
|
||||
|
||||
@ -1222,7 +1220,8 @@ class Gramps:
|
||||
for child_id in family.get_child_id_list():
|
||||
child = self.db.find_person_from_id(child_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:
|
||||
family.set_father_id(None)
|
||||
else:
|
||||
@ -1230,23 +1229,27 @@ class Gramps:
|
||||
for child_id in family.get_child_id_list():
|
||||
child = self.db.find_person_from_id(child_id)
|
||||
child.remove_parent_family_id(family)
|
||||
self.db.delete_family(family)
|
||||
self.db.commit_person(child,trans)
|
||||
self.db.delete_family(family,trans)
|
||||
else:
|
||||
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():
|
||||
if family_id:
|
||||
family = self.db.find_family_from_id(family_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.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)
|
||||
|
||||
if self.hindex >= 0:
|
||||
self.active_person = self.db.get_person(self.history[self.hindex])
|
||||
else:
|
||||
self.change_active_person(None)
|
||||
self.db.add_transaction(trans)
|
||||
self.redraw_histmenu()
|
||||
|
||||
def merge_update(self,p1,p2,old_id):
|
||||
@ -1261,15 +1264,16 @@ class Gramps:
|
||||
def goto_active_person(self,first=0):
|
||||
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:
|
||||
self.set_buttons(0)
|
||||
self.active_person = None
|
||||
self.modify_statusbar()
|
||||
elif self.active_person == None or \
|
||||
person.get_id() != self.active_person.get_id():
|
||||
self.active_person = person
|
||||
self.modify_statusbar()
|
||||
self.set_buttons(1)
|
||||
if person:
|
||||
if self.hindex+1 < len(self.history):
|
||||
self.history = self.history[0:self.hindex+1]
|
||||
@ -1292,6 +1296,7 @@ class Gramps:
|
||||
else:
|
||||
self.backbtn.set_sensitive(0)
|
||||
self.back.set_sensitive(0)
|
||||
else:
|
||||
self.set_buttons(1)
|
||||
|
||||
def modify_statusbar(self):
|
||||
@ -1327,31 +1332,19 @@ class Gramps:
|
||||
DisplayTrace.DisplayTrace()
|
||||
return ""
|
||||
|
||||
def fs_close_window(self,obj):
|
||||
self.filesel.destroy()
|
||||
|
||||
def on_open_activate(self,obj):
|
||||
wFs = gtk.glade.XML(const.revisionFile, "dbopen","gramps")
|
||||
|
||||
self.dbopen_fs = wFs.get_widget("dbopen")
|
||||
|
||||
Utils.set_titles(self.dbopen_fs, wFs.get_widget('title'),
|
||||
_('Open a database'))
|
||||
|
||||
dbname = wFs.get_widget("dbname")
|
||||
getoldrev = wFs.get_widget("getoldrev")
|
||||
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()
|
||||
|
||||
top = gtk.glade.XML (const.gladeFile, "fileselection","gramps")
|
||||
top.signal_autoconnect({
|
||||
"on_ok_button1_clicked": self.on_ok_button1_clicked,
|
||||
"destroy_passed_object": self.fs_close_window,
|
||||
})
|
||||
self.filesel = top.get_widget('fileselection')
|
||||
if GrampsCfg.lastfile:
|
||||
self.filesel.set_filename(GrampsCfg.lastfile)
|
||||
|
||||
def on_revert_activate(self,obj):
|
||||
pass
|
||||
@ -1429,15 +1422,12 @@ class Gramps:
|
||||
elif page == SOURCE_VIEW:
|
||||
self.enable_buttons(1)
|
||||
self.merge_button.set_sensitive(0)
|
||||
self.source_view.load_sources()
|
||||
elif page == PLACE_VIEW:
|
||||
self.enable_buttons(1)
|
||||
self.place_view.load_places()
|
||||
self.merge_button.set_sensitive(1)
|
||||
elif page == MEDIA_VIEW:
|
||||
self.enable_buttons(1)
|
||||
self.merge_button.set_sensitive(0)
|
||||
self.media_view.load_media()
|
||||
|
||||
def on_apply_filter_clicked(self,obj):
|
||||
self.people_view.apply_filter_clicked()
|
||||
@ -1455,15 +1445,14 @@ class Gramps:
|
||||
filter.hide()
|
||||
filter.set_sensitive(qual)
|
||||
|
||||
def new_after_edit(self,epo):
|
||||
def new_after_edit(self,epo,trans):
|
||||
if epo:
|
||||
if epo.person.get_id() == "":
|
||||
self.db.add_person(epo.person)
|
||||
self.db.add_person(epo.person,trans)
|
||||
else:
|
||||
self.db.add_person_no_map(epo.person,epo.person.get_id())
|
||||
self.db.build_person_display(epo.person.get_id())
|
||||
self.db.add_person_no_map(epo.person,epo.person.get_id(),trans)
|
||||
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]:
|
||||
self.family_view.load_family()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user