1# 2# FilteringArrayController.py 3# TableModelWithSearch 4# 5# Created by Bill Bumgarner on Sun Apr 04 2004. 6# Copyright (c) 2004 __MyCompanyName__. All rights reserved. 7# 8 9from Cocoa import * 10import re 11 12kLiteralSearch = u'Literal Search' 13kRegularExpressionSearch = u'Regular Expression Search' 14 15def regexForSearchString(searchString, searchType): 16 if not searchString: 17 return None 18 19 searchString = searchString.strip() 20 if searchType == kLiteralSearch: 21 searchString = re.escape(searchString.strip()) + ur'(?i)' 22 return re.compile(searchString) 23 24def dictValueFilter(dicts, regex): 25 for dct in dicts: 26 for value in dct.itervalues(): 27 print value 28 if regex.search(value): 29 yield dct 30 break 31 32class FilteringArrayController (NSArrayController): 33 searchString = None 34 lastRegex = None 35 searchType = kLiteralSearch 36 37 def arrangeObjects_(self, objects): 38 supermethod = super(FilteringArrayController, self).arrangeObjects_ 39 try: 40 regex = regexForSearchString(self.searchString, self.searchType) 41 except: 42 regex = self.lastRegex 43 self.lastRegex = regex 44 if regex is None: 45 return supermethod(objects) 46 return supermethod(list(dictValueFilter(objects, regex))) 47 48 @objc.IBAction 49 def performSearch_(self, sender): 50 self.searchString = sender.stringValue() 51 self.rearrangeObjects() 52 53 @objc.IBAction 54 def changeSearchType_(self, searchType): 55 self.lastRegex = None 56 self.searchString = None 57 self.searchType = searchType 58 self.rearrangeObjects() 59