Fixed a wrong apostrophe
[python.git] / Lib / idlelib / Percolator.py
blobebbcba9e6a650728482d1ae940f94152314bf344
1 from WidgetRedirector import WidgetRedirector
2 from Delegator import Delegator
4 class Percolator:
6 def __init__(self, text):
7 # XXX would be nice to inherit from Delegator
8 self.text = text
9 self.redir = WidgetRedirector(text)
10 self.top = self.bottom = Delegator(text)
11 self.bottom.insert = self.redir.register("insert", self.insert)
12 self.bottom.delete = self.redir.register("delete", self.delete)
13 self.filters = []
15 def close(self):
16 while self.top is not self.bottom:
17 self.removefilter(self.top)
18 self.top = None
19 self.bottom.setdelegate(None); self.bottom = None
20 self.redir.close(); self.redir = None
21 self.text = None
23 def insert(self, index, chars, tags=None):
24 # Could go away if inheriting from Delegator
25 self.top.insert(index, chars, tags)
27 def delete(self, index1, index2=None):
28 # Could go away if inheriting from Delegator
29 self.top.delete(index1, index2)
31 def insertfilter(self, filter):
32 # Perhaps rename to pushfilter()?
33 assert isinstance(filter, Delegator)
34 assert filter.delegate is None
35 filter.setdelegate(self.top)
36 self.top = filter
38 def removefilter(self, filter):
39 # XXX Perhaps should only support popfilter()?
40 assert isinstance(filter, Delegator)
41 assert filter.delegate is not None
42 f = self.top
43 if f is filter:
44 self.top = filter.delegate
45 filter.setdelegate(None)
46 else:
47 while f.delegate is not filter:
48 assert f is not self.bottom
49 f.resetcache()
50 f = f.delegate
51 f.setdelegate(filter.delegate)
52 filter.setdelegate(None)
55 def main():
56 class Tracer(Delegator):
57 def __init__(self, name):
58 self.name = name
59 Delegator.__init__(self, None)
60 def insert(self, *args):
61 print self.name, ": insert", args
62 self.delegate.insert(*args)
63 def delete(self, *args):
64 print self.name, ": delete", args
65 self.delegate.delete(*args)
66 root = Tk()
67 root.wm_protocol("WM_DELETE_WINDOW", root.quit)
68 text = Text()
69 text.pack()
70 text.focus_set()
71 p = Percolator(text)
72 t1 = Tracer("t1")
73 t2 = Tracer("t2")
74 p.insertfilter(t1)
75 p.insertfilter(t2)
76 root.mainloop()
77 p.removefilter(t2)
78 root.mainloop()
79 p.insertfilter(t2)
80 p.removefilter(t1)
81 root.mainloop()
83 if __name__ == "__main__":
84 from Tkinter import *
85 main()