* src/AddSpouse.py: new database callback scheme. This scheme

provides a registration mechanism to signal interested objects
when database commits occur. The eliminates most of all callback
functions tied to interface windows.
* src/AddrEdit.py: new database callback scheme
* src/AttrEdit.py: new database callback scheme
* src/ChooseParents.py: new database callback scheme
* src/EditPerson.py: new database callback scheme
* src/EditPlace.py: new database callback scheme
* src/EditSource.py: new database callback scheme
* src/EventEdit.py: new database callback scheme
* src/FamilyView.py: new database callback scheme
* src/GrampsBSDDB.py: new database callback scheme
* src/GrampsDbBase.py: new database callback scheme
* src/GrampsInMemDB.py: new database callback scheme
* src/Marriage.py: new database callback scheme
* src/NameEdit.py: new database callback scheme
* src/PeopleView.py: new database callback scheme
* src/PlaceView.py: new database callback scheme
* src/ReadGedcom.py: new database callback scheme
* src/ReadXML.py: new database callback scheme
* src/SourceView.py: new database callback scheme
* src/Sources.py: new database callback scheme
* src/gramps_main.py: new database callback scheme


svn: r4267
This commit is contained in:
Don Allingham
2005-04-01 05:33:22 +00:00
parent ff098f8093
commit 19fe252c4c
22 changed files with 477 additions and 355 deletions

View File

