* various: Add undo functionality

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

View File

@@ -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()