From ec92261a5a9b162620e811acb572a49b2d0154fd Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Mon, 30 Aug 2004 03:50:33 +0000 Subject: [PATCH] * src/GrampsBSDDB.py: add remove_place function * src/DisplayModels.py: added row deletion and updating functions * src/EditPlace.py: Make a distinction between update and new * src/EditSource.py: Make a distinction between update and new * src/PeopleModel.py: remove debugging code * src/PlaceView.py: better handling of updating and deleiting * src/SourceView.py: better handling of updating and deleiting svn: r3520 --- ChangeLog | 12 ++++++++++ src/DisplayModels.py | 24 +++++++++++++------ src/EditPlace.py | 7 ++++-- src/EditSource.py | 11 +++++++-- src/GrampsBSDDB.py | 6 +++++ src/PeopleModel.py | 7 ------ src/PlaceView.py | 39 ++++++++++++++++++------------ src/SourceView.py | 57 ++++++++++++++++++++++---------------------- 8 files changed, 102 insertions(+), 61 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6c45af196..976a3e827 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2004-08-29 Don Allingham + * src/GrampsBSDDB.py: add remove_place function + * src/DisplayModels.py: added row deletion and updating + functions + * src/EditPlace.py: Make a distinction between update and + new + * src/EditSource.py: Make a distinction between update and + new + * src/PeopleModel.py: remove debugging code + * src/PlaceView.py: better handling of updating and deleiting + * src/SourceView.py: better handling of updating and deleiting + 2004-08-28 Don Allingham * src/DbPrompter.py: cleanup dialogs * src/EditPerson.py: update screen properly diff --git a/src/DisplayModels.py b/src/DisplayModels.py index dc73d5595..a65de18d4 100644 --- a/src/DisplayModels.py +++ b/src/DisplayModels.py @@ -38,12 +38,10 @@ class BaseModel(gtk.GenericTreeModel): def __init__(self,db): gtk.GenericTreeModel.__init__(self) - self.set_property("leak_references",0) + self.set_property("leak_references",False) self.db = db self.rebuild_data() - self.connect('row-inserted',self.on_row_inserted) - self.connect('row-deleted',self.on_row_deleted) def rebuild_data(self): self.datalist = [] @@ -56,8 +54,20 @@ class BaseModel(gtk.GenericTreeModel): def on_row_inserted(self,obj,path,iter): self.rebuild_data() - def on_row_deleted(self,obj,path): - self.rebuild_data() + def delete_row_by_handle(self,handle): + index = self.datalist.index(handle) + del self.datalist[index] + self.row_deleted(index) + + def delete_row_by_handle(self,handle): + index = self.datalist.index(handle) + del self.datalist[index] + self.row_deleted(index) + + def update_row_by_handle(self,handle): + index = self.datalist.index(handle) + iter = self.get_iter(index) + self.row_changed(index,iter) def on_get_flags(self): '''returns the GtkTreeModelFlags for this particular type of model''' @@ -103,12 +113,12 @@ class BaseModel(gtk.GenericTreeModel): '''returns true if this node has children''' if node == None: return len(self.datalist) > 0 - return 0 + return False def on_iter_n_children(self,node): if node == None: return len(self.datalist) - return 0 + return False def on_iter_nth_child(self,node,n): if node == None: diff --git a/src/EditPlace.py b/src/EditPlace.py index 5570d60fd..984b98fa0 100644 --- a/src/EditPlace.py +++ b/src/EditPlace.py @@ -371,7 +371,10 @@ class EditPlace: self.update_lists() trans = self.db.transaction_begin() - self.db.commit_place(self.place,trans) + if self.place.get_handle(): + self.db.commit_place(self.place,trans) + else: + self.db.add_place(self.place,trans) self.db.transaction_commit(trans,_("Edit Place (%s)") % self.place.get_title()) if self.callback: @@ -578,4 +581,4 @@ class DeletePlaceQuery: self.db.commit_event(event,trans) self.db.transaction_commit(trans,_("Delete Place (%s)") % self.place.get_title()) - self.update(None) + self.update(self.place.get_handle()) diff --git a/src/EditSource.py b/src/EditSource.py index 8e11b5b5e..edf90580e 100644 --- a/src/EditSource.py +++ b/src/EditSource.py @@ -38,6 +38,7 @@ import Utils import GrampsCfg import ImageSelect import ListModel +import RelLib from gettext import gettext as _ @@ -50,7 +51,10 @@ from gettext import gettext as _ class EditSource: def __init__(self,source,db,parent,parent_window=None,func=None): - self.source = source + if source: + self.source = source + else: + self.source = RelLib.Source() self.db = db self.parent = parent if source: @@ -328,7 +332,10 @@ class EditSource: self.gallery_ok = 1 trans = self.db.transaction_begin() - self.db.commit_source(self.source,trans) + if self.source.get_handle() == None: + self.db.add_source(self.source,trans) + else: + self.db.commit_source(self.source,trans) self.db.transaction_commit(trans,_("Edit Source (%s)") % title) if self.callback: diff --git a/src/GrampsBSDDB.py b/src/GrampsBSDDB.py index b4e13aa3a..8f9137345 100644 --- a/src/GrampsBSDDB.py +++ b/src/GrampsBSDDB.py @@ -196,6 +196,12 @@ class GrampsBSDDB(GrampsDbBase): transaction.add(EVENT_KEY,handle,old_data) self.event_map.delete(str(handle)) + def remove_place(self,handle,transaction): + if transaction != None: + old_data = self.place_map.get(handle) + transaction.add(PLACE_KEY,handle,old_data) + self.place_map.delete(handle) + def get_person_from_gramps_id(self,val): """finds a Person in the database from the passed gramps' ID. If no such Person exists, a new Person is added to the database.""" diff --git a/src/PeopleModel.py b/src/PeopleModel.py index c54d475c8..4143391bc 100644 --- a/src/PeopleModel.py +++ b/src/PeopleModel.py @@ -83,15 +83,8 @@ class PeopleModel(gtk.GenericTreeModel): else: self.rebuild_data() -# self.connect('row-deleted',self.on_row_deleted) -# self.connect('row-inserted',self.on_row_inserted) - def rebuild_data(self): - import traceback - - print traceback.print_stack() - self.top_path2iter = [] self.iter2path = {} self.path2iter = {} diff --git a/src/PlaceView.py b/src/PlaceView.py index 5af9ab9fe..8db35c8b7 100644 --- a/src/PlaceView.py +++ b/src/PlaceView.py @@ -173,10 +173,18 @@ class PlaceView: EditPlace.EditPlace(self.parent,RelLib.Place(),self.new_place_after_edit) def new_place_after_edit(self,place): - self.parent.db.add_place(place) + self.build_tree() def update_display(self,place): - self.build_tree() + self.model.update_row_by_handle(place.get_handle()) + + def delete_place(self,place): + trans = self.parent.db.transaction_begin() + place_handle = place.get_handle() + self.parent.db.remove_place(place_handle,trans) + title_msg = _("Delete Place (%s)") % place.get_title() + self.parent.db.transaction_commit(trans,title_msg) + self.model.delete_row_by_handle(place_handle) def on_delete_clicked(self,obj): mlist = [] @@ -184,7 +192,7 @@ class PlaceView: trans = self.parent.db.transaction_begin() - for place in mlist: + for place_handle in mlist: used = 0 for key in self.parent.db.get_person_handles(sort_handles=False): p = self.parent.db.get_person_from_handle(key) @@ -200,24 +208,27 @@ class PlaceView: if p.get_lds_sealing(): event_list.append(p.get_lds_sealing()) for event in event_list: - if event.get_place_handle() == place.get_handle(): - used = 1 + if event: + if event.get_place_handle() == place_handle: + used = 1 for fid in self.parent.db.get_family_handles(): f = self.parent.db.get_family_from_handle(fid) event_list = [] - for e in f.get_event_list(): - event = self.parent.db.get_event_from_handle(e) + for event_id in f.get_event_list(): + event = self.parent.db.get_event_from_handle(event_id) if event: event_list.append(event) if f.get_lds_sealing(): event_list.append(f.get_lds_sealing()) for event in event_list: - if event.get_place_handle() == place.get_handle(): + if event.get_place_handle() == place_handle: used = 1 + place = self.parent.db.get_place_from_handle(place_handle) if used == 1: - ans = EditPlace.DeletePlaceQuery(place,self.parent.db,self.update_display) + ans = EditPlace.DeletePlaceQuery(place,self.parent.db, + self.model.delete_row_by_handle) QuestionDialog(_('Delete %s?') % place.get_title(), _('This place is currently being used by at least one ' 'record in the database. Deleting it will remove it ' @@ -226,17 +237,15 @@ class PlaceView: _('_Delete Place'), ans.query_response) else: - trans = self.parent.db.transaction_begin() - self.parent.db.remove_place(place.get_handle(),trans) - self.parent.db.transaction_commit(trans,_("Delete Place (%s)") % place.title()) - self.build_tree() - + self.delete_place(place) + def on_edit_clicked(self,obj): """Display the selected places in the EditPlace display""" mlist = [] self.selection.selected_foreach(self.blist,mlist) - for place in mlist: + for place_handle in mlist: + place = self.parent.db.get_place_from_handle(place_handle) EditPlace.EditPlace(self.parent, place, self.update_display) def blist(self,store,path,iter,list): diff --git a/src/SourceView.py b/src/SourceView.py index fc1340c30..cba23bf37 100644 --- a/src/SourceView.py +++ b/src/SourceView.py @@ -42,8 +42,6 @@ import const from QuestionDialog import QuestionDialog -_HANDLE_COL = 7 - #------------------------------------------------------------------------- # # internationalization @@ -61,6 +59,8 @@ column_names = [ _('Last Changed'), ] +_HANDLE_COL = len(column_names) + #------------------------------------------------------------------------- # # SouceView @@ -94,7 +94,6 @@ class SourceView: self.list.append_column(column) self.columns = [column] - index = 1 for pair in self.parent.db.get_source_column_order(): if not pair[0]: continue @@ -104,7 +103,6 @@ class SourceView: column.set_min_width(75) self.columns.append(column) self.list.append_column(column) - index += 1 def on_click(self,column): self.click_col = column @@ -126,18 +124,18 @@ class SourceView: source = self.parent.db.get_source_from_handle(handle) EditSource.EditSource(source,self.parent.db,self.parent, self.topWindow,self.update_display) - return 1 + return True elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: self.build_context_menu(event) - return 1 - return 0 + return True + return False def key_press(self,obj,event): if event.keyval == gtk.gdk.keyval_from_name("Return") \ and not event.state: self.on_edit_clicked(obj) - return 1 - return 0 + return True + return False def build_context_menu(self,event): """Builds the menu with editing operations on the source's list""" @@ -168,6 +166,14 @@ class SourceView: EditSource.EditSource(RelLib.Source(),self.parent.db,self.parent, self.topWindow,self.new_after_edit) + def delete_source(self,source): + trans = self.parent.db.transaction_begin() + source_handle = source.get_handle() + self.parent.db.remove_source(source_handle,trans) + title_msg = _("Delete Source (%s)") % source.get_title() + self.parent.db.transaction_commit(trans,title_msg) + self.model.delete_row_by_handle(source_handle) + def on_delete_clicked(self,obj): store,node = self.selection.get_selected() if not node: @@ -177,7 +183,8 @@ class SourceView: source = self.parent.db.get_source_from_handle(handle) if self.is_used(source): - ans = EditSource.DelSrcQuery(source,self.parent.db,self.build_tree) + ans = EditSource.DelSrcQuery(source,self.parent.db, + self.model.delete_row_by_handle) QuestionDialog(_('Delete %s?') % source.get_title(), _('This source is currently being used. Deleting it ' @@ -186,18 +193,14 @@ class SourceView: _('_Delete Source'), ans.query_response,self.topWindow) else: - trans = self.parent.db.transaction_begin() - self.parent.db.remove_source(source.get_handle(),trans) - n = source.get_title() - self.parent.db.transaction_commit(trans,_("Delete Source (%s)") % n) - self.build_tree() + self.delete_source(source) def is_used(self,source): for key in self.parent.db.get_place_handles(): p = self.parent.db.get_place_from_handle(key) for sref in p.get_source_references(): if sref.get_base_handle() == source.get_handle(): - return 1 + return True for key in self.parent.db.get_person_handles(sort_handles=False): p = self.parent.db.get_person_from_handle(key) for v_id in p.get_event_list() + [p.get_birth_handle(), p.get_death_handle()]: @@ -205,24 +208,24 @@ class SourceView: if v: for sref in v.get_source_references(): if sref.get_base_handle() == source.get_handle(): - return 1 + return True for v in p.get_attribute_list(): for sref in v.get_source_references(): if sref.get_base_handle() == source.get_handle(): - return 1 + return True for v in p.get_alternate_names() + [p.get_primary_name()]: for sref in v.get_source_references(): if sref.get_base_handle() == source.get_handle(): - return 1 + return True for v in p.get_address_list(): for sref in v.get_source_references(): if sref.get_base_handle() == source.get_handle(): - return 1 + return True for p_id in self.parent.db.get_media_object_handles(): p = self.parent.db.get_object_from_handle(p_id) for sref in p.get_source_references(): if sref.get_base_handle() == source.get_handle(): - return 1 + return True for p_id in self.parent.db.get_family_handles(): p = self.parent.db.get_family_from_handle(p_id) for v_id in p.get_event_list(): @@ -230,25 +233,23 @@ class SourceView: if v: for sref in v.get_source_references(): if sref.get_base_handle() == source.get_handle(): - return 1 + return True for v in p.get_attribute_list(): for sref in v.get_source_references(): if sref.get_base_handle() == source.get_handle(): - return 1 - return 0 + return True + return False def on_edit_clicked(self,obj): list_store, node = self.selection.get_selected() if node: handle = list_store.get_value(node,_HANDLE_COL) - print handle source = self.parent.db.get_source_from_handle(handle) EditSource.EditSource(source, self.parent.db, self.parent, self.topWindow, self.update_display) def new_after_edit(self,source): - self.parent.db.add_source(source) self.build_tree() - def update_display(self,place): - self.build_tree() + def update_display(self,source): + self.model.update_row_by_handle(source.get_handle())