2007-08-16 Don Allingham <don@gramps-project.org>

* src/Filters/SideBar/_PersonSidebarFilter.py: document a little bit more



svn: r8823
This commit is contained in:
Don Allingham 2007-08-17 04:17:57 +00:00
parent 2efbe7da69
commit 8b80b70602
2 changed files with 60 additions and 19 deletions

View File

@ -1,3 +1,6 @@
2007-08-16 Don Allingham <don@gramps-project.org>
* src/Filters/SideBar/_PersonSidebarFilter.py: document a little bit more
2007-08-16 Benny Malengier <bm@cage.ugent.be> 2007-08-16 Benny Malengier <bm@cage.ugent.be>
* src/plugins/GraphViz.py: Port FamilyLines.py people images to descendant chart * src/plugins/GraphViz.py: Port FamilyLines.py people images to descendant chart

View File

@ -8,7 +8,7 @@
# the Free Software Foundation; either version 2 of the License, or # the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
@ -47,6 +47,15 @@ from _SidebarFilter import SidebarFilter
from Filters.Rules.Person import * from Filters.Rules.Person import *
from Filters import GenericFilter, build_filter_model, Rules from Filters import GenericFilter, build_filter_model, Rules
def extract_text(entry_widget):
"""
Extracts the text from the entry widget, strips off any extra spaces,
and converts the string to unicode. For some strange reason a gtk bug
prevents the extracted string from being of type unicode.
"""
return unicode(entry_widget.get_text().strip())
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# PersonSidebarFilter class # PersonSidebarFilter class
@ -64,19 +73,19 @@ class PersonSidebarFilter(SidebarFilter):
self.filter_birth = gtk.Entry() self.filter_birth = gtk.Entry()
self.filter_death = gtk.Entry() self.filter_death = gtk.Entry()
self.filter_event = RelLib.Event() self.filter_event = RelLib.Event()
self.filter_event.set_type((RelLib.EventType.CUSTOM,u'')) self.filter_event.set_type((RelLib.EventType.CUSTOM, u''))
self.etype = gtk.ComboBoxEntry() self.etype = gtk.ComboBoxEntry()
self.event_menu = GrampsWidgets.MonitoredDataType( self.event_menu = GrampsWidgets.MonitoredDataType(
self.etype, self.etype,
self.filter_event.set_type, self.filter_event.set_type,
self.filter_event.get_type) self.filter_event.get_type)
self.filter_marker = RelLib.Person() self.filter_marker = RelLib.Person()
self.filter_marker.set_marker((RelLib.MarkerType.CUSTOM,u'')) self.filter_marker.set_marker((RelLib.MarkerType.CUSTOM, u''))
self.mtype = gtk.ComboBoxEntry() self.mtype = gtk.ComboBoxEntry()
self.marker_menu = GrampsWidgets.MonitoredDataType( self.marker_menu = GrampsWidgets.MonitoredDataType(
self.mtype, self.mtype,
self.filter_marker.set_marker, self.filter_marker.set_marker,
self.filter_marker.get_marker) self.filter_marker.get_marker)
self.filter_note = gtk.Entry() self.filter_note = gtk.Entry()
@ -107,9 +116,9 @@ class PersonSidebarFilter(SidebarFilter):
self.add_text_entry(_('Name'), self.filter_name) self.add_text_entry(_('Name'), self.filter_name)
self.add_text_entry(_('ID'), self.filter_id) self.add_text_entry(_('ID'), self.filter_id)
self.add_entry(_('Gender'), self.filter_gender) self.add_entry(_('Gender'), self.filter_gender)
self.add_text_entry(_('Birth date'), self.filter_birth, self.add_text_entry(_('Birth date'), self.filter_birth,
_('example: "%s" or "%s"') % (msg1, msg2)) _('example: "%s" or "%s"') % (msg1, msg2))
self.add_text_entry(_('Death date'), self.filter_death, self.add_text_entry(_('Death date'), self.filter_death,
_('example: "%s" or "%s"') % (msg1, msg2)) _('example: "%s" or "%s"') % (msg1, msg2))
self.add_entry(_('Event'), self.etype) self.add_entry(_('Event'), self.etype)
self.add_entry(_('Marker'), self.mtype) self.add_entry(_('Marker'), self.mtype)
@ -127,31 +136,49 @@ class PersonSidebarFilter(SidebarFilter):
self.etype.child.set_text(u'') self.etype.child.set_text(u'')
self.mtype.child.set_text(u'') self.mtype.child.set_text(u'')
self.generic.set_active(0) self.generic.set_active(0)
def get_filter(self): def get_filter(self):
name = unicode(self.filter_name.get_text()).strip() """
gid = unicode(self.filter_id.get_text()).strip() Extracts the text strings from the sidebar, and uses them to build up
birth = unicode(self.filter_birth.get_text()).strip() a new filter.
death = unicode(self.filter_death.get_text()).strip() """
# extract text values from the entry widgets
name = extract_text(self.filter_name)
gid = extract_text(self.filter_id)
birth = extract_text(self.filter_birth)
death = extract_text(self.filter_death)
note = extract_text(self.filter_note)
# extract remaining data from the menus
etype = self.filter_event.get_type().xml_str() etype = self.filter_event.get_type().xml_str()
mtype = self.filter_marker.get_marker().xml_str() mtype = self.filter_marker.get_marker().xml_str()
note = unicode(self.filter_note.get_text()).strip()
gender = self.filter_gender.get_active() gender = self.filter_gender.get_active()
regex = self.filter_regex.get_active() regex = self.filter_regex.get_active()
gen = self.generic.get_active() > 0 gen = self.generic.get_active() > 0
# check to see if the filter is empty. If it is empty, then
# we don't build a filter
empty = not (name or gid or birth or death or etype or mtype empty = not (name or gid or birth or death or etype or mtype
or note or gender or regex or gen) or note or gender or regex or gen)
if empty: if empty:
generic_filter = None generic_filter = None
else: else:
# build a GenericFilter
generic_filter = GenericFilter() generic_filter = GenericFilter()
# if the name is not empty, choose either the regular expression
# version or the normal text match
if name: if name:
if regex: if regex:
rule = RegExpName([name]) rule = RegExpName([name])
else: else:
rule = SearchName([name]) rule = SearchName([name])
generic_filter.add_rule(rule) generic_filter.add_rule(rule)
# if the id is not empty, choose either the regular expression
# version or the normal text match
if gid: if gid:
if regex: if regex:
rule = RegExpIdOf([gid]) rule = RegExpIdOf([gid])
@ -159,6 +186,7 @@ class PersonSidebarFilter(SidebarFilter):
rule = MatchIdOf([gid]) rule = MatchIdOf([gid])
generic_filter.add_rule(rule) generic_filter.add_rule(rule)
# check the gender, and select the right rule based on gender
if gender > 0: if gender > 0:
if gender == 1: if gender == 1:
generic_filter.add_rule(IsMale([])) generic_filter.add_rule(IsMale([]))
@ -167,20 +195,30 @@ class PersonSidebarFilter(SidebarFilter):
else: else:
generic_filter.add_rule(HasUnknownGender([])) generic_filter.add_rule(HasUnknownGender([]))
# check the Marker type
if mtype: if mtype:
rule = HasMarkerOf([mtype]) rule = HasMarkerOf([mtype])
generic_filter.add_rule(rule) generic_filter.add_rule(rule)
# Build an event filter if needed
if etype: if etype:
rule = HasEvent([etype, u'', u'', u'']) rule = HasEvent([etype, u'', u'', u''])
generic_filter.add_rule(rule) generic_filter.add_rule(rule)
# Build birth event filter if needed
# Arguments for the HasBirth filter are Date, Place, and Description
# Since the value we extracted to the "birth" variable is the
# request date, we pass it as the first argument
if birth: if birth:
rule = HasBirth([birth,u'',u'']) rule = HasBirth([birth, u'', u''])
generic_filter.add_rule(rule) generic_filter.add_rule(rule)
# Build death event filter if needed
if death: if death:
rule = HasDeath([death,u'',u'']) rule = HasDeath([death, u'', u''])
generic_filter.add_rule(rule) generic_filter.add_rule(rule)
# Build note filter if needed
if note: if note:
if regex: if regex:
rule = HasNoteRegexp([note]) rule = HasNoteRegexp([note])
@ -197,7 +235,7 @@ class PersonSidebarFilter(SidebarFilter):
return generic_filter return generic_filter
def on_filters_changed(self,name_space): def on_filters_changed(self, name_space):
if name_space == 'Person': if name_space == 'Person':
all = GenericFilter() all = GenericFilter()
all.set_name(_("None")) all.set_name(_("None"))