3569: Filter Sidebar should include a link to the Filter Editor

svn: r14248
This commit is contained in:
Doug Blank 2010-02-06 16:08:10 +00:00
parent b3efd702a2
commit 08d00c4865
9 changed files with 64 additions and 19 deletions

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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

View File

@ -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):

View File

@ -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):

View File

@ -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)

View File

@ -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):