• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /macosx-10.10/pyobjc-45/2.6/pyobjc/pyobjc-framework-Cocoa/Examples/AppKit/CocoaBindings/TableModelWithSearch/
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