diff --git a/ChangeLog b/ChangeLog index 834d43bb5..7719b220d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2006-12-02 Don Allingham + * src/DataViews/_RelationView.py: disable buttons when person is inactive + * src/plugins/Check.py: remove duplicate children in a family + 2006-12-02 Alex Roitman * src/Filters/SideBar/*SidebarFilter.py: Busy cursor when filtering. * src/plugins/Check.py (check_repo_references): Add new check. diff --git a/src/DataViews/_RelationView.py b/src/DataViews/_RelationView.py index 1a4c56930..c659b2338 100644 --- a/src/DataViews/_RelationView.py +++ b/src/DataViews/_RelationView.py @@ -336,6 +336,8 @@ class RelationshipView(PageView.PersonNavView): if self.child: for old_child in self.vbox.get_children(): self.vbox.remove(old_child) + for old_child in self.header.get_children(): + self.header.remove(old_child) self.child = None self.dbstate.db.connect('family-update', self.redraw) self.dbstate.db.connect('family-add', self.redraw) @@ -373,11 +375,16 @@ class RelationshipView(PageView.PersonNavView): for old_child in self.vbox.get_children(): self.vbox.remove(old_child) + for old_child in self.header.get_children(): + self.header.remove(old_child) person = self.dbstate.db.get_person_from_handle(obj) if not person: + self.family_action.set_sensitive(False) + self.order_action.set_sensitive(False) self.redrawing = False return + self.family_action.set_sensitive(True) self.write_title(person) diff --git a/src/plugins/Check.py b/src/plugins/Check.py index d254c4a09..e5e7843a1 100644 --- a/src/plugins/Check.py +++ b/src/plugins/Check.py @@ -29,7 +29,11 @@ #------------------------------------------------------------------------- import os import cStringIO -import sets +try: + set() +except: + from sets import Set as set + from gettext import gettext as _ #------------------------------------------------------------------------ @@ -98,7 +102,7 @@ def _table_low_level(db,table): Low level repair for a given db table. """ handle_list = table.keys() - dup_handles = sets.Set( + dup_handles = set( [ handle for handle in handle_list if handle_list.count(handle) > 1 ] ) @@ -290,7 +294,7 @@ class CheckIntegrity: value = self.db.person_map[handle] p = RelLib.Person(value) splist = p.get_family_handle_list() - if len(splist) != len(sets.Set(splist)): + if len(splist) != len(set(splist)): new_list = [] for value in splist: if value not in new_list: @@ -388,11 +392,34 @@ class CheckIntegrity: family.remove_child_ref(child_ref) self.db.commit_family(family,self.trans) self.broken_links.append((child_handle,family_handle)) + + new_ref_list = [] + new_ref_handles = [] + replace = False + for child_ref in family.get_child_ref_list(): + child_handle = child_ref.ref + if child_handle in new_ref_handles: + replace = True + else: + new_ref_list.append(child_ref) + new_ref_handles.append(child_handle) + + if replace: + family.set_child_ref_list(new_ref_list) + self.db.commit_family(family,self.trans) + self.progress.step() # Check persons membership in referenced families for person_handle in self.db.get_person_handles(): person = self.db.get_person_from_handle(person_handle) + + phandle_list = person.get_parent_family_handle_list() + new_list = list(set(phandle_list)) + if len(phandle_list) != len(new_list): + person.set_parent_family_handle_list(new_list) + self.db.commit_person(person,self.trans) + for par_family_handle in person.get_parent_family_handle_list(): family = self.db.get_family_from_handle(par_family_handle) if not family: