7860: Add new place HasData rule

This commit is contained in:
Nick Hall 2015-01-24 18:11:55 +00:00
parent 8be5616802
commit 7ec60ae6a3
3 changed files with 89 additions and 2 deletions

View File

@ -37,6 +37,7 @@ from ._hassourceof import HasSourceOf
from ._placeprivate import PlacePrivate from ._placeprivate import PlacePrivate
from ._matchesfilter import MatchesFilter from ._matchesfilter import MatchesFilter
from ._hasplace import HasPlace from ._hasplace import HasPlace
from ._hasdata import HasData
from ._hasnolatorlon import HasNoLatOrLon from ._hasnolatorlon import HasNoLatOrLon
from ._inlatlonneighborhood import InLatLonNeighborhood from ._inlatlonneighborhood import InLatLonNeighborhood
from ._matcheseventfilter import MatchesEventFilter from ._matcheseventfilter import MatchesEventFilter
@ -58,7 +59,7 @@ editor_rule_list = [
PlacePrivate, PlacePrivate,
MatchesFilter, MatchesFilter,
MatchesSourceConfidence, MatchesSourceConfidence,
HasPlace, HasData,
HasNoLatOrLon, HasNoLatOrLon,
InLatLonNeighborhood, InLatLonNeighborhood,
MatchesEventFilter, MatchesEventFilter,

View File

@ -0,0 +1,83 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
# Copyright (C) 2015 Nick Hall
#
# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#-------------------------------------------------------------------------
#
# Standard Python modules
#
#-------------------------------------------------------------------------
from ....const import GRAMPS_LOCALE as glocale
_ = glocale.translation.sgettext
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
from .. import Rule
from ....lib import PlaceType
#-------------------------------------------------------------------------
#
# HasData
#
#-------------------------------------------------------------------------
class HasData(Rule):
"""
Rule that checks for a place with a particular value
"""
labels = [ _('Name:'),
_('Place type:'),
_('Code:'),
]
name = _('Places matching parameters')
description = _('Matches places with particular parameters')
category = _('General filters')
allow_regex = True
def prepare(self, dbase):
self.place_type = self.list[1]
if self.place_type:
self.place_type = PlaceType()
self.place_type.set_from_xml_str(self.list[1])
def apply(self, db, place):
if not self.match_name(place):
return False
if self.place_type and place.get_type() != self.place_type:
return False
if not self.match_substring(2, place.get_code()):
return False
return True
def match_name(self, place):
"""
Match any name in a list of names.
"""
for name in place.get_all_names():
if self.match_substring(0, name):
return True
return False

View File

@ -63,7 +63,7 @@ from gramps.gen.const import RULE_GLADE, URL_MANUAL_PAGE
from ..display import display_help from ..display import display_help
from gramps.gen.errors import WindowActiveError from gramps.gen.errors import WindowActiveError
from gramps.gen.lib import (AttributeType, EventType, FamilyRelType, from gramps.gen.lib import (AttributeType, EventType, FamilyRelType,
NameOriginType, NameType, NoteType) NameOriginType, NameType, NoteType, PlaceType)
from gramps.gen.filters import rules from gramps.gen.filters import rules
from ..autocomp import StandardCustomSelector, fill_entry from ..autocomp import StandardCustomSelector, fill_entry
from ..selectors import SelectorFactory from ..selectors import SelectorFactory
@ -107,6 +107,7 @@ _name2typeclass = {
_('Note type:') : NoteType, _('Note type:') : NoteType,
_('Name type:') : NameType, _('Name type:') : NameType,
_('Surname origin type:'): NameOriginType, _('Surname origin type:'): NameOriginType,
_('Place type:') : PlaceType,
} }
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
@ -560,6 +561,8 @@ class EditRule(ManagedWindow):
additional = self.db.get_name_types() additional = self.db.get_name_types()
elif v == _('Surname origin type:'): elif v == _('Surname origin type:'):
additional = self.db.get_origin_types() additional = self.db.get_origin_types()
elif v == _('Place type:'):
additional = self.db.get_place_types()
t = MySelect(_name2typeclass[v], additional) t = MySelect(_name2typeclass[v], additional)
elif v == _('Inclusive:'): elif v == _('Inclusive:'):
t = MyBoolean(_('Include original person')) t = MyBoolean(_('Include original person'))