* src/plugins/BookReport.py (BookList.save): Write encoding.
* src/plugins/FilterEditor.py (MyBoolean): Add class. (FilterEditor.edit_rule): Implement Inclusive option. * src/GenericFilter.py: Add categories and descriptions. Implement Inclusive option. svn: r2093
This commit is contained in:
parent
ab232deacd
commit
9e6a19860e
@ -1,3 +1,10 @@
|
|||||||
|
2003-09-04 Alex Roitman <shura@alex.neuro.umn.edu>
|
||||||
|
* src/plugins/BookReport.py (BookList.save): Write encoding.
|
||||||
|
* src/plugins/FilterEditor.py (MyBoolean): Add class.
|
||||||
|
(FilterEditor.edit_rule): Implement Inclusive option.
|
||||||
|
* src/GenericFilter.py: Add categories and descriptions. Implement
|
||||||
|
Inclusive option.
|
||||||
|
|
||||||
2003-09-04 Don Allingham <dallingham@users.sourceforge.net>
|
2003-09-04 Don Allingham <dallingham@users.sourceforge.net>
|
||||||
* src/RelLib.py: backout yesterday's change
|
* src/RelLib.py: backout yesterday's change
|
||||||
|
|
||||||
|
@ -189,7 +189,7 @@ class IsDescendantOf(Rule):
|
|||||||
"""Rule that checks for a person that is a descendant
|
"""Rule that checks for a person that is a descendant
|
||||||
of a specified person"""
|
of a specified person"""
|
||||||
|
|
||||||
labels = [ _('ID:') ]
|
labels = [ _('ID:'), _('Inclusive:') ]
|
||||||
|
|
||||||
def __init__(self,list):
|
def __init__(self,list):
|
||||||
Rule.__init__(self,list)
|
Rule.__init__(self,list)
|
||||||
@ -207,11 +207,15 @@ class IsDescendantOf(Rule):
|
|||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
self.orig = p
|
self.orig = p
|
||||||
|
if int(self.list[1]):
|
||||||
|
first = 0
|
||||||
|
else:
|
||||||
|
first = 1
|
||||||
|
|
||||||
if not self.init:
|
if not self.init:
|
||||||
self.init = 1
|
self.init = 1
|
||||||
root = db.getPerson(self.list[0])
|
root = db.getPerson(self.list[0])
|
||||||
self.init_list(root,1)
|
self.init_list(root,first)
|
||||||
return self.map.has_key(p.getId())
|
return self.map.has_key(p.getId())
|
||||||
|
|
||||||
def init_list(self,p,first):
|
def init_list(self,p,first):
|
||||||
@ -231,7 +235,7 @@ class IsDescendantOfFilterMatch(IsDescendantOf):
|
|||||||
"""Rule that checks for a person that is a descendant
|
"""Rule that checks for a person that is a descendant
|
||||||
of someone matched by a filter"""
|
of someone matched by a filter"""
|
||||||
|
|
||||||
labels = [ _('Filter name:') ]
|
labels = [ _('Filter name:'), _('Inclusive:') ]
|
||||||
|
|
||||||
def __init__(self,list):
|
def __init__(self,list):
|
||||||
IsDescendantOf.__init__(self,list)
|
IsDescendantOf.__init__(self,list)
|
||||||
@ -247,13 +251,17 @@ class IsDescendantOfFilterMatch(IsDescendantOf):
|
|||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
self.orig = p
|
self.orig = p
|
||||||
|
if int(self.list[1]):
|
||||||
|
first = 0
|
||||||
|
else:
|
||||||
|
first = 1
|
||||||
|
|
||||||
if not self.init:
|
if not self.init:
|
||||||
self.init = 1
|
self.init = 1
|
||||||
filter = MatchesFilter(self.list)
|
filter = MatchesFilter(self.list)
|
||||||
for person in db.getPersonMap ().values ():
|
for person in db.getPersonMap ().values ():
|
||||||
if filter.apply (db, person):
|
if filter.apply (db, person):
|
||||||
self.init_list (person, 1)
|
self.init_list (person, first)
|
||||||
return self.map.has_key(p.getId())
|
return self.map.has_key(p.getId())
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@ -363,6 +371,12 @@ class IsChildOfFilterMatch(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Is a child of filter match'
|
return 'Is a child of filter match'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches the person that is a child of someone matched by a filter")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _('Family filters')
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
self.orig = p
|
self.orig = p
|
||||||
|
|
||||||
@ -397,7 +411,7 @@ class IsDescendantFamilyOf(Rule):
|
|||||||
return _('Descendant filters')
|
return _('Descendant filters')
|
||||||
|
|
||||||
def description(self):
|
def description(self):
|
||||||
return _("Matches people that are descendants or the spouse "
|
return _("Matches people that are descendants or the spouse "
|
||||||
"of a descendant of a specified person")
|
"of a descendant of a specified person")
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
@ -423,7 +437,6 @@ class IsDescendantFamilyOf(Rule):
|
|||||||
if s:
|
if s:
|
||||||
if self.search(s,0):
|
if self.search(s,0):
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@ -434,7 +447,7 @@ class IsDescendantFamilyOf(Rule):
|
|||||||
class IsAncestorOf(Rule):
|
class IsAncestorOf(Rule):
|
||||||
"""Rule that checks for a person that is an ancestor of a specified person"""
|
"""Rule that checks for a person that is an ancestor of a specified person"""
|
||||||
|
|
||||||
labels = [ _('ID:') ]
|
labels = [ _('ID:'), _('Inclusive:') ]
|
||||||
|
|
||||||
def __init__(self,list):
|
def __init__(self,list):
|
||||||
Rule.__init__(self,list)
|
Rule.__init__(self,list)
|
||||||
@ -444,12 +457,22 @@ class IsAncestorOf(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Is an ancestor of'
|
return 'Is an ancestor of'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches people that are ancestors of a specified person")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _("Ancestral filters")
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
self.orig = p
|
self.orig = p
|
||||||
|
if int(self.list[1]):
|
||||||
|
first = 0
|
||||||
|
else:
|
||||||
|
first = 1
|
||||||
if not self.init:
|
if not self.init:
|
||||||
self.init = 1
|
self.init = 1
|
||||||
root = db.getPerson(self.list[0])
|
root = db.getPerson(self.list[0])
|
||||||
self.init_ancestor_list(root,1)
|
self.init_ancestor_list(root,first)
|
||||||
return self.map.has_key(p.getId())
|
return self.map.has_key(p.getId())
|
||||||
|
|
||||||
def init_ancestor_list(self,p,first):
|
def init_ancestor_list(self,p,first):
|
||||||
@ -477,7 +500,7 @@ class IsAncestorOfFilterMatch(IsAncestorOf):
|
|||||||
"""Rule that checks for a person that is an ancestor of
|
"""Rule that checks for a person that is an ancestor of
|
||||||
someone matched by a filter"""
|
someone matched by a filter"""
|
||||||
|
|
||||||
labels = [ _('Filter name:') ]
|
labels = [ _('Filter name:'), _('Inclusive:') ]
|
||||||
|
|
||||||
def __init__(self,list):
|
def __init__(self,list):
|
||||||
IsAncestorOf.__init__(self,list)
|
IsAncestorOf.__init__(self,list)
|
||||||
@ -485,14 +508,25 @@ class IsAncestorOfFilterMatch(IsAncestorOf):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Is an ancestor of filter match'
|
return 'Is an ancestor of filter match'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches people that are ancestors "
|
||||||
|
"of of someone matched by a filter")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _("Ancestral filters")
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
self.orig = p
|
self.orig = p
|
||||||
|
if int(self.list[1]):
|
||||||
|
first = 0
|
||||||
|
else:
|
||||||
|
first = 1
|
||||||
if not self.init:
|
if not self.init:
|
||||||
self.init = 1
|
self.init = 1
|
||||||
filter = MatchesFilter(self.list)
|
filter = MatchesFilter(self.list[0])
|
||||||
for person in db.getPersonMap ().values ():
|
for person in db.getPersonMap ().values ():
|
||||||
if filter.apply (db, person):
|
if filter.apply (db, person):
|
||||||
self.init_ancestor_list (person,1)
|
self.init_ancestor_list (person,first)
|
||||||
return self.map.has_key(p.getId())
|
return self.map.has_key(p.getId())
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@ -514,6 +548,13 @@ class IsLessThanNthGenerationAncestorOf(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Is an ancestor of person not more than N generations away'
|
return 'Is an ancestor of person not more than N generations away'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches people that are ancestors "
|
||||||
|
"of a specified person not more than N generations away")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _("Ancestral filters")
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
self.orig = p
|
self.orig = p
|
||||||
if not self.init:
|
if not self.init:
|
||||||
@ -559,6 +600,13 @@ class IsMoreThanNthGenerationAncestorOf(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Is an ancestor of person at least N generations away'
|
return 'Is an ancestor of person at least N generations away'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches people that are ancestors "
|
||||||
|
"of a specified person at least N generations away")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _("Ancestral filters")
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
self.orig = p
|
self.orig = p
|
||||||
if not self.init:
|
if not self.init:
|
||||||
@ -602,6 +650,12 @@ class IsParentOfFilterMatch(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Is a parent of filter match'
|
return 'Is a parent of filter match'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches the person that is a parent of someone matched by a filter")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _('Family filters')
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
self.orig = p
|
self.orig = p
|
||||||
|
|
||||||
@ -635,6 +689,13 @@ class HasCommonAncestorWith(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Has a common ancestor with'
|
return 'Has a common ancestor with'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches people that have a common ancestor "
|
||||||
|
"with a specified person")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _("Ancestral filters")
|
||||||
|
|
||||||
def __init__(self,list):
|
def __init__(self,list):
|
||||||
Rule.__init__(self,list)
|
Rule.__init__(self,list)
|
||||||
# Keys in `ancestor_cache' are ancestors of list[0].
|
# Keys in `ancestor_cache' are ancestors of list[0].
|
||||||
@ -674,6 +735,13 @@ class HasCommonAncestorWithFilterMatch(HasCommonAncestorWith):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Has a common ancestor with filter match'
|
return 'Has a common ancestor with filter match'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches people that have a common ancestor "
|
||||||
|
"with someone matched by a filter")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _("Ancestral filters")
|
||||||
|
|
||||||
def __init__(self,list):
|
def __init__(self,list):
|
||||||
HasCommonAncestorWith.__init__(self,list)
|
HasCommonAncestorWith.__init__(self,list)
|
||||||
|
|
||||||
@ -698,6 +766,12 @@ class IsMale(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Is a male'
|
return 'Is a male'
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _('General filters')
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _('Matches all males')
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
return p.getGender() == RelLib.Person.male
|
return p.getGender() == RelLib.Person.male
|
||||||
|
|
||||||
@ -722,6 +796,12 @@ class HasEvent(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Has the personal event'
|
return 'Has the personal event'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches the person with a personal event of a particular value")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _('Event filters')
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
for event in p.getEventList():
|
for event in p.getEventList():
|
||||||
val = 1
|
val = 1
|
||||||
@ -763,6 +843,12 @@ class HasFamilyEvent(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Has the family event'
|
return 'Has the family event'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches the person with a family event of a particular value")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _('Event filters')
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
for f in p.getFamilyList():
|
for f in p.getFamilyList():
|
||||||
for event in f.getEventList():
|
for event in f.getEventList():
|
||||||
@ -797,6 +883,12 @@ class HasRelationship(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Has the relationships'
|
return 'Has the relationships'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches the person who has a particular relationship")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _('Family filters')
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
rel_type = 0
|
rel_type = 0
|
||||||
cnt = 0
|
cnt = 0
|
||||||
@ -853,6 +945,12 @@ class HasBirth(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Has the birth'
|
return 'Has the birth'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches the person with a birth of a particular value")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _('Event filters')
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
event = p.getBirth()
|
event = p.getBirth()
|
||||||
ed = event.getDescription().upper()
|
ed = event.getDescription().upper()
|
||||||
@ -887,6 +985,12 @@ class HasDeath(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Has the death'
|
return 'Has the death'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches the person with a death of a particular value")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _('Event filters')
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
event = p.getDeath()
|
event = p.getDeath()
|
||||||
ed = event.getDescription().upper()
|
ed = event.getDescription().upper()
|
||||||
@ -961,6 +1065,12 @@ class HasNameOf(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Has a name'
|
return 'Has a name'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches the person with a specified (partial) name")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _('General filters')
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
self.f = self.list[0]
|
self.f = self.list[0]
|
||||||
self.l = self.list[1]
|
self.l = self.list[1]
|
||||||
@ -1017,6 +1127,12 @@ class IsSpouseOfFilterMatch(Rule):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return 'Is spouse of filter match'
|
return 'Is spouse of filter match'
|
||||||
|
|
||||||
|
def description(self):
|
||||||
|
return _("Matches the person married to someone matching a filter")
|
||||||
|
|
||||||
|
def category(self):
|
||||||
|
return _('Family filters')
|
||||||
|
|
||||||
def apply(self,db,p):
|
def apply(self,db,p):
|
||||||
filter = MatchesFilter (self.list)
|
filter = MatchesFilter (self.list)
|
||||||
for family in p.getFamilyList ():
|
for family in p.getFamilyList ():
|
||||||
|
@ -365,7 +365,7 @@ class BookList:
|
|||||||
Saves the current BookList to the associated file.
|
Saves the current BookList to the associated file.
|
||||||
"""
|
"""
|
||||||
f = open(self.file,"w")
|
f = open(self.file,"w")
|
||||||
f.write("<?xml version=\"1.0\"?>\n")
|
f.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
|
||||||
f.write('<booklist>\n')
|
f.write('<booklist>\n')
|
||||||
|
|
||||||
for name in self.bookmap.keys():
|
for name in self.bookmap.keys():
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Gramps - a GTK+/GNOME based genealogy program
|
# Gramps - a GTK+/GNOME based genealogy program
|
||||||
#
|
#
|
||||||
# Copyright (C) 2000 Donald N. Allingham
|
# Copyright (C) 2000-2003 Donald N. Allingham
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -60,6 +60,24 @@ _name2list = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# MyBoolean - check button with standard interface
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
class MyBoolean(gtk.CheckButton):
|
||||||
|
|
||||||
|
def __init__(self,label=None):
|
||||||
|
gtk.CheckButton.__init__(self,label)
|
||||||
|
self.show()
|
||||||
|
|
||||||
|
def get_text(self):
|
||||||
|
return str(int(self.get_active()))
|
||||||
|
|
||||||
|
def set_text(self,val):
|
||||||
|
is_active = not not int(val)
|
||||||
|
self.set_active(is_active)
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# MyInteger - spin button with standard interface
|
# MyInteger - spin button with standard interface
|
||||||
@ -448,6 +466,8 @@ class FilterEditor:
|
|||||||
t = MyFilters(self.filterdb.get_filters())
|
t = MyFilters(self.filterdb.get_filters())
|
||||||
elif _name2list.has_key(v1):
|
elif _name2list.has_key(v1):
|
||||||
t = MySelect(_name2list[v1])
|
t = MySelect(_name2list[v1])
|
||||||
|
elif v == 'Inclusive:':
|
||||||
|
t = MyBoolean(_('Include original person'))
|
||||||
else:
|
else:
|
||||||
t = MyEntry()
|
t = MyEntry()
|
||||||
tlist.append(t)
|
tlist.append(t)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user