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:
parent
2efbe7da69
commit
8b80b70602
@ -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
|
||||||
|
|
||||||
|
@ -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"))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user