diff --git a/gramps/gen/filters/rules/place/__init__.py b/gramps/gen/filters/rules/place/__init__.py index dfb5a1cff..c82a1f97e 100644 --- a/gramps/gen/filters/rules/place/__init__.py +++ b/gramps/gen/filters/rules/place/__init__.py @@ -37,6 +37,7 @@ from ._hassourceof import HasSourceOf from ._placeprivate import PlacePrivate from ._matchesfilter import MatchesFilter from ._hasplace import HasPlace +from ._hasdata import HasData from ._hasnolatorlon import HasNoLatOrLon from ._inlatlonneighborhood import InLatLonNeighborhood from ._matcheseventfilter import MatchesEventFilter @@ -58,7 +59,7 @@ editor_rule_list = [ PlacePrivate, MatchesFilter, MatchesSourceConfidence, - HasPlace, + HasData, HasNoLatOrLon, InLatLonNeighborhood, MatchesEventFilter, diff --git a/gramps/gen/filters/rules/place/_hasdata.py b/gramps/gen/filters/rules/place/_hasdata.py new file mode 100644 index 000000000..98e3cf2ae --- /dev/null +++ b/gramps/gen/filters/rules/place/_hasdata.py @@ -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 diff --git a/gramps/gui/editors/filtereditor.py b/gramps/gui/editors/filtereditor.py index d3b91e49f..c595357cd 100644 --- a/gramps/gui/editors/filtereditor.py +++ b/gramps/gui/editors/filtereditor.py @@ -63,7 +63,7 @@ from gramps.gen.const import RULE_GLADE, URL_MANUAL_PAGE from ..display import display_help from gramps.gen.errors import WindowActiveError from gramps.gen.lib import (AttributeType, EventType, FamilyRelType, - NameOriginType, NameType, NoteType) + NameOriginType, NameType, NoteType, PlaceType) from gramps.gen.filters import rules from ..autocomp import StandardCustomSelector, fill_entry from ..selectors import SelectorFactory @@ -107,6 +107,7 @@ _name2typeclass = { _('Note type:') : NoteType, _('Name type:') : NameType, _('Surname origin type:'): NameOriginType, + _('Place type:') : PlaceType, } #------------------------------------------------------------------------- @@ -560,6 +561,8 @@ class EditRule(ManagedWindow): additional = self.db.get_name_types() elif v == _('Surname origin type:'): additional = self.db.get_origin_types() + elif v == _('Place type:'): + additional = self.db.get_place_types() t = MySelect(_name2typeclass[v], additional) elif v == _('Inclusive:'): t = MyBoolean(_('Include original person'))