diff --git a/po/POTFILES.in b/po/POTFILES.in index d5844bedc..c5cb0be34 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -576,6 +576,7 @@ src/Filters/Rules/Event/_EventPrivate.py src/Filters/Rules/Event/_HasAttribute.py src/Filters/Rules/Event/_HasCitation.py src/Filters/Rules/Event/_HasData.py +src/Filters/Rules/Event/_HasDayOfWeek.py src/Filters/Rules/Event/_HasGallery.py src/Filters/Rules/Event/_HasIdOf.py src/Filters/Rules/Event/_HasNote.py diff --git a/src/Filters/Rules/Event/Makefile.am b/src/Filters/Rules/Event/Makefile.am index 182a77896..e6806dbae 100644 --- a/src/Filters/Rules/Event/Makefile.am +++ b/src/Filters/Rules/Event/Makefile.am @@ -24,6 +24,7 @@ pkgpython_PYTHON = \ _MatchesSourceConfidence.py\ _MatchesSourceFilter.py\ _HasAttribute.py\ + _HasDayOfWeek.py\ __init__.py pkgpyexecdir = @pkgpyexecdir@/Filters/Rules/Event diff --git a/src/Filters/Rules/Event/_HasDayOfWeek.py b/src/Filters/Rules/Event/_HasDayOfWeek.py new file mode 100644 index 000000000..6993cca95 --- /dev/null +++ b/src/Filters/Rules/Event/_HasDayOfWeek.py @@ -0,0 +1,53 @@ +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2013 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +#------------------------------------------------------------------------- +# +# Standard Python modules +# +#------------------------------------------------------------------------- +from gen.ggettext import gettext as _ + +#------------------------------------------------------------------------- +# +# Gramps modules +# +#------------------------------------------------------------------------- +from Filters.Rules import Rule + +#------------------------------------------------------------------------- +# +# HasDayOfWeek +# +#------------------------------------------------------------------------- +class HasDayOfWeek(Rule): + """Rule that matches an event occurring on a particular day of the week.""" + + labels = [ _('Day of Week:') ] + name = _('Events occurring on a particular day of the week') + description = _('Matches events occurring on a particular day of the week') + category = _('General filters') + + def apply(self, db, event): + if not self.list[0]: + return False + else: + dow = event.get_date_object().get_dow() + return dow == int(self.list[0]) diff --git a/src/Filters/Rules/Event/__init__.py b/src/Filters/Rules/Event/__init__.py index 821eaba33..9049b16f9 100644 --- a/src/Filters/Rules/Event/__init__.py +++ b/src/Filters/Rules/Event/__init__.py @@ -48,6 +48,7 @@ from _HasAttribute import HasAttribute from _HasData import HasData from _ChangedSince import ChangedSince from _MatchesPlaceFilter import MatchesPlaceFilter +from _HasDayOfWeek import HasDayOfWeek editor_rule_list = [ AllEvents, @@ -68,5 +69,6 @@ editor_rule_list = [ HasAttribute, HasData, ChangedSince, - MatchesPlaceFilter + MatchesPlaceFilter, + HasDayOfWeek ] diff --git a/src/gen/lib/date.py b/src/gen/lib/date.py index c83e3298c..70993d5ac 100644 --- a/src/gen/lib/date.py +++ b/src/gen/lib/date.py @@ -1492,6 +1492,16 @@ class Date(object): """ return self.text + def get_dow(self): + """ + Return an integer representing the day of the week associated with the + date (Monday=0). + + If the day is not defined, a None is returned. If the date is a + compound date, the lower date day is returned. + """ + return self.sortval % 7 if self.is_regular() else None + def _zero_adjust_ymd(self, y, m, d): year = y if y != 0 else 1 month = max(m, 1) diff --git a/src/gui/filtereditor.py b/src/gui/filtereditor.py index 79305e51d..5c64abe67 100644 --- a/src/gui/filtereditor.py +++ b/src/gui/filtereditor.py @@ -69,6 +69,7 @@ from gui.selectors import SelectorFactory from gen.display.name import displayer as _nd import Utils from gui.widgets import DateEntry +from GrampsLocale import long_days #------------------------------------------------------------------------- # @@ -581,6 +582,9 @@ class EditRule(ManagedWindow.ManagedWindow): [Utils.confidence[i] for i in range(5)]) elif v == _('Date:'): t = DateEntry(self.uistate, self.track) + elif v == _('Day of Week:'): + days_of_week = long_days[2:] + long_days[1:2] + t = MyList(map(str, range(7)), days_of_week) else: t = MyEntry() tlist.append(t)