Filtering fixes
svn: r4458
This commit is contained in:
		@@ -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>
 | 
			
		||||
	* src/gramps_main.py: Disable fast merge on a readonly db
 | 
			
		||||
	* src/plugins/Check.py: Disable on readonly db
 | 
			
		||||
 
 | 
			
		||||
@@ -53,8 +53,10 @@ import const
 | 
			
		||||
import Utils
 | 
			
		||||
import PeopleModel
 | 
			
		||||
import Date
 | 
			
		||||
import DateHandler
 | 
			
		||||
import Marriage
 | 
			
		||||
import NameDisplay
 | 
			
		||||
import GenericFilter
 | 
			
		||||
from QuestionDialog import ErrorDialog
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
@@ -81,25 +83,14 @@ class AddSpouse:
 | 
			
		||||
        self.gender = self.person.get_gender()
 | 
			
		||||
        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
 | 
			
		||||
        # the potential spouse list. If Partners is selected, use
 | 
			
		||||
        # 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.relation_def = self.glade.get_widget("reldef")
 | 
			
		||||
@@ -111,7 +102,7 @@ class AddSpouse:
 | 
			
		||||
 | 
			
		||||
        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.selection = self.spouse_list.get_selection()
 | 
			
		||||
        self.selection.connect('changed',self.select_row)
 | 
			
		||||
@@ -127,7 +118,6 @@ class AddSpouse:
 | 
			
		||||
                         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,
 | 
			
		||||
@@ -138,7 +128,34 @@ class AddSpouse:
 | 
			
		||||
 | 
			
		||||
        self.rel_combo.set_active(RelLib.Family.MARRIED)
 | 
			
		||||
        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):
 | 
			
		||||
        column = gtk.TreeViewColumn(_('Name'), self.renderer,text=0)
 | 
			
		||||
        column.set_resizable(True)        
 | 
			
		||||
@@ -209,7 +226,7 @@ class AddSpouse:
 | 
			
		||||
        person = epo.person
 | 
			
		||||
        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.spouse_list.set_model(self.slist)
 | 
			
		||||
        
 | 
			
		||||
@@ -295,7 +312,6 @@ class AddSpouse:
 | 
			
		||||
        return person.get_gender() != self.sgender
 | 
			
		||||
 | 
			
		||||
    def likely_filter(self, person):
 | 
			
		||||
        print self.sgender
 | 
			
		||||
        if person.get_gender() == self.sgender:
 | 
			
		||||
            return False
 | 
			
		||||
 | 
			
		||||
@@ -361,12 +377,12 @@ class AddSpouse:
 | 
			
		||||
        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)
 | 
			
		||||
 | 
			
		||||
    def on_show_toggled(self,obj):
 | 
			
		||||
        if self.filter_func == self.likely_filter:
 | 
			
		||||
            self.filter_func = self.all_filter
 | 
			
		||||
        if self.filter == self.likely:
 | 
			
		||||
            self.filter = self.all
 | 
			
		||||
        else:
 | 
			
		||||
            self.filter_func = self.likely_filter
 | 
			
		||||
            self.filter = self.likely
 | 
			
		||||
        self.update_data()
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,9 @@ import RelLib
 | 
			
		||||
import const
 | 
			
		||||
import Utils
 | 
			
		||||
import PeopleModel
 | 
			
		||||
import Date
 | 
			
		||||
import NameDisplay
 | 
			
		||||
import DateHandler
 | 
			
		||||
import GenericFilter
 | 
			
		||||
from QuestionDialog import ErrorDialog
 | 
			
		||||
 | 
			
		||||
@@ -89,25 +91,16 @@ class ChooseParents:
 | 
			
		||||
        self.renderer = gtk.CellRendererText()
 | 
			
		||||
 | 
			
		||||
        # set default filters
 | 
			
		||||
        self.father_filter = GenericFilter.GenericFilter()
 | 
			
		||||
        self.father_filter.add_rule(GenericFilter.IsMale([]))
 | 
			
		||||
        self.all_males_filter = GenericFilter.GenericFilter()
 | 
			
		||||
        self.all_males_filter.add_rule(GenericFilter.IsMale([]))
 | 
			
		||||
        self.likely_males_filter = self.build_likely(True)
 | 
			
		||||
 | 
			
		||||
        self.mother_filter = GenericFilter.GenericFilter()
 | 
			
		||||
        self.mother_filter.add_rule(GenericFilter.IsFemale([]))
 | 
			
		||||
        self.all_females_filter = GenericFilter.GenericFilter()
 | 
			
		||||
        self.all_females_filter.add_rule(GenericFilter.IsFemale([]))
 | 
			
		||||
        self.likely_females_filter = self.build_likely(False)
 | 
			
		||||
 | 
			
		||||
        bhandle = self.person.get_birth_handle()
 | 
			
		||||
        birth_event = self.db.get_event_from_handle(bhandle)
 | 
			
		||||
        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
 | 
			
		||||
        self.father_filter = self.likely_males_filter
 | 
			
		||||
        self.mother_filter = self.likely_females_filter
 | 
			
		||||
 | 
			
		||||
        if self.family:
 | 
			
		||||
            self.father = self.family.get_father_handle()
 | 
			
		||||
