Filtering fixes

svn: r4458
This commit is contained in:
Don Allingham
2005-05-02 21:50:15 +00:00
parent 08c1a4865b
commit 893168feb6
4 changed files with 105 additions and 65 deletions

View File

@@ -1,3 +1,8 @@
2005-05-02 <dona@gramps-project.org>
* src/AddSpouse.py: fix filtering of lists using GenericFilters
* src/ChooseParents.py: fix filtering of lists using GenericFilters
* src/GenericFilter.py: fix date comparison
2005-05-02 Martin Hawlisch <Martin.Hawlisch@gmx.de> 2005-05-02 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/gramps_main.py: Disable fast merge on a readonly db * src/gramps_main.py: Disable fast merge on a readonly db
* src/plugins/Check.py: Disable on readonly db * src/plugins/Check.py: Disable on readonly db

View File

@@ -53,8 +53,10 @@ import const
import Utils import Utils
import PeopleModel import PeopleModel
import Date import Date
import DateHandler
import Marriage import Marriage
import NameDisplay import NameDisplay
import GenericFilter
from QuestionDialog import ErrorDialog from QuestionDialog import ErrorDialog
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
@@ -81,25 +83,14 @@ class AddSpouse:
self.gender = self.person.get_gender() self.gender = self.person.get_gender()
self.active_family = family self.active_family = family
self.filter_func = self.likely_filter self.likely = self.build_likely(self.gender)
self.all = self.build_all()
self.filter = self.likely
# determine the gender of the people to be loaded into # determine the gender of the people to be loaded into
# the potential spouse list. If Partners is selected, use # the potential spouse list. If Partners is selected, use
# the same gender as the current person. # the same gender as the current person.
birth_handle = self.person.get_birth_handle()
death_handle = self.person.get_death_handle()
if birth_handle:
self.bday = self.db.get_event_from_handle(birth_handle).get_date_object()
else:
self.bday = Date.Date()
if death_handle:
self.dday = self.db.get_event_from_handle(death_handle).get_date_object()
else:
self.dday = Date.Date()
self.glade = gtk.glade.XML(const.gladeFile, "spouseDialog","gramps") self.glade = gtk.glade.XML(const.gladeFile, "spouseDialog","gramps")
self.relation_def = self.glade.get_widget("reldef") self.relation_def = self.glade.get_widget("reldef")
@@ -111,7 +102,7 @@ class AddSpouse:
self.renderer = gtk.CellRendererText() self.renderer = gtk.CellRendererText()
self.slist = PeopleModel.PeopleModel(self.db) self.slist = PeopleModel.PeopleModel(self.db,self.filter)
self.spouse_list.set_model(self.slist) self.spouse_list.set_model(self.slist)
self.selection = self.spouse_list.get_selection() self.selection = self.spouse_list.get_selection()
self.selection.connect('changed',self.select_row) self.selection.connect('changed',self.select_row)
@@ -127,7 +118,6 @@ class AddSpouse:
self.glade.get_widget('title'),title, self.glade.get_widget('title'),title,
_('Choose Spouse/Partner')) _('Choose Spouse/Partner'))
self.glade.signal_autoconnect({ self.glade.signal_autoconnect({
"on_select_spouse_clicked" : self.select_spouse_clicked, "on_select_spouse_clicked" : self.select_spouse_clicked,
"on_spouse_help_clicked" : self.on_spouse_help_clicked, "on_spouse_help_clicked" : self.on_spouse_help_clicked,
@@ -139,6 +129,33 @@ class AddSpouse:
self.rel_combo.set_active(RelLib.Family.MARRIED) self.rel_combo.set_active(RelLib.Family.MARRIED)
self.update_data() self.update_data()
def build_all(self):
filt = GenericFilter.GenericFilter()
filt.add_rule(GenericFilter.Everyone([]))
return filt
def build_likely(self,gender):
birth_handle = self.person.get_birth_handle()
death_handle = self.person.get_death_handle()
filt = GenericFilter.GenericFilter()
if gender == RelLib.Person.MALE:
filt.add_rule(GenericFilter.IsFemale([]))
else:
filt.add_rule(GenericFilter.IsMale([]))
if birth_handle:
birth = self.db.get_event_from_handle(birth_handle)
date_obj = Date.Date(birth.get_date_object())
year = date_obj.get_year()
if year:
date_obj.set_year(year-50)
date_obj.set_modifier(Date.MOD_AFTER)
text = DateHandler.displayer.display(date_obj)
rule = GenericFilter.HasBirth([text,"",""])
filt.add_rule(rule)
return filt
def add_columns(self,tree): def add_columns(self,tree):
column = gtk.TreeViewColumn(_('Name'), self.renderer,text=0) column = gtk.TreeViewColumn(_('Name'), self.renderer,text=0)
column.set_resizable(True) column.set_resizable(True)
@@ -209,7 +226,7 @@ class AddSpouse:
person = epo.person person = epo.person
self.update_data(person.get_handle()) self.update_data(person.get_handle())
self.slist = PeopleModel.PeopleModel(self.db) self.slist = PeopleModel.PeopleModel(self.db,self.filter)
self.slist.rebuild_data() self.slist.rebuild_data()
self.spouse_list.set_model(self.slist) self.spouse_list.set_model(self.slist)
@@ -295,7 +312,6 @@ class AddSpouse:
return person.get_gender() != self.sgender return person.get_gender() != self.sgender
def likely_filter(self, person): def likely_filter(self, person):
print self.sgender
if person.get_gender() == self.sgender: if person.get_gender() == self.sgender:
return False return False
@@ -361,12 +377,12 @@ class AddSpouse:
the potential spouse list. the potential spouse list.
""" """
self.slist = PeopleModel.PeopleModel(self.db) self.slist = PeopleModel.PeopleModel(self.db,self.filter)
self.spouse_list.set_model(self.slist) self.spouse_list.set_model(self.slist)
def on_show_toggled(self,obj): def on_show_toggled(self,obj):
if self.filter_func == self.likely_filter: if self.filter == self.likely:
self.filter_func = self.all_filter self.filter = self.all
else: else:
self.filter_func = self.likely_filter self.filter = self.likely
self.update_data() self.update_data()

View File

@@ -53,7 +53,9 @@ import RelLib
import const import const
import Utils import Utils
import PeopleModel import PeopleModel
import Date
import NameDisplay import NameDisplay
import DateHandler
import GenericFilter import GenericFilter
from QuestionDialog import ErrorDialog from QuestionDialog import ErrorDialog
@@ -89,25 +91,16 @@ class ChooseParents:
self.renderer = gtk.CellRendererText() self.renderer = gtk.CellRendererText()
# set default filters # set default filters
self.father_filter = GenericFilter.GenericFilter() self.all_males_filter = GenericFilter.GenericFilter()
self.father_filter.add_rule(GenericFilter.IsMale([])) self.all_males_filter.add_rule(GenericFilter.IsMale([]))
self.likely_males_filter = self.build_likely(True)
self.mother_filter = GenericFilter.GenericFilter() self.all_females_filter = GenericFilter.GenericFilter()
self.mother_filter.add_rule(GenericFilter.IsFemale([])) self.all_females_filter.add_rule(GenericFilter.IsFemale([]))
self.likely_females_filter = self.build_likely(False)
bhandle = self.person.get_birth_handle() self.father_filter = self.likely_males_filter
birth_event = self.db.get_event_from_handle(bhandle) self.mother_filter = self.likely_females_filter
if birth_event:
self.bday = birth_event.get_date_object()
else:
self.bday = None
dhandle = self.person.get_death_handle()
death_event = self.db.get_event_from_handle(dhandle)
if death_event:
self.dday = death_event.get_date_object()
else:
self.dday = None
if self.family: if self.family:
self.father = self.family.get_father_handle() self.father = self.family.get_father_handle()
@@ -161,11 +154,13 @@ class ChooseParents:
self.redrawm() self.redrawm()
self.glade.signal_autoconnect({ self.glade.signal_autoconnect({
"on_add_parent_clicked" : self.add_parent_clicked, "on_add_parent_clicked" : self.add_parent_clicked,
"on_prel_changed" : self.parent_relation_changed, "on_prel_changed" : self.parent_relation_changed,
"destroy_passed_object" : self.close, "destroy_passed_object" : self.close,
"on_save_parents_clicked" : self.save_parents_clicked, "on_showallf_toggled" : self.showallf_toggled,
"on_help_familyDialog_clicked" : self.on_help_clicked, "on_showallm_toggled" : self.showallm_toggled,
"on_save_parents_clicked" : self.save_parents_clicked,
"on_help_familyDialog_clicked" : self.on_help_clicked,
"on_familyDialog_delete_event" : self.on_delete_event, "on_familyDialog_delete_event" : self.on_delete_event,
}) })
@@ -175,6 +170,34 @@ class ChooseParents:
self.window.show() self.window.show()
def build_likely(self,is_male):
birth_handle = self.person.get_birth_handle()
filt = GenericFilter.GenericFilter()
if is_male:
filt.add_rule(GenericFilter.IsMale([]))
else:
filt.add_rule(GenericFilter.IsFemale([]))
if birth_handle:
birth = self.db.get_event_from_handle(birth_handle)
date_obj = Date.Date(birth.get_date_object())
year = date_obj.get_year()
if year:
date_obj.set_year(year-10)
date_obj.set_modifier(Date.MOD_BEFORE)
rule = GenericFilter.HasBirth(
[DateHandler.displayer.display(date_obj),"",""])
filt.add_rule(rule)
date_obj = Date.Date(birth.get_date_object())
date_obj.set_year(year-60)
date_obj.set_modifier(Date.MOD_AFTER)
rule = GenericFilter.HasBirth(
[DateHandler.displayer.display(date_obj),"",""])
filt.add_rule(rule)
return filt
def build_list(self,opt_menu,sel): def build_list(self,opt_menu,sel):
cell = gtk.CellRendererText() cell = gtk.CellRendererText()
opt_menu.pack_start(cell,True) opt_menu.pack_start(cell,True)
@@ -255,12 +278,6 @@ class ChooseParents:
"""Display the relevant portion of GRAMPS manual""" """Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-quick') gnome.help_display('gramps-manual','gramps-edit-quick')
def all_males_filter(self,person):
return (person.get_gender() == RelLib.Person.MALE)
def all_females_filter(self,person):
return (person.get_gender() == RelLib.Person.FEMALE)
def redrawf(self): def redrawf(self):
"""Redraws the potential father list""" """Redraws the potential father list"""
self.father_model = PeopleModel.PeopleModel(self.db,self.father_filter) self.father_model = PeopleModel.PeopleModel(self.db,self.father_filter)
@@ -291,17 +308,17 @@ class ChooseParents:
self.redrawm() self.redrawm()
def showallf_toggled(self,obj): def showallf_toggled(self,obj):
if self.father_filter == self.likely_father_filter: if self.father_filter == self.likely_males_filter:
self.father_filter = self.all_males_filter self.father_filter = self.all_females_filter
else: else:
self.father_filter = self.likely_father_filter self.father_filter = self.likely_males_filter
self.redrawf() self.redrawf()
def showallm_toggled(self,obj): def showallm_toggled(self,obj):
if self.mother_filter == self.likely_mother_filter: if self.mother_filter == self.likely_females_filter:
self.mother_filter = self.all_females_filter self.mother_filter = self.all_females_filter
else: else:
self.mother_filter = self.likely_mother_filter self.mother_filter = self.likely_females_filter
self.redrawm() self.redrawm()
def find_family(self,father_handle,mother_handle,trans): def find_family(self,father_handle,mother_handle,trans):

View File

@@ -66,14 +66,16 @@ from Utils import for_each_ancestor,probably_alive,get_source_referents
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def date_cmp(rule,value): def date_cmp(rule,value):
sd = rule.get_start_date() sd = rule.get_start_date()
s = sd.get_modifier() s = rule.get_modifier()
value = s.get_start_date() od = value.get_start_date()
cmp_rule = (sd[2],sd[1],sd[0])
cmp_value = (od[2],od[1],od[0])
if s == Date.MOD_BEFORE: if s == Date.MOD_BEFORE:
return rule > value return cmp_rule > cmp_value
elif s == Date.MOD_AFTER: elif s == Date.MOD_AFTER:
return rule < value return cmp_rule < cmp_value
else: else:
return rule == value return cmp_rule == cmp_value
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@@ -1243,21 +1245,21 @@ class HasBirth(Rule):
p = db.get_person_from_handle(p_id) p = db.get_person_from_handle(p_id)
event_handle = p.get_birth_handle() event_handle = p.get_birth_handle()
if not event_handle: if not event_handle:
return 0 return False
event = db.get_event_from_handle(event_handle) event = db.get_event_from_handle(event_handle)
ed = event.get_description().upper() ed = event.get_description().upper()
if len(self.list) > 2 and ed.find(self.list[2].upper())==-1: if len(self.list) > 2 and ed.find(self.list[2].upper())==-1:
return 0 return False
if self.date: if self.date:
if date_cmp(self.date,event.get_date_object()) == 0: if date_cmp(self.date,event.get_date_object()) == 0:
return 0 return False
pl_id = event.get_place_handle() pl_id = event.get_place_handle()
if pl_id: if pl_id:
pl = db.get_place_from_handle(pl_id) pl = db.get_place_from_handle(pl_id)
pn = pl.get_title() pn = pl.get_title()
if len(self.list) > 1 and pn.find(self.list[1].upper()) == -1: if len(self.list) > 1 and pn.find(self.list[1].upper()) == -1:
return 0 return False
return 1 return True
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #