* src/Filters/Rules/*: Add object-specific rules.

svn: r6529
This commit is contained in:
Alex Roitman 2006-05-03 06:29:07 +00:00
parent 2b5ee009d0
commit e5dffce271
94 changed files with 1085 additions and 550 deletions

View File

@ -3,6 +3,8 @@
* data/gramps.schemas.in: add family-warn back in * data/gramps.schemas.in: add family-warn back in
2006-05-02 Alex Roitman <shura@gramps-project.org> 2006-05-02 Alex Roitman <shura@gramps-project.org>
* src/Filters/Rules/*: Add object-specific rules.
* src/GrampsWidgets.py (IconButton): Replace event box with button. * src/GrampsWidgets.py (IconButton): Replace event box with button.
* src/GrampsWidgets.py (WarnButton): Replace event box with button. * src/GrampsWidgets.py (WarnButton): Replace event box with button.

View File

@ -348,29 +348,29 @@ class PersonView(PageView.PersonNavView):
Builds the default filters and add them to the filter menu. Builds the default filters and add them to the filter menu.
""" """
default_filters = [ default_filters = [
[Rules.Everyone, []], [Rules.Person.Everyone, []],
[Rules.IsFemale, []], [Rules.Person.IsFemale, []],
[Rules.IsMale, []], [Rules.Person.IsMale, []],
[Rules.HasUnknownGender, []], [Rules.Person.HasUnknownGender, []],
[Rules.Disconnected, []], [Rules.Person.Disconnected, []],
[Rules.SearchName, ['']], [Rules.Person.SearchName, ['']],
[Rules.HaveAltFamilies, []], [Rules.Person.HaveAltFamilies, []],
[Rules.HavePhotos, []], [Rules.Person.HavePhotos, []],
[Rules.IncompleteNames, []], [Rules.Person.IncompleteNames, []],
[Rules.HaveChildren, []], [Rules.Person.HaveChildren, []],
[Rules.NeverMarried, []], [Rules.Person.NeverMarried, []],
[Rules.MultipleMarriages, []], [Rules.Person.MultipleMarriages, []],
[Rules.NoBirthdate, []], [Rules.Person.NoBirthdate, []],
[Rules.PersonWithIncompleteEvent, []], [Rules.Person.PersonWithIncompleteEvent, []],
[Rules.FamilyWithIncompleteEvent, []], [Rules.Person.FamilyWithIncompleteEvent, []],
[Rules.ProbablyAlive, ['']], [Rules.Person.ProbablyAlive, ['']],
[Rules.PeoplePrivate, []], [Rules.Person.PeoplePrivate, []],
[Rules.IsWitness, ['','']], [Rules.Person.IsWitness, ['','']],
[Rules.HasTextMatchingSubstringOf, ['',0,0]], [Rules.Person.HasTextMatchingSubstringOf, ['',0,0]],
[Rules.HasTextMatchingRegexpOf, ['',0,1]], [Rules.Person.HasTextMatchingRegexpOf, ['',0,1]],
[Rules.HasNote, []], [Rules.Person.HasNote, []],
[Rules.HasNoteMatchingSubstringOf, ['']], [Rules.Person.HasNoteMatchingSubstringOf, ['']],
[Rules.IsFemale, []], [Rules.Person.IsFemale, []],
] ]
self.generic_filter_widget.setup_filter( default_filters, "person") self.generic_filter_widget.setup_filter( default_filters, "person")

View File

@ -0,0 +1,18 @@
# This is the src/Filters/Rules/Event level Makefile for Gramps
pkgdatadir = $(datadir)/@PACKAGE@/Filters/Rules/Event
pkgdata_PYTHON = \
__init__.py
pkgpyexecdir = @pkgpyexecdir@/Filters/Rules/Event
pkgpythondir = @pkgpythondir@/Filters/Rules/Event
# Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo
GRAMPS_PY_MODPATH = "../../../"
pycheck:
(export PYTHONPATH=$(GRAMPS_PY_MODPATH); \
pychecker $(pkgdata_PYTHON));

View File

@ -0,0 +1,27 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id: __init__.py 6521 2006-05-03 01:02:54Z rshura $
"""
Package providing filter rules for GRAMPS.
"""
__author__ = "Don Allingham"

View File

@ -0,0 +1,18 @@
# This is the src/Filters/Rules/Family level Makefile for Gramps
pkgdatadir = $(datadir)/@PACKAGE@/Filters/Rules/Family
pkgdata_PYTHON = \
__init__.py
pkgpyexecdir = @pkgpyexecdir@/Filters/Rules/Family
pkgpythondir = @pkgpythondir@/Filters/Rules/Family
# Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo
GRAMPS_PY_MODPATH = "../../../"
pycheck:
(export PYTHONPATH=$(GRAMPS_PY_MODPATH); \
pychecker $(pkgdata_PYTHON));

View File

@ -0,0 +1,27 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id: __init__.py 6521 2006-05-03 01:02:54Z rshura $
"""
Package providing filter rules for GRAMPS.
"""
__author__ = "Don Allingham"

View File

@ -1,64 +1,12 @@
# This is the src/Filters/Rules level Makefile for Gramps # This is the src/Filters/Rules level Makefile for Gramps
SUBDIRS = Person Family Event Place Source Media Repository
pkgdatadir = $(datadir)/@PACKAGE@/Filters/Rules pkgdatadir = $(datadir)/@PACKAGE@/Filters/Rules
pkgdata_PYTHON = \ pkgdata_PYTHON = \
_Disconnected.py \
_Everyone.py \
_FamilyWithIncompleteEvent.py \
_HasAttribute.py \
_HasBirth.py \
_HasCommonAncestorWith.py \
_HasCommonAncestorWithFilterMatch.py \
_HasCompleteRecord.py \
_HasDeath.py \
_HasEvent.py \
_HasFamilyAttribute.py \
_HasFamilyEvent.py \
_HasIdOf.py \
_HasNameOf.py \
_HasNote.py \
_HasNoteMatchingSubstringOf.py \
_HasRelationship.py \
_HasSourceOf.py \
_HasTextMatchingRegexpOf.py \
_HasTextMatchingSubstringOf.py \
_HasUnknownGender.py \
_HaveAltFamilies.py \
_HaveChildren.py \
_HavePhotos.py \
_IncompleteNames.py \
_IsAncestorOf.py \
_IsAncestorOfFilterMatch.py \
_IsBookmarked.py \
_IsChildOfFilterMatch.py \
_IsDefaultPerson.py \
_IsDescendantFamilyOf.py \
_IsDescendantOf.py \
_IsDescendantOfFilterMatch.py \
_IsFemale.py \
_IsLessThanNthGenerationAncestorOf.py \
_IsLessThanNthGenerationAncestorOfBookmarked.py \
_IsLessThanNthGenerationAncestorOfDefaultPerson.py \
_IsLessThanNthGenerationDescendantOf.py \
_IsMale.py \
_IsMoreThanNthGenerationAncestorOf.py \
_IsMoreThanNthGenerationDescendantOf.py \
_IsParentOfFilterMatch.py \
_IsSiblingOfFilterMatch.py \
_IsSpouseOfFilterMatch.py \
_IsWitness.py \
_MatchesFilter.py \
_MultipleMarriages.py \
_NeverMarried.py \
_NoBirthdate.py \
_PeoplePrivate.py \
_PersonWithIncompleteEvent.py \
_ProbablyAlive.py \
_RelationshipPathBetween.py \
_Rule.py \ _Rule.py \
_RuleUtils.py \ _RuleUtils.py \
_SearchName.py \
__init__.py __init__.py
pkgpyexecdir = @pkgpyexecdir@/Filters/Rules pkgpyexecdir = @pkgpyexecdir@/Filters/Rules
@ -67,7 +15,7 @@ pkgpythondir = @pkgpythondir@/Filters/Rules
# Clean up all the byte-compiled files # Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo MOSTLYCLEANFILES = *pyc *pyo
GRAMPS_PY_MODPATH = "../" GRAMPS_PY_MODPATH = "../../"
pycheck: pycheck:
(export PYTHONPATH=$(GRAMPS_PY_MODPATH); \ (export PYTHONPATH=$(GRAMPS_PY_MODPATH); \

View File

@ -0,0 +1,18 @@
# This is the src/Filters/Rules/Media level Makefile for Gramps
pkgdatadir = $(datadir)/@PACKAGE@/Filters/Rules/Media
pkgdata_PYTHON = \
__init__.py
pkgpyexecdir = @pkgpyexecdir@/Filters/Rules/Media
pkgpythondir = @pkgpythondir@/Filters/Rules/Media
# Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo
GRAMPS_PY_MODPATH = "../../../"
pycheck:
(export PYTHONPATH=$(GRAMPS_PY_MODPATH); \
pychecker $(pkgdata_PYTHON));

View File

@ -0,0 +1,27 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id: __init__.py 6521 2006-05-03 01:02:54Z rshura $
"""
Package providing filter rules for GRAMPS.
"""
__author__ = "Don Allingham"

View File

@ -0,0 +1,74 @@
# This is the src/Filters/Rules/Person level Makefile for Gramps
pkgdatadir = $(datadir)/@PACKAGE@/Filters/Rules/Person
pkgdata_PYTHON = \
_Disconnected.py \
_Everyone.py \
_FamilyWithIncompleteEvent.py \
_HasAttribute.py \
_HasBirth.py \
_HasCommonAncestorWith.py \
_HasCommonAncestorWithFilterMatch.py \
_HasCompleteRecord.py \
_HasDeath.py \
_HasEvent.py \
_HasFamilyAttribute.py \
_HasFamilyEvent.py \
_HasIdOf.py \
_HasNameOf.py \
_HasNote.py \
_HasNoteMatchingSubstringOf.py \
_HasRelationship.py \
_HasSourceOf.py \
_HasTextMatchingRegexpOf.py \
_HasTextMatchingSubstringOf.py \
_HasUnknownGender.py \
_HaveAltFamilies.py \
_HaveChildren.py \
_HavePhotos.py \
_IncompleteNames.py \
_IsAncestorOf.py \
_IsAncestorOfFilterMatch.py \
_IsBookmarked.py \
_IsChildOfFilterMatch.py \
_IsDefaultPerson.py \
_IsDescendantFamilyOf.py \
_IsDescendantOf.py \
_IsDescendantOfFilterMatch.py \
_IsFemale.py \
_IsLessThanNthGenerationAncestorOf.py \
_IsLessThanNthGenerationAncestorOfBookmarked.py \
_IsLessThanNthGenerationAncestorOfDefaultPerson.py \
_IsLessThanNthGenerationDescendantOf.py \
_IsMale.py \
_IsMoreThanNthGenerationAncestorOf.py \
_IsMoreThanNthGenerationDescendantOf.py \
_IsParentOfFilterMatch.py \
_IsSiblingOfFilterMatch.py \
_IsSpouseOfFilterMatch.py \
_IsWitness.py \
_MatchesFilter.py \
_MultipleMarriages.py \
_NeverMarried.py \
_NoBirthdate.py \
_PeoplePrivate.py \
_PersonWithIncompleteEvent.py \
_ProbablyAlive.py \
_RelationshipPathBetween.py \
_Rule.py \
_RuleUtils.py \
_SearchName.py \
__init__.py
pkgpyexecdir = @pkgpyexecdir@/Filters/Rules/Person
pkgpythondir = @pkgpythondir@/Filters/Rules/Person
# Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo
GRAMPS_PY_MODPATH = "../../../"
pycheck:
(export PYTHONPATH=$(GRAMPS_PY_MODPATH); \
pychecker $(pkgdata_PYTHON));

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "Families with incomplete events" # "Families with incomplete events"

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -33,8 +33,8 @@ from gettext import gettext as _
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import DateHandler import DateHandler
from _Rule import Rule from Filters.Rules._Rule import Rule
from _RuleUtils import date_cmp from Filters.Rules._RuleUtils import date_cmp
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -33,7 +33,7 @@ from gettext import gettext as _
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from Utils import for_each_ancestor from Utils import for_each_ancestor
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -33,8 +33,8 @@ from gettext import gettext as _
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import DateHandler import DateHandler
from _Rule import Rule from Filters.Rules._Rule import Rule
from _RuleUtils import date_cmp from Filters.Rules._RuleUtils import date_cmp
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -33,8 +33,8 @@ from gettext import gettext as _
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import DateHandler import DateHandler
from _Rule import Rule from Filters.Rules._Rule import Rule
from _RuleUtils import date_cmp from Filters.Rules._RuleUtils import date_cmp
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -33,8 +33,8 @@ from gettext import gettext as _
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import DateHandler import DateHandler
from _Rule import Rule from Filters.Rules._Rule import Rule
from _RuleUtils import date_cmp from Filters.Rules._RuleUtils import date_cmp
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "People having notes" # "People having notes"

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "People having notes that contain a substring" # "People having notes that contain a substring"

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -0,0 +1,56 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
#-------------------------------------------------------------------------
#
# Standard Python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
from _HasTextMatchingSubstringOf import HasTextMatchingSubstringOf
#-------------------------------------------------------------------------
# "HasTextMatchingRegexOf"
#-------------------------------------------------------------------------
class HasTextMatchingRegexpOf(HasTextMatchingSubstringOf):
"""This is wrapping HasTextMatchingSubstringOf to enable the regex_match parameter"""
def __init__(self,list):
HasTextMatchingSubstringOf.__init__(self,list)
def prepare(self,db):
self.db = db
self.person_map = {}
self.event_map = {}
self.source_map = {}
self.repo_map = {}
self.family_map = {}
self.place_map = {}
self.media_map = {}
self.case_sensitive = False
self.regexp_match = True
self.cache_sources()

View File

@ -0,0 +1,197 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
#-------------------------------------------------------------------------
#
# Standard Python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
from Utils import get_source_referents
from Filters.Rules._Rule import Rule
#-------------------------------------------------------------------------
# "HasTextMatchingSubstringOf"
#-------------------------------------------------------------------------
class HasTextMatchingSubstringOf(Rule):
"""Rule that checks for string matches in any textual information"""
labels = [ _('Substring:'),
_('Case sensitive:'),
_('Regular-Expression matching:')]
name = _('People with records containing <substring>')
description = _("Matches people whose records contain text "
"matching a substring")
category = _('General filters')
def prepare(self,db):
self.db = db
self.person_map = {}
self.event_map = {}
self.source_map = {}
self.repo_map = {}
self.family_map = {}
self.place_map = {}
self.media_map = {}
try:
if int(self.list[1]):
self.case_sensitive = True
else:
self.case_sensitive = False
except IndexError:
self.case_sensitive = False
try:
if int(self.list[2]):
self.regexp_match = True
else:
self.regexp_match = False
except IndexError:
self.regexp_match = False
self.cache_repos()
self.cache_sources()
def reset(self):
self.person_map = {}
self.event_map = {}
self.source_map = {}
self.repo_map = {}
self.family_map = {}
self.place_map = {}
self.media_map = {}
def apply(self,db,person):
if person.handle in self.person_map: # Cached by matching Source?
return self.person_map[person.handle]
if self.match_object(person): # first match the person itself
return True
for event_ref in person.get_event_ref_list()+[person.get_birth_ref(), person.get_death_ref()]:
if self.search_event(event_ref.ref): # match referenced events
return True
for family_handle in person.get_family_handle_list(): # match families
if self.search_family(family_handle):
return True
for media_ref in person.get_media_list(): # match Media object
if self.search_media(media_ref.get_reference_handle()):
return True
return False
def search_family(self,family_handle):
if not family_handle:
return False
# search inside the family and cache the result to not search a family twice
if not family_handle in self.family_map:
match = 0
family = self.db.get_family_from_handle(family_handle)
if self.match_object(family):
match = 1
else:
for event_ref in family.get_event_ref_list():
if self.search_event(event_ref.ref):
match = 1
break
for media_ref in family.get_media_list(): # match Media object
if self.search_media(media_ref.get_reference_handle()):
return True
self.family_map[family_handle] = match
return self.family_map[family_handle]
def search_event(self,event_handle):
if not event_handle:
return False
# search inside the event and cache the result (event sharing)
if not event_handle in self.event_map:
match = 0
event = self.db.get_event_from_handle(event_handle)
if self.match_object(event):
match = 1
elif event:
place_handle = event.get_place_handle()
if place_handle:
if self.search_place(place_handle):
match = 1
for media_ref in event.get_media_list(): # match Media object
if self.search_media(media_ref.get_reference_handle()):
return True
self.event_map[event_handle] = match
return self.event_map[event_handle]
def search_place(self,place_handle):
if not place_handle:
return False
# search inside the place and cache the result
if not place_handle in self.place_map:
place = self.db.get_place_from_handle(place_handle)
self.place_map[place_handle] = self.match_object(place)
return self.place_map[place_handle]
def search_media(self,media_handle):
if not media_handle:
return False
# search inside the place and cache the result
if not media_handle in self.media_map:
media = self.db.get_object_from_handle(media_handle)
self.media_map[media_handle] = self.match_object(media)
return self.media_map[media_handle]
def cache_repos(self):
# search all matching repositories
for repo_handle in self.db.get_repository_handles():
repo = self.db.get_repository_from_handle(repo_handle)
if( self.match_object(repo)):
self.repo_map[repo_handle] = 1
def cache_sources(self):
# search all sources and match all referents of a matching source
for source_handle in self.db.get_source_handles():
source = self.db.get_source_from_handle(source_handle)
match = self.match_object(source)
if not match:
for reporef in source.get_reporef_list():
if reporef.get_reference_handle() in self.repo_map:
match = 1
if match:
(person_list,family_list,event_list,
place_list,source_list,media_list
) = get_source_referents(source_handle,self.db)
for handle in person_list:
self.person_map[handle] = 1
for handle in family_list:
self.family_map[handle] = 1
for handle in event_list:
self.event_map[handle] = 1
for handle in place_list:
self.place_map[handle] = 1
for handle in media_list:
self.media_map[handle] = 1
def match_object(self,obj):
if not obj:
return False
if self.regexp_match:
return obj.matches_regexp(self.list[0],self.case_sensitive)
return obj.matches_string(self.list[0],self.case_sensitive)

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
from RelLib import Person from RelLib import Person
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
from RelLib import ChildRefType from RelLib import ChildRefType
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "People with children" # "People with children"

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "People who have images" # "People who have images"

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
from _MatchesFilter import MatchesFilter from _MatchesFilter import MatchesFilter
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
from RelLib import Person from RelLib import Person
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
from RelLib import Person from RelLib import Person
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
from _MatchesFilter import MatchesFilter from _MatchesFilter import MatchesFilter
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
from _MatchesFilter import MatchesFilter from _MatchesFilter import MatchesFilter
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
from _MatchesFilter import MatchesFilter from _MatchesFilter import MatchesFilter
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "Witnesses" # "Witnesses"

View File

@ -33,7 +33,7 @@ from gettext import gettext as _
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from Filters import SystemFilters, CustomFilters from Filters import SystemFilters, CustomFilters
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "People with multiple marriage records" # "People with multiple marriage records"

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "People with no marriage records" # "People with no marriage records"

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "People without a birth date" # "People without a birth date"

View File

@ -32,17 +32,14 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._IsPrivate import IsPrivate
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "People marked private" # "People marked private"
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class PeoplePrivate(Rule): class PeoplePrivate(IsPrivate):
"""People marked private""" """People marked private"""
name = _('People marked private') name = _('People marked private')
description = _("Matches people that are indicated as private") description = _("Matches people that are indicated as private")
category = _('General filters') category = _('General filters')
def apply(self,db,person):
return person.get_privacy()

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "People with incomplete events" # "People with incomplete events"

View File

@ -33,7 +33,7 @@ from gettext import gettext as _
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from Utils import probably_alive from Utils import probably_alive
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# "People probably alive" # "People probably alive"

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -32,7 +32,7 @@ from gettext import gettext as _
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from _Rule import Rule from Filters.Rules._Rule import Rule
import NameDisplay import NameDisplay
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -0,0 +1,148 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
"""
Package providing filter rules for GRAMPS.
"""
__author__ = "Don Allingham"
from _Disconnected import Disconnected
from _Everyone import Everyone
from _FamilyWithIncompleteEvent import FamilyWithIncompleteEvent
from _HasAttribute import HasAttribute
from _HasBirth import HasBirth
from _HasCommonAncestorWith import HasCommonAncestorWith
from _HasCommonAncestorWithFilterMatch import HasCommonAncestorWithFilterMatch
from _HasCompleteRecord import HasCompleteRecord
from _HasDeath import HasDeath
from _HasEvent import HasEvent
from _HasFamilyAttribute import HasFamilyAttribute
from _HasFamilyEvent import HasFamilyEvent
from _HasIdOf import HasIdOf
from _HasNameOf import HasNameOf
from _HasNote import HasNote
from _HasNoteMatchingSubstringOf import HasNoteMatchingSubstringOf
from _HasRelationship import HasRelationship
from _HasSourceOf import HasSourceOf
from _HasTextMatchingRegexpOf import HasTextMatchingRegexpOf
from _HasTextMatchingSubstringOf import HasTextMatchingSubstringOf
from _HasUnknownGender import HasUnknownGender
from _HaveAltFamilies import HaveAltFamilies
from _HaveChildren import HaveChildren
from _HavePhotos import HavePhotos
from _IncompleteNames import IncompleteNames
from _IsAncestorOf import IsAncestorOf
from _IsAncestorOfFilterMatch import IsAncestorOfFilterMatch
from _IsBookmarked import IsBookmarked
from _IsChildOfFilterMatch import IsChildOfFilterMatch
from _IsDefaultPerson import IsDefaultPerson
from _IsDescendantFamilyOf import IsDescendantFamilyOf
from _IsDescendantOf import IsDescendantOf
from _IsDescendantOfFilterMatch import IsDescendantOfFilterMatch
from _IsFemale import IsFemale
from _IsLessThanNthGenerationAncestorOf import \
IsLessThanNthGenerationAncestorOf
from _IsLessThanNthGenerationAncestorOfBookmarked import \
IsLessThanNthGenerationAncestorOfBookmarked
from _IsLessThanNthGenerationAncestorOfDefaultPerson import \
IsLessThanNthGenerationAncestorOfDefaultPerson
from _IsLessThanNthGenerationDescendantOf import \
IsLessThanNthGenerationDescendantOf
from _IsMale import IsMale
from _IsMoreThanNthGenerationAncestorOf import \
IsMoreThanNthGenerationAncestorOf
from _IsMoreThanNthGenerationDescendantOf import \
IsMoreThanNthGenerationDescendantOf
from _IsParentOfFilterMatch import IsParentOfFilterMatch
from _IsSiblingOfFilterMatch import IsSiblingOfFilterMatch
from _IsSpouseOfFilterMatch import IsSpouseOfFilterMatch
from _IsWitness import IsWitness
from _MatchesFilter import MatchesFilter
from _MultipleMarriages import MultipleMarriages
from _NeverMarried import NeverMarried
from _NoBirthdate import NoBirthdate
from _PeoplePrivate import PeoplePrivate
from _PersonWithIncompleteEvent import PersonWithIncompleteEvent
from _ProbablyAlive import ProbablyAlive
from _RelationshipPathBetween import RelationshipPathBetween
from Filters.Rules._Rule import Rule
from _SearchName import SearchName
#-------------------------------------------------------------------------
#
# This is used by Custom Filter Editor tool
#
#-------------------------------------------------------------------------
editor_rule_list = [
Everyone,
IsFemale,
HasUnknownGender,
IsMale,
IsDefaultPerson,
IsBookmarked,
HasIdOf,
HasNameOf,
HasRelationship,
HasDeath,
HasBirth,
HasCompleteRecord,
HasEvent,
HasFamilyEvent,
HasAttribute,
HasFamilyAttribute,
HasSourceOf,
HaveAltFamilies,
HavePhotos,
HaveChildren,
IncompleteNames,
NeverMarried,
MultipleMarriages,
NoBirthdate,
PersonWithIncompleteEvent,
FamilyWithIncompleteEvent,
ProbablyAlive,
PeoplePrivate,
IsWitness,
IsDescendantOf,
IsDescendantFamilyOf,
IsLessThanNthGenerationAncestorOfDefaultPerson,
IsDescendantOfFilterMatch,
IsLessThanNthGenerationDescendantOf,
IsMoreThanNthGenerationDescendantOf,
IsAncestorOf,
IsAncestorOfFilterMatch,
IsLessThanNthGenerationAncestorOf,
IsLessThanNthGenerationAncestorOfBookmarked,
IsMoreThanNthGenerationAncestorOf,
HasCommonAncestorWith,
HasCommonAncestorWithFilterMatch,
MatchesFilter,
IsChildOfFilterMatch,
IsParentOfFilterMatch,
IsSpouseOfFilterMatch,
IsSiblingOfFilterMatch,
RelationshipPathBetween,
HasTextMatchingSubstringOf,
HasNote,
HasNoteMatchingSubstringOf
]

View File

@ -0,0 +1,18 @@
# This is the src/Filters/Rules/Place level Makefile for Gramps
pkgdatadir = $(datadir)/@PACKAGE@/Filters/Rules/Place
pkgdata_PYTHON = \
__init__.py
pkgpyexecdir = @pkgpyexecdir@/Filters/Rules/Place
pkgpythondir = @pkgpythondir@/Filters/Rules/Place
# Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo
GRAMPS_PY_MODPATH = "../../../"
pycheck:
(export PYTHONPATH=$(GRAMPS_PY_MODPATH); \
pychecker $(pkgdata_PYTHON));

View File

@ -0,0 +1,27 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id: __init__.py 6521 2006-05-03 01:02:54Z rshura $
"""
Package providing filter rules for GRAMPS.
"""
__author__ = "Don Allingham"

View File

@ -0,0 +1,18 @@
# This is the src/Filters/Rules/Media level Makefile for Gramps
pkgdatadir = $(datadir)/@PACKAGE@/Filters/Rules/Repository
pkgdata_PYTHON = \
__init__.py
pkgpyexecdir = @pkgpyexecdir@/Filters/Rules/Repository
pkgpythondir = @pkgpythondir@/Filters/Rules/Repository
# Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo
GRAMPS_PY_MODPATH = "../../../"
pycheck:
(export PYTHONPATH=$(GRAMPS_PY_MODPATH); \
pychecker $(pkgdata_PYTHON));

View File

@ -0,0 +1,27 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id: __init__.py 6521 2006-05-03 01:02:54Z rshura $
"""
Package providing filter rules for GRAMPS.
"""
__author__ = "Don Allingham"

View File

@ -0,0 +1,18 @@
# This is the src/Filters/Rules/Source level Makefile for Gramps
pkgdatadir = $(datadir)/@PACKAGE@/Filters/Rules/Source
pkgdata_PYTHON = \
__init__.py
pkgpyexecdir = @pkgpyexecdir@/Filters/Rules/Source
pkgpythondir = @pkgpythondir@/Filters/Rules/Source
# Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo
GRAMPS_PY_MODPATH = "../../../"
pycheck:
(export PYTHONPATH=$(GRAMPS_PY_MODPATH); \
pychecker $(pkgdata_PYTHON));

View File

@ -0,0 +1,27 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id: __init__.py 6521 2006-05-03 01:02:54Z rshura $
"""
Package providing filter rules for GRAMPS.
"""
__author__ = "Don Allingham"

View File

@ -0,0 +1,53 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
#-------------------------------------------------------------------------
#
# Standard Python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
from _Rule import Rule
#-------------------------------------------------------------------------
#
# Everyone
#
#-------------------------------------------------------------------------
class Everything(Rule):
"""Matches Everyone"""
name = _('Every object')
category = _('General filters')
description = _('Matches every object in the database')
def is_empty(self):
return True
def apply(self,db,obj):
return True

View File

@ -42,15 +42,5 @@ class HasTextMatchingRegexpOf(HasTextMatchingSubstringOf):
def __init__(self,list): def __init__(self,list):
HasTextMatchingSubstringOf.__init__(self,list) HasTextMatchingSubstringOf.__init__(self,list)
def prepare(self,db): # FIXME: This needs to be written for an arbitrary object
self.db = db # if possible
self.person_map = {}
self.event_map = {}
self.source_map = {}
self.repo_map = {}
self.family_map = {}
self.place_map = {}
self.media_map = {}
self.case_sensitive = False
self.regexp_match = True
self.cache_sources()

View File

@ -49,149 +49,5 @@ class HasTextMatchingSubstringOf(Rule):
"matching a substring") "matching a substring")
category = _('General filters') category = _('General filters')
def prepare(self,db): # FIXME: This needs to be written for an arbitrary object
self.db = db # if possible
self.person_map = {}
self.event_map = {}
self.source_map = {}
self.repo_map = {}
self.family_map = {}
self.place_map = {}
self.media_map = {}
try:
if int(self.list[1]):
self.case_sensitive = True
else:
self.case_sensitive = False
except IndexError:
self.case_sensitive = False
try:
if int(self.list[2]):
self.regexp_match = True
else:
self.regexp_match = False
except IndexError:
self.regexp_match = False
self.cache_repos()
self.cache_sources()
def reset(self):
self.person_map = {}
self.event_map = {}
self.source_map = {}
self.repo_map = {}
self.family_map = {}
self.place_map = {}
self.media_map = {}
def apply(self,db,person):
if person.handle in self.person_map: # Cached by matching Source?
return self.person_map[person.handle]
if self.match_object(person): # first match the person itself
return True
for event_ref in person.get_event_ref_list()+[person.get_birth_ref(), person.get_death_ref()]:
if self.search_event(event_ref.ref): # match referenced events
return True
for family_handle in person.get_family_handle_list(): # match families
if self.search_family(family_handle):
return True
for media_ref in person.get_media_list(): # match Media object
if self.search_media(media_ref.get_reference_handle()):
return True
return False
def search_family(self,family_handle):
if not family_handle:
return False
# search inside the family and cache the result to not search a family twice
if not family_handle in self.family_map:
match = 0
family = self.db.get_family_from_handle(family_handle)
if self.match_object(family):
match = 1
else:
for event_ref in family.get_event_ref_list():
if self.search_event(event_ref.ref):
match = 1
break
for media_ref in family.get_media_list(): # match Media object
if self.search_media(media_ref.get_reference_handle()):
return True
self.family_map[family_handle] = match
return self.family_map[family_handle]
def search_event(self,event_handle):
if not event_handle:
return False
# search inside the event and cache the result (event sharing)
if not event_handle in self.event_map:
match = 0
event = self.db.get_event_from_handle(event_handle)
if self.match_object(event):
match = 1
elif event:
place_handle = event.get_place_handle()
if place_handle:
if self.search_place(place_handle):
match = 1
for media_ref in event.get_media_list(): # match Media object
if self.search_media(media_ref.get_reference_handle()):
return True
self.event_map[event_handle] = match
return self.event_map[event_handle]
def search_place(self,place_handle):
if not place_handle:
return False
# search inside the place and cache the result
if not place_handle in self.place_map:
place = self.db.get_place_from_handle(place_handle)
self.place_map[place_handle] = self.match_object(place)
return self.place_map[place_handle]
def search_media(self,media_handle):
if not media_handle:
return False
# search inside the place and cache the result
if not media_handle in self.media_map:
media = self.db.get_object_from_handle(media_handle)
self.media_map[media_handle] = self.match_object(media)
return self.media_map[media_handle]
def cache_repos(self):
# search all matching repositories
for repo_handle in self.db.get_repository_handles():
repo = self.db.get_repository_from_handle(repo_handle)
if( self.match_object(repo)):
self.repo_map[repo_handle] = 1
def cache_sources(self):
# search all sources and match all referents of a matching source
for source_handle in self.db.get_source_handles():
source = self.db.get_source_from_handle(source_handle)
match = self.match_object(source)
if not match:
for reporef in source.get_reporef_list():
if reporef.get_reference_handle() in self.repo_map:
match = 1
if match:
(person_list,family_list,event_list,
place_list,source_list,media_list
) = get_source_referents(source_handle,self.db)
for handle in person_list:
self.person_map[handle] = 1
for handle in family_list:
self.family_map[handle] = 1
for handle in event_list:
self.event_map[handle] = 1
for handle in place_list:
self.place_map[handle] = 1
for handle in media_list:
self.media_map[handle] = 1
def match_object(self,obj):
if not obj:
return False
if self.regexp_match:
return obj.matches_regexp(self.list[0],self.case_sensitive)
return obj.matches_string(self.list[0],self.case_sensitive)

View File

@ -0,0 +1,48 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
#-------------------------------------------------------------------------
#
# Standard Python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
from _Rule import Rule
#-------------------------------------------------------------------------
# "People marked private"
#-------------------------------------------------------------------------
class IsPrivate(Rule):
"""Objects marked private"""
name = _('Objects marked private')
description = _("Matches objects that are indicated as private")
category = _('General filters')
def apply(self,db,obj):
return obj.get_privacy()

View File

@ -26,121 +26,15 @@ Package providing filter rules for GRAMPS.
__author__ = "Don Allingham" __author__ = "Don Allingham"
from _Disconnected import Disconnected from _Everything import Everything
from _Everyone import Everyone from _IsPrivate import IsPrivate
from _FamilyWithIncompleteEvent import FamilyWithIncompleteEvent
from _HasAttribute import HasAttribute
from _HasBirth import HasBirth
from _HasCommonAncestorWith import HasCommonAncestorWith
from _HasCommonAncestorWithFilterMatch import HasCommonAncestorWithFilterMatch
from _HasCompleteRecord import HasCompleteRecord
from _HasDeath import HasDeath
from _HasEvent import HasEvent
from _HasFamilyAttribute import HasFamilyAttribute
from _HasFamilyEvent import HasFamilyEvent
from _HasIdOf import HasIdOf
from _HasNameOf import HasNameOf
from _HasNote import HasNote
from _HasNoteMatchingSubstringOf import HasNoteMatchingSubstringOf
from _HasRelationship import HasRelationship
from _HasSourceOf import HasSourceOf
from _HasTextMatchingRegexpOf import HasTextMatchingRegexpOf
from _HasTextMatchingSubstringOf import HasTextMatchingSubstringOf from _HasTextMatchingSubstringOf import HasTextMatchingSubstringOf
from _HasUnknownGender import HasUnknownGender from _HasTextMatchingRegexpOf import HasTextMatchingRegexpOf
from _HaveAltFamilies import HaveAltFamilies
from _HaveChildren import HaveChildren
from _HavePhotos import HavePhotos
from _IncompleteNames import IncompleteNames
from _IsAncestorOf import IsAncestorOf
from _IsAncestorOfFilterMatch import IsAncestorOfFilterMatch
from _IsBookmarked import IsBookmarked
from _IsChildOfFilterMatch import IsChildOfFilterMatch
from _IsDefaultPerson import IsDefaultPerson
from _IsDescendantFamilyOf import IsDescendantFamilyOf
from _IsDescendantOf import IsDescendantOf
from _IsDescendantOfFilterMatch import IsDescendantOfFilterMatch
from _IsFemale import IsFemale
from _IsLessThanNthGenerationAncestorOf import IsLessThanNthGenerationAncestorOf
from _IsLessThanNthGenerationAncestorOfBookmarked import \
IsLessThanNthGenerationAncestorOfBookmarked
from _IsLessThanNthGenerationAncestorOfDefaultPerson import \
IsLessThanNthGenerationAncestorOfDefaultPerson
from _IsLessThanNthGenerationDescendantOf import \
IsLessThanNthGenerationDescendantOf
from _IsMale import IsMale
from _IsMoreThanNthGenerationAncestorOf import IsMoreThanNthGenerationAncestorOf
from _IsMoreThanNthGenerationDescendantOf import \
IsMoreThanNthGenerationDescendantOf
from _IsParentOfFilterMatch import IsParentOfFilterMatch
from _IsSiblingOfFilterMatch import IsSiblingOfFilterMatch
from _IsSpouseOfFilterMatch import IsSpouseOfFilterMatch
from _IsWitness import IsWitness
from _MatchesFilter import MatchesFilter
from _MultipleMarriages import MultipleMarriages
from _NeverMarried import NeverMarried
from _NoBirthdate import NoBirthdate
from _PeoplePrivate import PeoplePrivate
from _PersonWithIncompleteEvent import PersonWithIncompleteEvent
from _ProbablyAlive import ProbablyAlive
from _RelationshipPathBetween import RelationshipPathBetween
from _Rule import Rule
from _SearchName import SearchName
#------------------------------------------------------------------------- import Person
# import Family
# This is used by Custom Filter Editor tool import Event
# import Source
#------------------------------------------------------------------------- import Place
editor_rule_list = [ import Media
Everyone, import Repository
IsFemale,
HasUnknownGender,
IsMale,
IsDefaultPerson,
IsBookmarked,
HasIdOf,
HasNameOf,
HasRelationship,
HasDeath,
HasBirth,
HasCompleteRecord,
HasEvent,
HasFamilyEvent,
HasAttribute,
HasFamilyAttribute,
HasSourceOf,
HaveAltFamilies,
HavePhotos,
HaveChildren,
IncompleteNames,
NeverMarried,
MultipleMarriages,
NoBirthdate,
PersonWithIncompleteEvent,
FamilyWithIncompleteEvent,
ProbablyAlive,
PeoplePrivate,
IsWitness,
IsDescendantOf,
IsDescendantFamilyOf,
IsLessThanNthGenerationAncestorOfDefaultPerson,
IsDescendantOfFilterMatch,
IsLessThanNthGenerationDescendantOf,
IsMoreThanNthGenerationDescendantOf,
IsAncestorOf,
IsAncestorOfFilterMatch,
IsLessThanNthGenerationAncestorOf,
IsLessThanNthGenerationAncestorOfBookmarked,
IsMoreThanNthGenerationAncestorOf,
HasCommonAncestorWith,
HasCommonAncestorWithFilterMatch,
MatchesFilter,
IsChildOfFilterMatch,
IsParentOfFilterMatch,
IsSpouseOfFilterMatch,
IsSiblingOfFilterMatch,
RelationshipPathBetween,
HasTextMatchingSubstringOf,
HasNote,
HasNoteMatchingSubstringOf
]

View File

@ -88,16 +88,15 @@ class FilterList:
f.write('<object type="%s">\n' % namespace) f.write('<object type="%s">\n' % namespace)
filter_list = self.filter_namespaces[namespace] filter_list = self.filter_namespaces[namespace]
for the_filter in filter_list: for the_filter in filter_list:
f.write(' <filter name="%s"' % self.fix(the_filter.get_name())) f.write(' <filter name="%s"' %self.fix(the_filter.get_name()))
f.write(' function="%s"' % the_filter.get_logical_op()) f.write(' function="%s"' % the_filter.get_logical_op())
comment = the_filter.get_comment() comment = the_filter.get_comment()
if comment: if comment:
f.write(' comment="%s"' % self.fix(comment)) f.write(' comment="%s"' % self.fix(comment))
f.write('>\n') f.write('>\n')
for rule in the_filter.get_rules(): for rule in the_filter.get_rules():
rule_class_name = rule.__class__.__name__ f.write(' <rule class="%s">\n'
rule_save_name = "Filters.Rules.%s" % rule_class_name % rule.__class__.__name__)
f.write(' <rule class="%s">\n' % rule_save_name)
for v in rule.values(): for v in rule.values():
f.write(' <arg value="%s"/>\n' % self.fix(v)) f.write(' <arg value="%s"/>\n' % self.fix(v))
f.write(' </rule>\n') f.write(' </rule>\n')

View File

@ -50,7 +50,7 @@ class FilterParser(handler.ContentHandler):
self.r = None self.r = None
self.a = [] self.a = []
self.cname = None self.cname = None
self.namespace = "person" self.namespace = "Person"
def setDocumentLocator(self,locator): def setDocumentLocator(self,locator):
self.locator = locator self.locator = locator
@ -84,13 +84,15 @@ class FilterParser(handler.ContentHandler):
try: try:
# First try to use fully qualified name # First try to use fully qualified name
exec 'self.r = %s' % save_name exec 'self.r = %s' % save_name
except (ImportError,NameError,AttributeError): except (ImportError, NameError, AttributeError ):
# Now try to use name from Rules # Now try to use name from Rules.Namespace
mc_match = save_name.split('.') mc_match = save_name.split('.')
try: try:
exec 'self.r = Rules.%s' % mc_match[-1] exec 'self.r = Rules.%s.%s' % (
except (ImportError,NameError): self.namespace,mc_match[-1])
print "ERROR: Filter rule '%s' in filter '%s' not found!"\ except (ImportError, NameError ):
print "ERROR: Filter rule '%s' in "\
"filter '%s' not found!"\
% (save_name,self.f.get_name()) % (save_name,self.f.get_name())
self.r = None self.r = None
return return
@ -124,56 +126,58 @@ class FilterParser(handler.ContentHandler):
# This dict is mapping from old names to new names, so that the existing # This dict is mapping from old names to new names, so that the existing
# custom_filters.xml will continue working # custom_filters.xml will continue working
old_names_2_class = { old_names_2_class = {
"Everyone" : Rules.Everyone, "Everyone" : Rules.Person.Everyone,
"Is default person" : Rules.IsDefaultPerson, "Is default person" : Rules.Person.IsDefaultPerson,
"Is bookmarked person" : Rules.IsBookmarked, "Is bookmarked person" : Rules.Person.IsBookmarked,
"Has the Id" : Rules.HasIdOf, "Has the Id" : Rules.Person.HasIdOf,
"Has a name" : Rules.HasNameOf, "Has a name" : Rules.Person.HasNameOf,
"Has the relationships" : Rules.HasRelationship, "Has the relationships" : Rules.Person.HasRelationship,
"Has the death" : Rules.HasDeath, "Has the death" : Rules.Person.HasDeath,
"Has the birth" : Rules.HasBirth, "Has the birth" : Rules.Person.HasBirth,
"Is a descendant of" : Rules.IsDescendantOf, "Is a descendant of" : Rules.Person.IsDescendantOf,
"Is a descendant family member of" : Rules.IsDescendantFamilyOf, "Is a descendant family member of" : Rules.Person.IsDescendantFamilyOf,
"Is a descendant of filter match": Rules.IsDescendantOfFilterMatch, "Is a descendant of filter match": Rules.Person.IsDescendantOfFilterMatch,
"Is a descendant of person not more than N generations away": "Is a descendant of person not more than N generations away":
Rules.IsLessThanNthGenerationDescendantOf, Rules.Person.IsLessThanNthGenerationDescendantOf,
"Is a descendant of person at least N generations away": "Is a descendant of person at least N generations away":
Rules.IsMoreThanNthGenerationDescendantOf, Rules.Person.IsMoreThanNthGenerationDescendantOf,
"Is an descendant of person at least N generations away" : "Is an descendant of person at least N generations away" :
Rules.IsMoreThanNthGenerationDescendantOf, Rules.Person.IsMoreThanNthGenerationDescendantOf,
"Is a child of filter match" : Rules.IsChildOfFilterMatch, "Is a child of filter match" : Rules.Person.IsChildOfFilterMatch,
"Is an ancestor of" : Rules.IsAncestorOf, "Is an ancestor of" : Rules.Person.IsAncestorOf,
"Is an ancestor of filter match": Rules.IsAncestorOfFilterMatch, "Is an ancestor of filter match": Rules.Person.IsAncestorOfFilterMatch,
"Is an ancestor of person not more than N generations away" : "Is an ancestor of person not more than N generations away" :
Rules.IsLessThanNthGenerationAncestorOf, Rules.Person.IsLessThanNthGenerationAncestorOf,
"Is an ancestor of person at least N generations away": "Is an ancestor of person at least N generations away":
Rules.IsMoreThanNthGenerationAncestorOf, Rules.Person.IsMoreThanNthGenerationAncestorOf,
"Is a parent of filter match" : Rules.IsParentOfFilterMatch, "Is a parent of filter match" : Rules.Person.IsParentOfFilterMatch,
"Has a common ancestor with" : Rules.HasCommonAncestorWith, "Has a common ancestor with" : Rules.Person.HasCommonAncestorWith,
"Has a common ancestor with filter match" :Rules.HasCommonAncestorWithFilterMatch, "Has a common ancestor with filter match" :
"Is a female" : Rules.IsFemale, Rules.Person.HasCommonAncestorWithFilterMatch,
"Is a male" : Rules.IsMale, "Is a female" : Rules.Person.IsFemale,
"Has complete record" : Rules.HasCompleteRecord, "Is a male" : Rules.Person.IsMale,
"Has the personal event" : Rules.HasEvent, "Has complete record" : Rules.Person.HasCompleteRecord,
"Has the family event" : Rules.HasFamilyEvent, "Has the personal event" : Rules.Person.HasEvent,
"Has the personal attribute" : Rules.HasAttribute, "Has the family event" : Rules.Person.HasFamilyEvent,
"Has the family attribute" : Rules.HasFamilyAttribute, "Has the personal attribute" : Rules.Person.HasAttribute,
"Has source of" : Rules.HasSourceOf, "Has the family attribute" : Rules.Person.HasFamilyAttribute,
"Matches the filter named" : Rules.HasSourceOf, "Has source of" : Rules.Person.HasSourceOf,
"Is spouse of filter match" : Rules.IsSpouseOfFilterMatch, "Matches the filter named" : Rules.Person.HasSourceOf,
"Is a sibling of filter match" : Rules.IsSiblingOfFilterMatch, "Is spouse of filter match" : Rules.Person.IsSpouseOfFilterMatch,
"Relationship path between two people" : Rules.RelationshipPathBetween, "Is a sibling of filter match" : Rules.Person.IsSiblingOfFilterMatch,
"People who were adopted" : Rules.HaveAltFamilies, "Relationship path between two people" :
"People who have images" : Rules.HavePhotos, Rules.Person.RelationshipPathBetween,
"People with children" : Rules.HaveChildren, "People who were adopted" : Rules.Person.HaveAltFamilies,
"People with incomplete names" : Rules.IncompleteNames, "People who have images" : Rules.Person.HavePhotos,
"People with no marriage records" : Rules.NeverMarried, "People with children" : Rules.Person.HaveChildren,
"People with multiple marriage records": Rules.MultipleMarriages, "People with incomplete names" : Rules.Person.IncompleteNames,
"People without a birth date" : Rules.NoBirthdate, "People with no marriage records" : Rules.Person.NeverMarried,
"People with incomplete events" : Rules.PersonWithIncompleteEvent, "People with multiple marriage records": Rules.Person.MultipleMarriages,
"Families with incomplete events" :Rules.FamilyWithIncompleteEvent, "People without a birth date" : Rules.Person.NoBirthdate,
"People probably alive" : Rules.ProbablyAlive, "People with incomplete events" : Rules.Person.PersonWithIncompleteEvent,
"People marked private" : Rules.PeoplePrivate, "Families with incomplete events" :Rules.Person.FamilyWithIncompleteEvent,
"Witnesses" : Rules.IsWitness, "People probably alive" : Rules.Person.ProbablyAlive,
"Has text matching substring of": Rules.HasTextMatchingSubstringOf, "People marked private" : Rules.Person.PeoplePrivate,
"Witnesses" : Rules.Person.IsWitness,
"Has text matching substring of": Rules.Person.HasTextMatchingSubstringOf,
} }

View File

@ -372,25 +372,25 @@ class GedcomWriterOptionBox:
all = GenericFilter() all = GenericFilter()
all.set_name(_("Entire Database")) all.set_name(_("Entire Database"))
all.add_rule(Rules.Everyone([])) all.add_rule(Rules.Person.Everyone([]))
if self.person: if self.person:
des = GenericFilter() des = GenericFilter()
des.set_name(_("Descendants of %s") % des.set_name(_("Descendants of %s") %
NameDisplay.displayer.display(self.person)) NameDisplay.displayer.display(self.person))
des.add_rule(Rules.IsDescendantOf( des.add_rule(Rules.Person.IsDescendantOf(
[self.person.get_gramps_id(),1])) [self.person.get_gramps_id(),1]))
ans = GenericFilter() ans = GenericFilter()
ans.set_name(_("Ancestors of %s") ans.set_name(_("Ancestors of %s")
% NameDisplay.displayer.display(self.person)) % NameDisplay.displayer.display(self.person))
ans.add_rule(Rules.IsAncestorOf( ans.add_rule(Rules.Person.IsAncestorOf(
[self.person.get_gramps_id(),1])) [self.person.get_gramps_id(),1]))
com = GenericFilter() com = GenericFilter()
com.set_name(_("People with common ancestor with %s") % com.set_name(_("People with common ancestor with %s") %
NameDisplay.displayer.display(self.person)) NameDisplay.displayer.display(self.person))
com.add_rule(Rules.HasCommonAncestorWith( com.add_rule(Rules.Person.HasCommonAncestorWith(
[self.person.get_gramps_id()])) [self.person.get_gramps_id()]))
self.filter_menu = build_filter_menu([all,des,ans,com]) self.filter_menu = build_filter_menu([all,des,ans,com])

View File

@ -157,29 +157,29 @@ class PersonFilterFrame(FilterFrameBase):
filter_label.set_alignment(xalign=0,yalign=0.5) filter_label.set_alignment(xalign=0,yalign=0.5)
default_filters = [ default_filters = [
Rules.Everyone, Rules.Person.Everyone,
Rules.IsFemale, Rules.Person.IsFemale,
Rules.IsMale, Rules.Person.IsMale,
Rules.HasUnknownGender, Rules.Person.HasUnknownGender,
Rules.Disconnected, Rules.Person.Disconnected,
Rules.SearchName, Rules.Person.SearchName,
Rules.HaveAltFamilies, Rules.Person.HaveAltFamilies,
Rules.HavePhotos, Rules.Person.HavePhotos,
Rules.IncompleteNames, Rules.Person.IncompleteNames,
Rules.HaveChildren, Rules.Person.HaveChildren,
Rules.NeverMarried, Rules.Person.NeverMarried,
Rules.MultipleMarriages, Rules.Person.MultipleMarriages,
Rules.NoBirthdate, Rules.Person.NoBirthdate,
Rules.PersonWithIncompleteEvent, Rules.Person.PersonWithIncompleteEvent,
Rules.FamilyWithIncompleteEvent, Rules.Person.FamilyWithIncompleteEvent,
Rules.ProbablyAlive, Rules.Person.ProbablyAlive,
Rules.PeoplePrivate, Rules.Person.PeoplePrivate,
Rules.IsWitness, Rules.Person.IsWitness,
Rules.HasTextMatchingSubstringOf, Rules.Person.HasTextMatchingSubstringOf,
Rules.HasTextMatchingRegexpOf, Rules.Person.HasTextMatchingRegexpOf,
Rules.HasNote, Rules.Person.HasNote,
Rules.HasNoteMatchingSubstringOf, Rules.Person.HasNoteMatchingSubstringOf,
Rules.IsFemale, Rules.Person.IsFemale,
] ]
self._filter_list = gtk.ListStore(object,str) self._filter_list = gtk.ListStore(object,str)
@ -365,19 +365,19 @@ class PersonFilterFrame(FilterFrameBase):
filter = GenericFilter() filter = GenericFilter()
if self._id_check.get_active(): if self._id_check.get_active():
filter.add_rule(Rules.HasIdOf([self._id_edit.get_text()])) filter.add_rule(Rules.Person.HasIdOf([self._id_edit.get_text()]))
if self._name_check.get_active(): if self._name_check.get_active():
filter.add_rule(Rules.SearchName([self._name_edit.get_text()])) filter.add_rule(Rules.Person.SearchName([self._name_edit.get_text()]))
if self._gender_check.get_active(): if self._gender_check.get_active():
gender = self._gender_list.get_value(self._gender_combo.get_active_iter(),1) gender = self._gender_list.get_value(self._gender_combo.get_active_iter(),1)
if gender == RelLib.Person.MALE: if gender == RelLib.Person.MALE:
filter.add_rule(Rules.IsMale([])) filter.add_rule(Rules.Person.IsMale([]))
elif gender == RelLib.Person.FEMALE: elif gender == RelLib.Person.FEMALE:
filter.add_rule(Rules.IsFemale([])) filter.add_rule(Rules.Person.IsFemale([]))
elif gender == RelLib.Person.UNKNOWN: elif gender == RelLib.Person.UNKNOWN:
filter.add_rule(Rules.HasUnknownGender([])) filter.add_rule(Rules.Person.HasUnknownGender([]))
else: else:
log.warn("Received unknown gender from filter widget") log.warn("Received unknown gender from filter widget")
@ -389,7 +389,7 @@ class PersonFilterFrame(FilterFrameBase):
date = "after " + self._b_edit.get_text() date = "after " + self._b_edit.get_text()
else: else:
log.warn("neither before or after is selected, this should not happen") log.warn("neither before or after is selected, this should not happen")
filter.add_rule(Rules.HasBirth([date,'',''])) filter.add_rule(Rules.Person.HasBirth([date,'','']))
if self._death_check.get_active(): if self._death_check.get_active():
date = "" date = ""
@ -399,7 +399,7 @@ class PersonFilterFrame(FilterFrameBase):
date = "after " + self._d_edit.get_text() date = "after " + self._d_edit.get_text()
else: else:
log.warn("neither before or after is selected, this should not happen") log.warn("neither before or after is selected, this should not happen")
filter.add_rule(Rules.HasDeath([date,'',''])) filter.add_rule(Rules.Person.HasDeath([date,'','']))
if self._filter_check.get_active(): if self._filter_check.get_active():

View File

@ -527,10 +527,10 @@ class ListView(BookMarkView):
Builds the default filters and add them to the filter menu. Builds the default filters and add them to the filter menu.
""" """
default_filters = [ default_filters = [
[Rules.Everyone, []], [Rules.Everything, []],
[Rules.HasTextMatchingSubstringOf, ['',0,0]], [Rules.HasTextMatchingSubstringOf, ['',0,0]],
[Rules.HasTextMatchingRegexpOf, ['',0,1]], [Rules.HasTextMatchingRegexpOf, ['',0,1]],
[Rules.PeoplePrivate, []], [Rules.IsPrivate, []],
] ]
self.generic_filter_widget.setup_filter( default_filters) self.generic_filter_widget.setup_filter( default_filters)

View File

@ -912,7 +912,7 @@ class BareReportDialog:
self.options.handler.set_filter_number(active) self.options.handler.set_filter_number(active)
except: except:
print "Error setting filter. Proceeding with 'Everyone'" print "Error setting filter. Proceeding with 'Everyone'"
self.filter = Rules.Everyone([]) self.filter = Rules.Person.Everyone([])
else: else:
self.filter = None self.filter = None

View File

@ -1,4 +1,3 @@
#
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2000-2006 Donald N. Allingham # Copyright (C) 2000-2006 Donald N. Allingham
@ -528,32 +527,32 @@ class FilterWidget(Widget):
if filter in ["everyone", "all filters"]: if filter in ["everyone", "all filters"]:
f = GenericFilter() f = GenericFilter()
f.set_name(_("Entire Database")) f.set_name(_("Entire Database"))
f.add_rule(Rules.Everyone([])) f.add_rule(Rules.Person.Everyone([]))
retval.append(f) retval.append(f)
if filter in ["descendants", "all filters"]: if filter in ["descendants", "all filters"]:
f = GenericFilter() f = GenericFilter()
f.set_name(_("Descendants of %s") % name) f.set_name(_("Descendants of %s") % name)
f.add_rule(Rules.IsDescendantOf([gramps_id,1])) f.add_rule(Rules.Person.IsDescendantOf([gramps_id,1]))
retval.append(f) retval.append(f)
if filter in ["descendant families", "all filters"]: if filter in ["descendant families", "all filters"]:
f = GenericFilter() f = GenericFilter()
f.set_name(_("Descendant Families of %s") % name) f.set_name(_("Descendant Families of %s") % name)
f.add_rule(Rules.IsDescendantFamilyOf([gramps_id])) f.add_rule(Rules.Person.IsDescendantFamilyOf([gramps_id]))
retval.append(f) retval.append(f)
if filter in ["ancestors", "all filters"]: if filter in ["ancestors", "all filters"]:
f = GenericFilter() f = GenericFilter()
f.set_name(_("Ancestors of %s") % name) f.set_name(_("Ancestors of %s") % name)
f.add_rule(Rules.IsAncestorOf([gramps_id,1])) f.add_rule(Rules.Person.IsAncestorOf([gramps_id,1]))
retval.append(f) retval.append(f)
if filter in ["common ancestors", "all filters"]: if filter in ["common ancestors", "all filters"]:
f = GenericFilter() f = GenericFilter()
f.set_name(_("People with common ancestor with %s") % name) f.set_name(_("People with common ancestor with %s") % name)
f.add_rule(Rules.HasCommonAncestorWith([gramps_id])) f.add_rule(Rules.Person.HasCommonAncestorWith([gramps_id]))
retval.append(f) retval.append(f)
if filter in ["calendar attribute", "all filters"]: if filter in ["calendar attribute", "all filters"]:
f = ParamFilter() f = ParamFilter()
f.set_name(_("People with a Calendar attribute")) f.set_name(_("People with a Calendar attribute"))
f.add_rule(Rules.HasTextMatchingSubstringOf(['Calendar',0,0])) f.add_rule(Rules.Person.HasTextMatchingSubstringOf(['Calendar',0,0]))
retval.append(f) retval.append(f)
return retval return retval

View File

@ -154,7 +154,7 @@ class EventComparison(Tool.Tool,ManagedWindow.ManagedWindow):
self.all = GenericFilter() self.all = GenericFilter()
self.all.set_name(_("Entire Database")) self.all.set_name(_("Entire Database"))
self.all.add_rule(Rules.Everyone([])) self.all.add_rule(Rules.Person.Everyone([]))
self.filter_menu = build_filter_menu([self.all]) self.filter_menu = build_filter_menu([self.all])
filter_num = self.options.handler.get_filter_number() filter_num = self.options.handler.get_filter_number()

View File

@ -86,25 +86,25 @@ class CalendarWriterOptionBox:
all = GenericFilter() all = GenericFilter()
all.set_name(_("Entire Database")) all.set_name(_("Entire Database"))
all.add_rule(Rules.Everyone([])) all.add_rule(Rules.Person.Everyone([]))
if self.person: if self.person:
des = GenericFilter() des = GenericFilter()
des.set_name(_("Descendants of %s") % des.set_name(_("Descendants of %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
des.add_rule(Rules.IsDescendantOf( des.add_rule(Rules.Person.IsDescendantOf(
[self.person.get_gramps_id(),1])) [self.person.get_gramps_id(),1]))
ans = GenericFilter() ans = GenericFilter()
ans.set_name(_("Ancestors of %s") % ans.set_name(_("Ancestors of %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
ans.add_rule(Rules.IsAncestorOf( ans.add_rule(Rules.Person.IsAncestorOf(
[self.person.get_gramps_id(),1])) [self.person.get_gramps_id(),1]))
com = GenericFilter() com = GenericFilter()
com.set_name(_("People with common ancestor with %s") % com.set_name(_("People with common ancestor with %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
com.add_rule(Rules.HasCommonAncestorWith( com.add_rule(Rules.Person.HasCommonAncestorWith(
[self.person.get_gramps_id()])) [self.person.get_gramps_id()]))
self.filter_menu = build_filter_menu( self.filter_menu = build_filter_menu(

View File

@ -84,25 +84,25 @@ class CardWriterOptionBox:
all = GenericFilter() all = GenericFilter()
all.set_name(_("Entire Database")) all.set_name(_("Entire Database"))
all.add_rule(Rules.Everyone([])) all.add_rule(Rules.Person.Everyone([]))
if self.person: if self.person:
des = GenericFilter() des = GenericFilter()
des.set_name(_("Descendants of %s") % des.set_name(_("Descendants of %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
des.add_rule(Rules.IsDescendantOf( des.add_rule(Rules.Person.IsDescendantOf(
[self.person.get_gramps_id(),1])) [self.person.get_gramps_id(),1]))
ans = GenericFilter() ans = GenericFilter()
ans.set_name(_("Ancestors of %s") % ans.set_name(_("Ancestors of %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
ans.add_rule(Rules.IsAncestorOf( ans.add_rule(Rules.Person.IsAncestorOf(
[self.person.get_gramps_id(),1])) [self.person.get_gramps_id(),1]))
com = GenericFilter() com = GenericFilter()
com.set_name(_("People with common ancestor with %s") % com.set_name(_("People with common ancestor with %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
com.add_rule(Rules.HasCommonAncestorWith( com.add_rule(Rules.Person.HasCommonAncestorWith(
[self.person.get_gramps_id()])) [self.person.get_gramps_id()]))
self.filter_menu = build_filter_menu( self.filter_menu = build_filter_menu(

View File

@ -620,7 +620,7 @@ class EditRule:
self.page = [] self.page = []
self.class2page = {} self.class2page = {}
the_map = {} the_map = {}
for class_obj in Rules.editor_rule_list: for class_obj in Rules.Person.editor_rule_list:
arglist = class_obj.labels arglist = class_obj.labels
vallist = [] vallist = []
tlist = [] tlist = []

View File

@ -656,19 +656,19 @@ class GraphVizOptions(ReportOptions.ReportOptions):
all = GenericFilter() all = GenericFilter()
all.set_name(_("Entire Database")) all.set_name(_("Entire Database"))
all.add_rule(Rules.Everyone([])) all.add_rule(Rules.Person.Everyone([]))
des = GenericFilter() des = GenericFilter()
des.set_name(_("Descendants of %s") % name) des.set_name(_("Descendants of %s") % name)
des.add_rule(Rule.IsDescendantOf([gramps_id,1])) des.add_rule(Rules.Person.IsDescendantOf([gramps_id,1]))
ans = GenericFilter() ans = GenericFilter()
ans.set_name(_("Ancestors of %s") % name) ans.set_name(_("Ancestors of %s") % name)
ans.add_rule(Rule.IsAncestorOf([gramps_id,1])) ans.add_rule(Rules.Person.IsAncestorOf([gramps_id,1]))
com = GenericFilter() com = GenericFilter()
com.set_name(_("People with common ancestor with %s") % name) com.set_name(_("People with common ancestor with %s") % name)
com.add_rule(Rules.HasCommonAncestorWith([gramps_id])) com.add_rule(Rules.Person.HasCommonAncestorWith([gramps_id]))
return [all,des,ans,com] return [all,des,ans,com]

View File

@ -522,23 +522,23 @@ class IndivCompleteOptions(ReportOptions.ReportOptions):
filt_id = GenericFilter() filt_id = GenericFilter()
filt_id.set_name(name) filt_id.set_name(name)
filt_id.add_rule(Rules.HasIdOf([gramps_id])) filt_id.add_rule(Rules.Person.HasIdOf([gramps_id]))
all = GenericFilter() all = GenericFilter()
all.set_name(_("Entire Database")) all.set_name(_("Entire Database"))
all.add_rule(Rules.Everyone([])) all.add_rule(Rules.Person.Everyone([]))
des = GenericFilter() des = GenericFilter()
des.set_name(_("Descendants of %s") % name) des.set_name(_("Descendants of %s") % name)
des.add_rule(Rules.IsDescendantOf([gramps_id,1])) des.add_rule(Rules.Person.IsDescendantOf([gramps_id,1]))
ans = GenericFilter() ans = GenericFilter()
ans.set_name(_("Ancestors of %s") % name) ans.set_name(_("Ancestors of %s") % name)
ans.add_rule(Rules.IsAncestorOf([gramps_id,1])) ans.add_rule(Rules.Person.IsAncestorOf([gramps_id,1]))
com = GenericFilter() com = GenericFilter()
com.set_name(_("People with common ancestor with %s") % name) com.set_name(_("People with common ancestor with %s") % name)
com.add_rule(Rules.HasCommonAncestorWith([gramps_id])) com.add_rule(Rules.Person.HasCommonAncestorWith([gramps_id]))
return [filt_id,all,des,ans,com] return [filt_id,all,des,ans,com]

View File

@ -2405,23 +2405,23 @@ class WebReportOptions(ReportOptions.ReportOptions):
all = GenericFilter() all = GenericFilter()
all.set_name(_("Entire Database")) all.set_name(_("Entire Database"))
all.add_rule(Rules.Everyone([])) all.add_rule(Rules.Person.Everyone([]))
des = GenericFilter() des = GenericFilter()
des.set_name(_("Descendants of %s") % name) des.set_name(_("Descendants of %s") % name)
des.add_rule(Rules.IsDescendantOf([gramps_id,1])) des.add_rule(Rules.Person.IsDescendantOf([gramps_id,1]))
df = GenericFilter() df = GenericFilter()
df.set_name(_("Descendant Families of %s") % name) df.set_name(_("Descendant Families of %s") % name)
df.add_rule(Rules.IsDescendantFamilyOf([gramps_id])) df.add_rule(Rules.Person.IsDescendantFamilyOf([gramps_id]))
ans = GenericFilter() ans = GenericFilter()
ans.set_name(_("Ancestors of %s") % name) ans.set_name(_("Ancestors of %s") % name)
ans.add_rule(Rules.IsAncestorOf([gramps_id,1])) ans.add_rule(Rules.Person.IsAncestorOf([gramps_id,1]))
com = GenericFilter() com = GenericFilter()
com.set_name(_("People with common ancestor with %s") % name) com.set_name(_("People with common ancestor with %s") % name)
com.add_rule(Rules.HasCommonAncestorWith([gramps_id])) com.add_rule(Rules.Person.HasCommonAncestorWith([gramps_id]))
return [all,des,df,ans,com] return [all,des,df,ans,com]

View File

@ -843,19 +843,19 @@ class StatisticsChartOptions(ReportOptions.ReportOptions):
all = GenericFilter() all = GenericFilter()
all.set_name(_("Entire Database")) all.set_name(_("Entire Database"))
all.add_rule(Rules.Everyone([])) all.add_rule(Rules.Person.Everyone([]))
des = GenericFilter() des = GenericFilter()
des.set_name(_("Descendants of %s") % name) des.set_name(_("Descendants of %s") % name)
des.add_rule(Rules.IsDescendantOf([gramps_id, 1])) des.add_rule(Rules.Person.IsDescendantOf([gramps_id, 1]))
ans = GenericFilter() ans = GenericFilter()
ans.set_name(_("Ancestors of %s") % name) ans.set_name(_("Ancestors of %s") % name)
ans.add_rule(Rules.IsAncestorOf([gramps_id, 1])) ans.add_rule(Rules.Person.IsAncestorOf([gramps_id, 1]))
com = GenericFilter() com = GenericFilter()
com.set_name(_("People with common ancestor with %s") % name) com.set_name(_("People with common ancestor with %s") % name)
com.add_rule(Rules.HasCommonAncestorWith([gramps_id])) com.add_rule(Rules.Person.HasCommonAncestorWith([gramps_id]))
return [all, des, ans, com] return [all, des, ans, com]

View File

@ -411,19 +411,19 @@ class TimeLineOptions(ReportOptions.ReportOptions):
all = GenericFilter() all = GenericFilter()
all.set_name(_("Entire Database")) all.set_name(_("Entire Database"))
all.add_rule(Rules.Everyone([])) all.add_rule(Rules.Person.Everyone([]))
des = GenericFilter() des = GenericFilter()
des.set_name(_("Descendants of %s") % name) des.set_name(_("Descendants of %s") % name)
des.add_rule(Rules.IsDescendantOf([gramps_id,1])) des.add_rule(Rules.Person.IsDescendantOf([gramps_id,1]))
ans = GenericFilter() ans = GenericFilter()
ans.set_name(_("Ancestors of %s") % name) ans.set_name(_("Ancestors of %s") % name)
ans.add_rule(Rules.IsAncestorOf([gramps_id,1])) ans.add_rule(Rules.Person.IsAncestorOf([gramps_id,1]))
com = GenericFilter() com = GenericFilter()
com.set_name(_("People with common ancestor with %s") % name) com.set_name(_("People with common ancestor with %s") % name)
com.add_rule(Rules.HasCommonAncestorWith([gramps_id])) com.add_rule(Rules.Person.HasCommonAncestorWith([gramps_id]))
return [all,des,ans,com] return [all,des,ans,com]

View File

@ -88,25 +88,25 @@ class FtreeWriterOptionBox:
all = GenericFilter() all = GenericFilter()
all.set_name(_("Entire Database")) all.set_name(_("Entire Database"))
all.add_rule(Rules.Everyone([])) all.add_rule(Rules.Person.Everyone([]))
if self.person: if self.person:
des = GenericFilter() des = GenericFilter()
des.set_name(_("Descendants of %s") % des.set_name(_("Descendants of %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
des.add_rule(Rules.IsDescendantOf( des.add_rule(Rules.Person.IsDescendantOf(
[self.person.get_gramps_id(),1])) [self.person.get_gramps_id(),1]))
ans = GenericFilter() ans = GenericFilter()
ans.set_name(_("Ancestors of %s") ans.set_name(_("Ancestors of %s")
% self.person.get_primary_name().get_name()) % self.person.get_primary_name().get_name())
ans.add_rule(Rules.IsAncestorOf( ans.add_rule(Rules.Person.IsAncestorOf(
[self.person.get_gramps_id(),1])) [self.person.get_gramps_id(),1]))
com = GenericFilter() com = GenericFilter()
com.set_name(_("People with common ancestor with %s") % com.set_name(_("People with common ancestor with %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
com.add_rule(Rules.HasCommonAncestorWith( com.add_rule(Rules.Person.HasCommonAncestorWith(
[self.person.get_gramps_id()])) [self.person.get_gramps_id()]))
self.filter_menu = build_filter_menu([all,des,ans,com]) self.filter_menu = build_filter_menu([all,des,ans,com])

View File

@ -90,25 +90,25 @@ class GeneWebWriterOptionBox:
all = GenericFilter() all = GenericFilter()
all.set_name(_("Entire Database")) all.set_name(_("Entire Database"))
all.add_rule(Rules.Everyone([])) all.add_rule(Rules.Person.Everyone([]))
if self.person: if self.person:
des = GenericFilter() des = GenericFilter()
des.set_name(_("Descendants of %s") % des.set_name(_("Descendants of %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
des.add_rule(Rules.IsDescendantOf( des.add_rule(Rules.Person.IsDescendantOf(
[self.person.get_gramps_id(),1])) [self.person.get_gramps_id(),1]))
ans = GenericFilter() ans = GenericFilter()
ans.set_name(_("Ancestors of %s") % ans.set_name(_("Ancestors of %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
ans.add_rule(Rules.IsAncestorOf( ans.add_rule(Rules.Person.IsAncestorOf(
[self.person.get_gramps_id(),1])) [self.person.get_gramps_id(),1]))
com = GenericFilter() com = GenericFilter()
com.set_name(_("People with common ancestor with %s") % com.set_name(_("People with common ancestor with %s") %
self.person.get_primary_name().get_name()) self.person.get_primary_name().get_name())
com.add_rule(Rules.HasCommonAncestorWith( com.add_rule(Rules.Person.HasCommonAncestorWith(
[self.person.get_gramps_id()])) [self.person.get_gramps_id()]))
self.filter_menu = build_filter_menu([all,des,ans,com]) self.filter_menu = build_filter_menu([all,des,ans,com])