@@ -161,11 +154,13 @@ class ChooseParents:
 | 
			
		||||
        self.redrawm()
 | 
			
		||||
        
 | 
			
		||||
        self.glade.signal_autoconnect({
 | 
			
		||||
            "on_add_parent_clicked"    : self.add_parent_clicked,
 | 
			
		||||
            "on_prel_changed"          : self.parent_relation_changed,
 | 
			
		||||
            "destroy_passed_object"    : self.close,
 | 
			
		||||
            "on_save_parents_clicked"   : self.save_parents_clicked,
 | 
			
		||||
            "on_help_familyDialog_clicked"  : self.on_help_clicked,
 | 
			
		||||
            "on_add_parent_clicked"        : self.add_parent_clicked,
 | 
			
		||||
            "on_prel_changed"              : self.parent_relation_changed,
 | 
			
		||||
            "destroy_passed_object"        : self.close,
 | 
			
		||||
            "on_showallf_toggled"          : self.showallf_toggled,
 | 
			
		||||
            "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,
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
@@ -175,6 +170,34 @@ class ChooseParents:
 | 
			
		||||
        
 | 
			
		||||
        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):
 | 
			
		||||
        cell = gtk.CellRendererText()
 | 
			
		||||
        opt_menu.pack_start(cell,True)
 | 
			
		||||
@@ -255,12 +278,6 @@ class ChooseParents:
 | 
			
		||||
        """Display the relevant portion of GRAMPS manual"""
 | 
			
		||||
        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):
 | 
			
		||||
        """Redraws the potential father list"""
 | 
			
		||||
        self.father_model = PeopleModel.PeopleModel(self.db,self.father_filter)
 | 
			
		||||
@@ -291,17 +308,17 @@ class ChooseParents:
 | 
			
		||||
            self.redrawm()
 | 
			
		||||
 | 
			
		||||
    def showallf_toggled(self,obj):
 | 
			
		||||
        if self.father_filter == self.likely_father_filter:
 | 
			
		||||
            self.father_filter = self.all_males_filter
 | 
			
		||||
        if self.father_filter == self.likely_males_filter:
 | 
			
		||||
            self.father_filter = self.all_females_filter
 | 
			
		||||
        else:
 | 
			
		||||
            self.father_filter = self.likely_father_filter
 | 
			
		||||
            self.father_filter = self.likely_males_filter
 | 
			
		||||
        self.redrawf()
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        else:
 | 
			
		||||
            self.mother_filter = self.likely_mother_filter
 | 
			
		||||
            self.mother_filter = self.likely_females_filter
 | 
			
		||||
        self.redrawm()
 | 
			
		||||
        
 | 
			
		||||
    def find_family(self,father_handle,mother_handle,trans):
 | 
			
		||||
 
 | 
			
		||||
@@ -66,14 +66,16 @@ from Utils import for_each_ancestor,probably_alive,get_source_referents
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
def date_cmp(rule,value):
 | 
			
		||||
    sd = rule.get_start_date()
 | 
			
		||||
    s = sd.get_modifier()
 | 
			
		||||
    value = s.get_start_date()
 | 
			
		||||
    s = rule.get_modifier()
 | 
			
		||||
    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:
 | 
			
		||||
        return rule > value
 | 
			
		||||
        return  cmp_rule > cmp_value
 | 
			
		||||
    elif s == Date.MOD_AFTER:
 | 
			
		||||
        return rule < value
 | 
			
		||||
        return cmp_rule < cmp_value
 | 
			
		||||
    else:
 | 
			
		||||
        return rule == value
 | 
			
		||||
        return cmp_rule == cmp_value
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
@@ -1243,21 +1245,21 @@ class HasBirth(Rule):
 | 
			
		||||
        p = db.get_person_from_handle(p_id)
 | 
			
		||||
        event_handle = p.get_birth_handle()
 | 
			
		||||
        if not event_handle:
 | 
			
		||||
            return 0
 | 
			
		||||
            return False
 | 
			
		||||
        event = db.get_event_from_handle(event_handle)
 | 
			
		||||
        ed = event.get_description().upper()
 | 
			
		||||
        if len(self.list) > 2 and ed.find(self.list[2].upper())==-1:
 | 
			
		||||
            return 0
 | 
			
		||||
            return False
 | 
			
		||||
        if self.date:
 | 
			
		||||
            if date_cmp(self.date,event.get_date_object()) == 0:
 | 
			
		||||
                return 0
 | 
			
		||||
                return False
 | 
			
		||||
        pl_id = event.get_place_handle()
 | 
			
		||||
        if pl_id:
 | 
			
		||||
            pl = db.get_place_from_handle(pl_id)
 | 
			
		||||
            pn = pl.get_title()
 | 
			
		||||
            if len(self.list) > 1 and pn.find(self.list[1].upper()) == -1:
 | 
			
		||||
                return 0
 | 
			
		||||
        return 1
 | 
			
		||||
                return False
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user