3569: Filter Sidebar should include a link to the Filter Editor
svn: r14248
This commit is contained in:
		| @@ -77,7 +77,7 @@ class EventSidebarFilter(SidebarFilter): | ||||
|  | ||||
|         self.generic = gtk.ComboBox() | ||||
|  | ||||
|         SidebarFilter.__init__(self, dbstate, uistate) | ||||
|         SidebarFilter.__init__(self, dbstate, uistate, "Event") | ||||
|  | ||||
|     def create_widget(self): | ||||
|         cell = gtk.CellRendererText() | ||||
| @@ -93,7 +93,7 @@ class EventSidebarFilter(SidebarFilter): | ||||
|         self.add_text_entry(_('Date'), self.filter_date) | ||||
|         self.add_text_entry(_('Place'), self.filter_place) | ||||
|         self.add_text_entry(_('Note'), self.filter_note) | ||||
|         self.add_entry(_('Custom filter'), self.generic) | ||||
|         self.add_filter_entry(_('Custom filter'), self.generic) | ||||
|         self.add_entry(None, self.filter_regex) | ||||
|  | ||||
|     def clear(self, obj): | ||||
|   | ||||
| @@ -98,7 +98,7 @@ class FamilySidebarFilter(SidebarFilter): | ||||
|  | ||||
|         self.generic = gtk.ComboBox() | ||||
|  | ||||
|         SidebarFilter.__init__(self, dbstate, uistate) | ||||
|         SidebarFilter.__init__(self, dbstate, uistate, "Family") | ||||
|  | ||||
|     def create_widget(self): | ||||
|         cell = gtk.CellRendererText() | ||||
| @@ -116,7 +116,7 @@ class FamilySidebarFilter(SidebarFilter): | ||||
|         self.add_entry(_('Family Event'), self.etype) | ||||
|         self.add_entry(_('Marker'), self.mtype) | ||||
|         self.add_text_entry(_('Family Note'), self.filter_note) | ||||
|         self.add_entry(_('Custom filter'), self.generic) | ||||
|         self.add_filter_entry(_('Custom filter'), self.generic) | ||||
|         self.add_entry(None, self.filter_regex) | ||||
|  | ||||
|     def clear(self, obj): | ||||
|   | ||||
| @@ -67,7 +67,7 @@ class MediaSidebarFilter(SidebarFilter): | ||||
|  | ||||
|         self.generic = gtk.ComboBox() | ||||
|  | ||||
|         SidebarFilter.__init__(self, dbstate, uistate) | ||||
|         SidebarFilter.__init__(self, dbstate, uistate, "MediaObject") | ||||
|  | ||||
|     def create_widget(self): | ||||
|         cell = gtk.CellRendererText() | ||||
| @@ -83,7 +83,7 @@ class MediaSidebarFilter(SidebarFilter): | ||||
|         self.add_text_entry(_('Path'), self.filter_path) | ||||
|         self.add_text_entry(_('Date'), self.filter_date) | ||||
|         self.add_text_entry(_('Note'), self.filter_note) | ||||
|         self.add_entry(_('Custom filter'), self.generic) | ||||
|         self.add_filter_entry(_('Custom filter'), self.generic) | ||||
|         self.add_entry(None, self.filter_regex) | ||||
|  | ||||
|     def clear(self, obj): | ||||
|   | ||||
| @@ -71,7 +71,7 @@ class NoteSidebarFilter(SidebarFilter): | ||||
|  | ||||
|         self.generic = gtk.ComboBox() | ||||
|  | ||||
|         SidebarFilter.__init__(self, dbstate, uistate) | ||||
|         SidebarFilter.__init__(self, dbstate, uistate, "Note") | ||||
|  | ||||
|     def create_widget(self): | ||||
|         cell = gtk.CellRendererText() | ||||
| @@ -84,7 +84,7 @@ class NoteSidebarFilter(SidebarFilter): | ||||
|         self.add_text_entry(_('ID'), self.filter_id) | ||||
|         self.add_text_entry(_('Text'), self.filter_text) | ||||
|         self.add_entry(_('Type'), self.ntype) | ||||
|         self.add_entry(_('Custom filter'), self.generic) | ||||
|         self.add_filter_entry(_('Custom filter'), self.generic) | ||||
|         self.add_entry(None, self.filter_regex) | ||||
|  | ||||
|     def clear(self, obj): | ||||
|   | ||||
| @@ -51,7 +51,6 @@ from Filters.Rules.Person import (RegExpName, SearchName, RegExpIdOf, | ||||
|                                   HasNoteMatchingSubstringOf, MatchesFilter) | ||||
| from Filters import GenericFilter, build_filter_model, Rules | ||||
|  | ||||
|  | ||||
| def extract_text(entry_widget): | ||||
|     """ | ||||
|     Extract the text from the entry widget, strips off any extra spaces,  | ||||
| @@ -102,7 +101,7 @@ class PersonSidebarFilter(SidebarFilter): | ||||
|  | ||||
|         self.generic = gtk.ComboBox() | ||||
|  | ||||
|         SidebarFilter.__init__(self, dbstate, uistate) | ||||
|         SidebarFilter.__init__(self, dbstate, uistate, "Person") | ||||
|  | ||||
|     def create_widget(self): | ||||
|         cell = gtk.CellRendererText() | ||||
| @@ -133,7 +132,7 @@ class PersonSidebarFilter(SidebarFilter): | ||||
|         self.add_entry(_('Event'), self.etype) | ||||
|         self.add_entry(_('Marker'), self.mtype) | ||||
|         self.add_text_entry(_('Note'), self.filter_note) | ||||
|         self.add_entry(_('Custom filter'), self.generic) | ||||
|         self.add_filter_entry(_('Custom filter'), self.generic) | ||||
|         self.add_entry(None, self.filter_regex) | ||||
|  | ||||
|     def clear(self, obj): | ||||
| @@ -146,7 +145,7 @@ class PersonSidebarFilter(SidebarFilter): | ||||
|         self.etype.child.set_text(u'') | ||||
|         self.mtype.child.set_text(u'') | ||||
|         self.generic.set_active(0) | ||||
|          | ||||
|  | ||||
|     def get_filter(self): | ||||
|         """ | ||||
|         Extracts the text strings from the sidebar, and uses them to build up | ||||
|   | ||||
| @@ -70,7 +70,7 @@ class PlaceSidebarFilter(SidebarFilter): | ||||
|         self.filter_regex = gtk.CheckButton(_('Use regular expressions')) | ||||
|         self.generic = gtk.ComboBox() | ||||
|  | ||||
|         SidebarFilter.__init__(self, dbstate, uistate) | ||||
|         SidebarFilter.__init__(self, dbstate, uistate, "Place") | ||||
|  | ||||
|     def create_widget(self): | ||||
|         cell = gtk.CellRendererText() | ||||
| @@ -90,7 +90,7 @@ class PlaceSidebarFilter(SidebarFilter): | ||||
|         self.add_text_entry(_('State'), self.filter_state) | ||||
|         self.add_text_entry(_('Country'), self.filter_country) | ||||
|         self.add_text_entry(_('Note'), self.filter_note) | ||||
|         self.add_entry(_('Custom filter'), self.generic) | ||||
|         self.add_filter_entry(_('Custom filter'), self.generic) | ||||
|         self.add_entry(None, self.filter_regex) | ||||
|  | ||||
|     def clear(self, obj): | ||||
|   | ||||
| @@ -77,7 +77,7 @@ class RepoSidebarFilter(SidebarFilter): | ||||
|  | ||||
|         self.generic = gtk.ComboBox() | ||||
|  | ||||
|         SidebarFilter.__init__(self, dbstate, uistate) | ||||
|         SidebarFilter.__init__(self, dbstate, uistate, "Repository") | ||||
|  | ||||
|     def create_widget(self): | ||||
|         cell = gtk.CellRendererText() | ||||
| @@ -93,7 +93,7 @@ class RepoSidebarFilter(SidebarFilter): | ||||
|         self.add_text_entry(_('Address'), self.filter_address) | ||||
|         self.add_text_entry(_('URL'), self.filter_url) | ||||
|         self.add_text_entry(_('Note'), self.filter_note) | ||||
|         self.add_entry(_('Custom filter'), self.generic) | ||||
|         self.add_filter_entry(_('Custom filter'), self.generic) | ||||
|         self.add_entry(None, self.filter_regex) | ||||
|  | ||||
|     def clear(self, obj): | ||||
|   | ||||
| @@ -34,7 +34,7 @@ class SidebarFilter(object): | ||||
|     _FILTER_WIDTH = 200 | ||||
|     _FILTER_ELLIPSIZE = pango.ELLIPSIZE_END | ||||
|  | ||||
|     def __init__(self, dbstate, uistate): | ||||
|     def __init__(self, dbstate, uistate, namespace): | ||||
|         self.position = 1 | ||||
|         self.table = gtk.Table(4, 11) | ||||
|         self.table.set_border_width(6) | ||||
| @@ -48,6 +48,7 @@ class SidebarFilter(object): | ||||
|         uistate.connect('filters-changed', self.on_filters_changed) | ||||
|         self.uistate = uistate | ||||
|         self.dbstate = dbstate | ||||
|         self.namespace = namespace | ||||
|  | ||||
|     def _init_interface(self): | ||||
|         self.table.attach(widgets.MarkupLabel(_('<b>Filter</b>')), | ||||
| @@ -138,3 +139,48 @@ class SidebarFilter(object): | ||||
|     def on_filters_changed(self, namespace): | ||||
|         pass | ||||
|  | ||||
|     def add_filter_entry(self, text, widget): | ||||
|         """ | ||||
|         Adds the text and widget to GUI, with an Edit button. | ||||
|         """ | ||||
|         hbox = gtk.HBox() | ||||
|         hbox.pack_start(widget) | ||||
|         hbox.pack_start(widgets.SimpleButton(gtk.STOCK_EDIT, self.edit_filter)) | ||||
|         self.add_entry(text, hbox) | ||||
|  | ||||
|     def edit_filter(self, obj): | ||||
|         """ | ||||
|         Callback which invokes the EditFilter dialog. Will create new | ||||
|         filter if called if none is selected. | ||||
|         """ | ||||
|         from gui.filtereditor import EditFilter | ||||
|         from Filters import FilterList, GenericFilterFactory | ||||
|         import const | ||||
|         the_filter = None | ||||
|         filterdb = FilterList(const.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, | ||||
|                        lambda : self.edit_filter_save(filterdb)) | ||||
|  | ||||
|     def edit_filter_save(self, filterdb): | ||||
|         """ | ||||
|         If a filter changed, save them all. Reloads, and also calls callback. | ||||
|         """ | ||||
|         from Filters import reload_custom_filters | ||||
|         filterdb.save() | ||||
|         reload_custom_filters() | ||||
|         self.on_filters_changed(self.namespace) | ||||
|  | ||||
|   | ||||
| @@ -65,7 +65,7 @@ class SourceSidebarFilter(SidebarFilter): | ||||
|  | ||||
|         self.generic = gtk.ComboBox() | ||||
|  | ||||
|         SidebarFilter.__init__(self, dbstate, uistate) | ||||
|         SidebarFilter.__init__(self, dbstate, uistate, "Source") | ||||
|  | ||||
|     def create_widget(self): | ||||
|         cell = gtk.CellRendererText() | ||||
| @@ -80,7 +80,7 @@ class SourceSidebarFilter(SidebarFilter): | ||||
|         self.add_text_entry(_('Author'), self.filter_author) | ||||
|         self.add_text_entry(_('Publication'), self.filter_pub) | ||||
|         self.add_text_entry(_('Note'), self.filter_note) | ||||
|         self.add_entry(_('Custom filter'), self.generic) | ||||
|         self.add_filter_entry(_('Custom filter'), self.generic) | ||||
|         self.add_entry(None, self.filter_regex) | ||||
|  | ||||
|     def clear(self, obj): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user