diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 879ee9f84..7ff4ecb59 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,4 +1,6 @@ 2005-06-19 Don Allingham + * src/AddSpouse.py: display idle cursor + * src/SelectChild.py: display idle cursor * src/ChooseParents.y: display "Loading..." while loading lists 2005-06-18 Don Allingham diff --git a/gramps2/src/AddSpouse.py b/gramps2/src/AddSpouse.py index 1356bd7b6..8df5079ca 100644 --- a/gramps2/src/AddSpouse.py +++ b/gramps2/src/AddSpouse.py @@ -42,6 +42,7 @@ from gettext import gettext as _ #------------------------------------------------------------------------- import gtk.glade import gnome +import gobject #------------------------------------------------------------------------- # @@ -102,8 +103,6 @@ class AddSpouse: self.renderer = gtk.CellRendererText() - self.slist = PeopleModel.PeopleModel(self.db,self.filter) - self.spouse_list.set_model(self.slist) self.selection = self.spouse_list.get_selection() self.selection.connect('changed',self.select_row) self.add_columns(self.spouse_list) @@ -118,7 +117,7 @@ class AddSpouse: Utils.set_titles(self.window, self.glade.get_widget('title'),title, _('Choose Spouse/Partner')) - + self.glade.signal_autoconnect({ "on_select_spouse_clicked" : self.select_spouse_clicked, "on_spouse_help_clicked" : self.on_spouse_help_clicked, @@ -128,12 +127,11 @@ class AddSpouse: }) self.rel_combo.set_active(RelLib.Family.MARRIED) - self.update_data() + self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + gobject.idle_add(self.update_data) def build_all(self): - filt = GenericFilter.GenericFilter() - filt.add_rule(GenericFilter.Everyone([])) - return filt + return None def build_likely(self,gender): birth_handle = self.person.get_birth_handle() @@ -225,7 +223,7 @@ class AddSpouse: been closed. """ person = epo.person - self.update_data(person.get_handle()) + self.update_data() self.slist = PeopleModel.PeopleModel(self.db,self.filter) self.slist.rebuild_data() @@ -319,7 +317,7 @@ class AddSpouse: m.on_add_clicked() def relation_type_changed(self,obj): - self.update_data() + gobject.idle_add(self.update_data) def all_filter(self, person): return person.get_gender() != self.sgender @@ -384,18 +382,21 @@ class AddSpouse: else: self.sgender = RelLib.Person.FEMALE - def update_data(self,person = None): + def update_data(self): """ Called whenever the relationship type changes. Rebuilds the the potential spouse list. """ - + self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + while(gtk.events_pending()): + gtk.main_iteration() self.slist = PeopleModel.PeopleModel(self.db,self.filter) self.spouse_list.set_model(self.slist) + self.window.window.set_cursor(None) def on_show_toggled(self,obj): if self.filter == self.likely: self.filter = self.all else: self.filter = self.likely - self.update_data() + gobject.idle_add(self.update_data) diff --git a/gramps2/src/ChooseParents.py b/gramps2/src/ChooseParents.py index 4deb2f68e..b828c719d 100644 --- a/gramps2/src/ChooseParents.py +++ b/gramps2/src/ChooseParents.py @@ -94,7 +94,7 @@ class ChooseParents: db.connect('person-add', self.person_added) db.connect('person-update', self.redraw) db.connect('person-delete', self.redraw) - db.connect('person-rebuild', self.redraw) + db.connect('person-rebuild', self.redraw_all) # set default filters self.all_males_filter = GenericFilter.GenericFilter() @@ -353,6 +353,10 @@ class ChooseParents: self.redrawf() self.redrawm() + def redraw_all(self): + self.redrawf() + self.redrawm() + def redrawf(self): """Redraws the potential father list""" self.father_model = PeopleModel.PeopleModel(self.db,self.father_filter) diff --git a/gramps2/src/SelectChild.py b/gramps2/src/SelectChild.py index 18d201f41..ed7ac6fc1 100644 --- a/gramps2/src/SelectChild.py +++ b/gramps2/src/SelectChild.py @@ -35,6 +35,7 @@ from gettext import gettext as _ #------------------------------------------------------------------------- import gtk.glade import gnome +import gobject #------------------------------------------------------------------------- # @@ -46,6 +47,8 @@ import const import Utils import PeopleModel import NameDisplay +import GenericFilter +import Date from QuestionDialog import ErrorDialog @@ -101,10 +104,12 @@ class SelectChild: else: self.frel.set_sensitive(False) - self.refmodel = PeopleModel.PeopleModel(self.db) + self.likely_filter = GenericFilter.GenericFilter() + self.likely_filter.add_rule(LikelyFilter([self.person.handle])) + self.active_filter = self.likely_filter - self.add_child.set_model(self.refmodel) - self.redraw_child_list(2) + self.top.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + gobject.idle_add(self.redraw_child_list) self.add_itself_to_menu() self.add_columns(self.add_child) self.top.show() @@ -161,110 +166,10 @@ class SelectChild: """Display the relevant portion of GRAMPS manual""" gnome.help_display('gramps-manual','gramps-edit-quick') - def redraw_child_list(self,filter): - return - - birth = self.db.get_event_from_handle(self.person.get_birth_handle()) - death = self.db.get_event_from_handle(self.person.get_death_handle()) - if birth: - bday = birth.get_date_object() - else: - bday = None - if death: - dday = death.get_date_object() - else: - dday = None - - slist = {} - for f in self.person.get_parent_family_handle_list(): - if f: - family = self.db.get_family_from_handle(f[0]) - if family.get_father_handle(): - slist[family.get_father_handle()] = 1 - elif family.get_mother_handle(): - slist[family.get_mother_handle()] = 1 - for c in family.get_child_handle_list(): - slist[c] = 1 - - person_list = [] - for key in self.db.get_person_handles(sort_handles=True): - person = self.db.get_person_from_handle(key) - if filter: - if slist.has_key(key) or person.get_main_parents_family_handle(): - continue - - birth_event = self.db.get_event_from_handle(person.get_birth_handle()) - if birth_event: - pbday = birth_event.get_date_object() - else: - pbday = None - - death_event = self.db.get_event_from_handle(person.get_death_handle()) - if death_event: - pdday = death_event.get_date_object() - else: - pdday = None - - if bday and bday.getYearValid(): - if pbday and pbday.getYearValid(): - # reject if child birthdate < parents birthdate + 10 - if pbday.getLowYear() < bday.getHighYear()+10: - continue - - # reject if child birthdate > parents birthdate + 90 - if pbday.getLowYear() > bday.getHighYear()+90: - continue - - if pdday and pdday.getYearValid(): - # reject if child deathdate < parents birthdate+ 10 - if pdday.getLowYear() < bday.getHighYear()+10: - continue - - if dday and dday.getYearValid(): - if pbday and pbday.getYearValid(): - # reject if childs birth date > parents deathday + 3 - if pbday.getLowYear() > dday.getHighYear()+3: - continue - - if pdday and pdday.getYearValid(): - # reject if childs death date > parents deathday + 150 - if pdday.getLowYear() > dday.getHighYear() + 150: - continue - - person_list.append(person.get_handle()) - - node = None - for idval in person_list: - person = self.db.get_person_from_handle(idval) - name = NameDisplay.displayer.display(person) - if person.gender == RelLib.Person.MALE: - gender = _("male") - elif person.gender == RelLib.Person.FEMALE: - gender = _("female") - else: - gender = _("unknown") - - bh = person.get_birth_handle() - dh = person.get_death_handle() - if bh: - bdate = self.db.get_event_from_handle(bh).get_date() - else: - bdate = "" - if dh: - ddate = self.db.get_event_from_handle(bh).get_date() - else: - ddate = "" - - rdata = [name,person.get_gramps_id(),gender,bdate,ddate] - node = self.refmodel.add(rdata) - - self.refmodel.connect_model() - - if node: - self.refmodel.selection.select_iter(node) - path = self.refmodel.model.get_path(node) - col = self.add_child.get_column(0) - self.add_child.scroll_to_cell(path,col,1,0.5,0.0) + def redraw_child_list(self): + self.refmodel = PeopleModel.PeopleModel(self.db,self.active_filter) + self.add_child.set_model(self.refmodel) + self.top.window.set_cursor(None) def select_function(self,store,path,node,id_list): id_list.append(self.refmodel.get_value(node,PeopleModel.COLUMN_INT_ID)) @@ -334,7 +239,14 @@ class SelectChild: self.callback() def on_show_toggled(self,obj): - self.redraw_child_list(not obj.get_active()) + if obj.get_active(): + self.active_filter = None + else: + self.active_filter = self.likely_filter + self.top.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + while(gtk.events_pending()): + gtk.main_iteration() + self.redraw_child_list() def north_american(self,val): if self.person.get_gender() == RelLib.Person.MALE: @@ -382,3 +294,31 @@ class SelectChild: return ("","%sdóttir" % fname) else: return ("","") + +#------------------------------------------------------------------------- +# +# Likely Filters +# +#------------------------------------------------------------------------- +class LikelyFilter(GenericFilter.Rule): + + category = _('General filters') + + def prepare(self,db): + person = db.get_person_from_handle(self.list[0]) + birth = db.get_event_from_handle(person.birth_handle) + dateobj = Date.Date(birth.date) + year = dateobj.get_year() + dateobj.set_year(year+10) + self.lower = dateobj.sortval + dateobj.set_year(year+70) + self.upper = dateobj.sortval + + def apply(self,db,handle): + person = db.get_person_from_handle(handle) + if not person.birth_handle: + return True + event = db.get_event_from_handle(person.birth_handle) + return (event.date == None or event.date.sortval == 0 or + self.lower < event.date.sortval < self.upper) +