ยปCore Development>Code coverage>Lib/idlelib/Percolator.py

Python code coverage for Lib/idlelib/Percolator.py

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