diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 33c1b1830..ecbee79ab 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,7 @@ +2005-04-06 Richard Taylor + * src/GenericFilter.py: Added HasSourceOf rule + * src/plugins/FilterEditor.py: Added MySource combobox for selecting source IDs. + 2005-04-06 Martin Hawlisch * src/PedView.py: Truncate place names because they tend to be loooong. diff --git a/gramps2/src/GenericFilter.py b/gramps2/src/GenericFilter.py index 57977b530..df1470b25 100644 --- a/gramps2/src/GenericFilter.py +++ b/gramps2/src/GenericFilter.py @@ -1973,6 +1973,48 @@ class HasTextMatchingRegexpOf(HasTextMatchingSubstringOf): self.cache_sources() +#------------------------------------------------------------------------- +# +# HasSourceOf +# +#------------------------------------------------------------------------- +class HasSourceOf(Rule): + """Rule that checks people that have a particular source.""" + + labels = [ _('Source ID:') ] + + def prepare(self,db): + self.db = db + + def name(self): + return 'Has source of' + + def category(self): + return _('Event filters') + + def description(self): + return _('Matches people who have a particular source') + + def apply(self,db,p_id): + if not self.list[0]: + return False + + p = self.db.get_person_from_handle(p_id) + + return p.has_source_reference( + self.db.get_source_from_gramps_id(self.list[0]).get_handle()) + +## if len(p.get_source_references()) > 0: +## for src in p.get_source_references(): + +## if self.list[0] == \ +## self.db.get_source_from_handle( +## src.get_base_handle()).get_gramps_id(): +## return True + +## return False + + #------------------------------------------------------------------------- # # GenericFilter @@ -2144,6 +2186,7 @@ tasks = { unicode(_("Has the family event")) : HasFamilyEvent, unicode(_("Has the personal attribute")) : HasAttribute, unicode(_("Has the family attribute")) : HasFamilyAttribute, + unicode(_("Has source of")) : HasSourceOf, unicode(_("Matches the filter named")) : MatchesFilter, unicode(_("Is spouse of filter match")) : IsSpouseOfFilterMatch, unicode(_("Is a sibling of filter match")) : IsSiblingOfFilterMatch, diff --git a/gramps2/src/plugins/FilterEditor.py b/gramps2/src/plugins/FilterEditor.py index d0ae10f32..ca901652b 100644 --- a/gramps2/src/plugins/FilterEditor.py +++ b/gramps2/src/plugins/FilterEditor.py @@ -133,6 +133,41 @@ class MyFilters(gtk.ComboBox): if val in self.flist: self.set_active(self.flist.index(val)) +#------------------------------------------------------------------------- +# +# MySource - Combo box with list of sources with a standard interface +# +#------------------------------------------------------------------------- +class MySource(gtk.ComboBox): + + def __init__(self,db): + gtk.ComboBox.__init__(self) + self.db = db + store = gtk.ListStore(str) + self.set_model(store) + cell = gtk.CellRendererText() + self.pack_start(cell,True) + self.add_attribute(cell,'text',0) + + self.slist = [] + for src_handle in self.db.get_source_handles(sort_handles=True): + src = self.db.get_source_from_handle(src_handle) + self.slist.append(src.get_gramps_id()) + store.append(row=[src.get_title()]) + + self.set_active(0) + self.show() + + def get_text(self): + active = self.get_active() + if active < 0: + return "" + return self.slist[active] + + def set_text(self,val): + if val in self.slist: + self.set_active(self.slist.index(val)) + #------------------------------------------------------------------------- # # MyPlaces - AutoCombo text entry with list of places attached. Provides @@ -641,6 +676,8 @@ class EditRule: t = MyInteger(1,32) elif v == _('ID:'): t = MyID(self.db) + elif v == _('Source ID:'): + t = MySource(self.db) elif v == _('Filter name:'): t = MyFilters(self.filterdb.get_filters()) elif _name2list.has_key(v1): @@ -655,7 +692,7 @@ class EditRule: t = MyBoolean(_('Use exact case of letters')) elif v == _('Regular-Expression matching:'): t = MyBoolean(_('Use regular expression')) - else: + else: t = MyEntry() tlist.append(t) table.attach(l,1,2,pos,pos+1,gtk.FILL,0,5,5)