def edit_filter(self, obj): """ Callback which invokes the EditFilter dialog. Will create new filter if called if none is selected. """ from ...editors import EditFilter from gramps.gen.filters import FilterList, GenericFilterFactory from gramps.gen.const import CUSTOM_FILTERS the_filter = None filterdb = FilterList(CUSTOM_FILTERS) filterdb.load() if self.generic.get_active() != 0: model = self.generic.get_model() node = self.generic.get_active_iter() if node: sel_filter = model.get_value(node, 1) # the_filter needs to be a particular object for editor for filt in filterdb.get_filters(self.namespace): if filt.get_name() == sel_filter.get_name(): the_filter = filt else: the_filter = GenericFilterFactory(self.namespace)() if the_filter: EditFilter(self.namespace, self.dbstate, self.uistate, [], the_filter, filterdb, selection_callback=self.edit_filter_save)
def edit_filter(self, namespace, filter_obj): """ Callback which invokes the EditFilter dialog. Will create new filter if called if none is selected. """ from ...editors import EditFilter from gramps.gen.filters import FilterList, GenericFilterFactory from gramps.gen.const import CUSTOM_FILTERS the_filter = None filterdb = FilterList(CUSTOM_FILTERS) filterdb.load() if filter_obj.get_active() != 0: model = filter_obj.get_model() node = filter_obj.get_active_iter() if node: sel_filter = model.get_value(node, 1) # the_filter needs to be a particular object for editor for filt in filterdb.get_filters(namespace): if filt.get_name() == sel_filter.get_name(): the_filter = filt else: the_filter = GenericFilterFactory(namespace)() if the_filter: EditFilter(namespace, self.dbstate, self.uistate, [], the_filter, filterdb, lambda: self.edit_filter_save(filterdb, namespace)) else: # can't edit this filter from ...dialog import ErrorDialog ErrorDialog(_("Cannot edit a system filter"), _("Please select a different filter to edit"))
def filterfunc(filtername): if not Filterfactory.filterdb: Filterfactory.filterdb = FilterList(CUSTOM_FILTERS) Filterfactory.filterdb.load() filter_dict = Filterfactory.filterdb.get_filters_dict(namespace) filt = filter_dict[filtername] return lambda obj: filt.match(obj.handle, self.db)
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 = GenericFilterFactory(objclass) rule = getattr(getattr(rules, objclass.lower()),'RegExpIdOf') filter = FilterClass() if title is None: title = _("Filter %s from Clipboard") % objclass if isinstance(title, abc.Callable): title = title() filter.set_name(title) struct_time = time.localtime() filter.set_comment( _("Created on %(year)4d/%(month)02d/%(day)02d") % { 'year': struct_time.tm_year, 'month': struct_time.tm_mon, 'day': struct_time.tm_mday}) re = "|".join(["^%s$" % gid for gid in sorted(gramps_ids)]) re_rule = rule([re]) re_rule.use_regex = True filter.add_rule(re_rule) filterdb = FilterList(CUSTOM_FILTERS) filterdb.load() EditFilter(objclass, dbstate, uistate, [], filter, filterdb, lambda : edit_filter_save(uistate, filterdb, objclass))
def __init__(self, namespace, filterdb, dbstate, uistate): ManagedWindow.__init__(self, uistate, [], FilterEditor) self.dbstate = dbstate self.db = dbstate.db self.filterdb = FilterList(filterdb) self.filterdb.load() self.width_key = "interface.filter-editor-width" self.height_key = "interface.filter-editor-height" self.namespace = namespace self.define_glade('filter_list', RULE_GLADE) self.filter_list = self.get_widget('filters') self.edit = self.get_widget('filter_list_edit') self.clone = self.get_widget('filter_list_clone') self.delete = self.get_widget('filter_list_delete') self.test = self.get_widget('filter_list_test') self.edit.set_sensitive(False) self.clone.set_sensitive(False) self.delete.set_sensitive(False) self.test.set_sensitive(False) self.set_window(self.get_widget('filter_list'), self.get_widget('filter_list_title'), _TITLES[self.namespace]) self.edit.connect('clicked', self.edit_filter) self.clone.connect('clicked', self.clone_filter) self.test.connect('clicked', self.test_clicked) self.delete.connect('clicked', self.delete_filter) self.connect_button('filter_list_help', self.help_clicked) self.connect_button('filter_list_close', self.close) self.connect_button('filter_list_add', self.add_new_filter) self.uistate.connect('filter-name-changed', self.clean_after_rename) self.clist = ListModel( self.filter_list, [(_('Filter'), 0, 150), (_('Comment'), 1, 150)], self.filter_select_row, self.edit_filter) self.draw_filters() self._set_size() self.show()