From cab916901999fdce8a0d33ec0ae042931d95d804 Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Fri, 20 Aug 2010 10:37:18 +0000 Subject: [PATCH] Refactor make_filter to make more reusable svn: r15782 --- src/gui/makefilter.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/gui/makefilter.py diff --git a/src/gui/makefilter.py b/src/gui/makefilter.py new file mode 100644 index 000000000..08c1ac12c --- /dev/null +++ b/src/gui/makefilter.py @@ -0,0 +1,41 @@ +import time +import Filters +from gui.filtereditor import EditFilter +import const +from Filters import reload_custom_filters +from gen.ggettext import sgettext as _ + +def make_filter(dbstate, uistate, objclass, gramps_ids, title=None): + """ + Makes a Gramps Filter through dialog from a enumeration (list, + set, etc.) of gramps_ids of type objclass. + + >>> make_filter(dbstate, uistate, 'Person', ['I0003', ...]) + """ + FilterClass = Filters.GenericFilterFactory(objclass) + rule = getattr(getattr(Filters.Rules, objclass),'RegExpIdOf') + filter = FilterClass() + if title is None: + title = _("Filter %s from Clipboard") % objclass + if callable(title): + title = title() + filter.set_name(title) + struct_time = time.localtime() + filter.set_comment( _("Created on %4d/%02d/%02d") % + (struct_time.tm_year, struct_time.tm_mon, struct_time.tm_mday)) + re = "|".join(["^%s$" % gid for gid in sorted(gramps_ids)]) + filter.add_rule(rule([re])) + filterdb = Filters.FilterList(const.CUSTOM_FILTERS) + filterdb.load() + EditFilter(objclass, dbstate, uistate, [], + filter, filterdb, + lambda : edit_filter_save(uistate, filterdb, objclass)) + +def edit_filter_save(uistate, filterdb, objclass): + """ + If a filter changed, save them all. Reloads, and also calls callback. + """ + filterdb.save() + reload_custom_filters() + uistate.emit('filters-changed', (objclass,)) +