@ -168,14 +168,62 @@ class GrampsDbBase:
self.person_add_callback = {}
self.person_update_callback = {}
self.person_delete_callback = {}
self.person_rebuild_callback = {}
def add_person_callbacks(self, key, add, update, delete):
self.family_add_callback = {}
self.family_update_callback = {}
self.family_delete_callback = {}
self.family_rebuild_callback = {}
self.place_add_callback = {}
self.place_update_callback = {}
self.place_delete_callback = {}
self.place_rebuild_callback = {}
self.source_add_callback = {}
self.source_update_callback = {}
self.source_delete_callback = {}
self.source_rebuild_callback = {}
def add_person_callbacks(self, key, add, update, delete, rebuild):
if add:
self.person_add_callback[key] = add
if update:
self.person_update_callback[key] = update
if delete:
self.person_delete_callback[key] = delete
if rebuild:
self.person_rebuild_callback[key] = rebuild
def add_place_callbacks(self, key, add, update, delete, rebuild):
if add:
self.place_add_callback[key] = add
if update:
self.place_update_callback[key] = update
if delete:
self.place_delete_callback[key] = delete
if rebuild:
self.place_rebuild_callback[key] = rebuild
def add_source_callbacks(self, key, add, update, delete, rebuild):
if add:
self.source_add_callback[key] = add
if update:
self.source_update_callback[key] = update
if delete:
self.source_delete_callback[key] = delete
if rebuild:
self.source_rebuild_callback[key] = rebuild
def add_family_callbacks(self, key, add, update, delete, rebuild):
if add:
self.family_add_callback[key] = add
if update:
self.family_update_callback[key] = update
if delete:
self.family_delete_callback[key] = delete
if rebuild:
self.family_rebuild_callback[key] = rebuild
def remove_person_callbacks(self, key):
if self.person_add_callback.has_key(key):
@ -184,18 +232,102 @@ class GrampsDbBase:
del self.person_update_callback[key]
if self.person_delete_callback.has_key(key):
del self.person_delete_callback[key]
if self.person_rebuild_callback.has_key(key):
del self.person_rebuild_callback[key]
def run_person_add_callbacks(self,handle):
def remove_place_callbacks(self, key):
if self.place_add_callback.has_key(key):
del self.place_add_callback[key]
if self.place_update_callback.has_key(key):
del self.place_update_callback[key]
if self.place_delete_callback.has_key(key):
del self.place_delete_callback[key]
if self.place_rebuild_callback.has_key(key):
del self.place_rebuild_callback[key]
def remove_family_callbacks(self, key):
if self.family_add_callback.has_key(key):
del self.family_add_callback[key]
if self.family_update_callback.has_key(key):
del self.family_update_callback[key]
if self.family_delete_callback.has_key(key):
del self.family_delete_callback[key]
if self.family_rebuild_callback.has_key(key):
del self.family_rebuild_callback[key]
def remove_source_callbacks(self, key):
if self.source_add_callback.has_key(key):
del self.source_add_callback[key]
if self.source_update_callback.has_key(key):
del self.source_update_callback[key]
if self.source_delete_callback.has_key(key):
del self.source_delete_callback[key]
if self.source_rebuild_callback.has_key(key):
del self.source_rebuild_callback[key]
def run_person_add_callbacks(self,handle_list):
for func in self.person_add_callback.values():
func(handle)
func(handle_list)
def run_person_update_callbacks(self,handle):
def run_person_update_callbacks(self,handle_list):
for func in self.person_update_callback.values():
func(handle)
func(handle_list)
def run_person_delete_callbacks(self,handle):
def run_person_delete_callbacks(self,handle_list):
for func in self.person_delete_callback.values():
func(handle)
func(handle_list)
def run_person_rebuild_callbacks(self):
for func in self.person_rebuild_callback.values():
func()
def run_family_add_callbacks(self,handle_list):
for func in self.family_add_callback.values():
func(handle_list)
def run_family_update_callbacks(self,handle_list):
for func in self.family_update_callback.values():
func(handle_list)
def run_family_delete_callbacks(self,handle_list):
for func in self.family_delete_callback.values():
func(handle_list)
def run_family_rebuild_callbacks(self):
for func in self.family_rebuild_callback.values():
func()
def run_source_add_callbacks(self,handle_list):
for func in self.source_add_callback.values():
func(handle_list)
def run_source_update_callbacks(self,handle_list):
for func in self.source_update_callback.values():
func(handle_list)
def run_source_delete_callbacks(self,handle_list):
for func in self.source_delete_callback.values():
func(handle_list)
def run_source_rebuild_callbacks(self):
for func in self.source_rebuild_callback.values():
func()
def run_place_add_callbacks(self,handle_list):
for func in self.place_add_callback.values():
func(handle_list)
def run_place_update_callbacks(self,handle_list):
for func in self.place_update_callback.values():
func(handle_list)
def run_place_delete_callbacks(self,handle_list):
for func in self.place_delete_callback.values():
func(handle_list)
def run_place_rebuild_callbacks(self):
for func in self.place_rebuild_callback.values():
func()
def need_upgrade(self):
return False
@ -272,7 +404,11 @@ class GrampsDbBase:
transaction.add(PERSON_KEY,handle,old_data)
self.person_map[handle] = person.serialize()
self.run_person_update_callbacks(handle)
if transaction and not transaction.batch:
if old_data:
self.run_person_update_callbacks([handle])
else:
self.run_person_add_callbacks([handle])
def commit_media_object(self,obj,transaction,change_time=None):
"""
@ -307,6 +443,11 @@ class GrampsDbBase:
old_data = self.source_map.get(handle)
transaction.add(SOURCE_KEY,handle,old_data)
self.source_map[handle] = source.serialize()
if transaction and not transaction.batch:
if old_data:
self.run_source_update_callbacks([handle])
else:
self.run_source_add_callbacks([handle])
def commit_place(self,place,transaction,change_time=None):
"""
@ -324,6 +465,11 @@ class GrampsDbBase:
old_data = self.place_map.get(handle)
transaction.add(PLACE_KEY,handle,old_data)
self.place_map[handle] = place.serialize()
if transaction and not transaction.batch:
if old_data:
self.run_place_update_callbacks([handle])
else:
self.run_place_add_callbacks([handle])
def commit_event(self,event,transaction,change_time=None):
"""
@ -347,8 +493,8 @@ class GrampsDbBase:
Commits the specified Family to the database, storing the changes
as part of the transaction.
"""
if self.readonly or not family.get_handle():
return
if self.readonly or not family.handle:
return
if change_time:
family.change = int(change_time)
else:
@ -359,6 +505,12 @@ class GrampsDbBase:
transaction.add(FAMILY_KEY,handle,old_data)
self.family_map[handle] = family.serialize()
if transaction and not transaction.batch:
if old_data:
self.run_family_update_callbacks([handle])
else:
self.run_family_add_callbacks([handle])
def find_next_person_gramps_id(self):
"""
Returns the next available GRAMPS' ID for a Person object based
@ -507,7 +659,8 @@ class GrampsDbBase:
if transaction != None:
transaction.add(PERSON_KEY, val, None)
self.person_map[str(val)] = person.serialize()
self.run_person_add_callbacks(str(val))
if transaction and not transaction.batch:
self.run_person_add_callbacks([str(val)])
self.genderStats.count_person (person, self)
return person
@ -641,6 +794,8 @@ class GrampsDbBase:
if family.get_handle() == None:
family.set_handle(self.create_id())
self.commit_family(family,transaction)
if transaction and not transaction.batch:
self.run_family_add_callbacks(str(family.handle))
return family.get_handle()
def add_source(self,source,transaction):
@ -653,6 +808,8 @@ class GrampsDbBase:
if source.get_gramps_id() == None:
source.set_gramps_id(self.find_next_source_gramps_id())
self.commit_source(source,transaction)
if transaction and not transaction.batch:
self.run_source_add_callbacks([source.handle])
return source.get_handle()
def add_event(self,event,transaction):
@ -678,6 +835,8 @@ class GrampsDbBase:
if place.get_gramps_id() == None:
place.set_gramps_id(self.find_next_place_gramps_id())
self.commit_place(place,transaction)
if transaction and not transaction.batch:
self.run_place_add_callbacks([source.handle])
return place.get_handle()
def add_object(self,obj,transaction):
@ -936,6 +1095,12 @@ class GrampsDbBase:
if self.undo_callback:
self.undo_callback(_("_Undo %s") % transaction.get_description())
if transaction and transaction.batch:
self.run_person_rebuild_callbacks()
self.run_family_rebuild_callbacks()
self.run_place_rebuild_callbacks()
self.run_source_rebuild_callbacks()
def undo(self):
"""
Accesses the last committed transaction, and reverts the data to
@ -952,21 +1117,25 @@ class GrampsDbBase:
(key, handle, data) = transaction.get_record(record_id)
if key == PERSON_KEY:
if data == None:
self.run_person_delete_callbacks([str(handle)])
del self.person_map[str(handle)]
self.run_person_delete_callbacks(str(handle))
else:
self.person_map[str(handle)] = data
self.run_person_update_callbacks(str(handle))
self.run_person_update_callbacks([str(handle)])
elif key == FAMILY_KEY:
if data == None:
self.run_family_delete_callbacks([str(handle)])
del self.family_map[str(handle)]
else:
self.family_map[str(handle)] = data
self.run_family_update_callbacks([str(handle)])
elif key == SOURCE_KEY:
if data == None:
self.run_source_delete_callbacks([str(handle)])
del self.source_map[str(handle)]
else:
self.source_map[str(handle)] = data
self.run_source_update_callbacks([str(handle)])
elif key == EVENT_KEY:
if data == None:
del self.event_map[str(handle)]
@ -974,9 +1143,11 @@ class GrampsDbBase:
self.event_map[str(handle)] = data
elif key == PLACE_KEY:
if data == None:
self.run_place_delete_callbacks([str(handle)])
del self.place_map[str(handle)]
else:
self.place_map[str(handle)] = data
self.run_place_update_callbacks([str(handle)])
elif key == MEDIA_KEY:
if data == None:
del self.media_map[str(handle)]
@ -1309,7 +1480,14 @@ class Transaction:
self.db = db
self.first = None
self.last = None
self.batch = False
def set_batch(self,batch):
self.batch = batch
def get_batch(self):
return self.batch
def get_description(self):
"""
Returns the text string that describes the logical operation