4 class WidgetRedirector
:
6 """Support for redirecting arbitrary widget subcommands."""
8 def __init__(self
, widget
):
11 self
.tk
= tk
= widget
.tk
13 self
.orig
= w
+ "_orig"
14 tk
.call("rename", w
, self
.orig
)
15 tk
.createcommand(w
, self
.dispatch
)
18 return "WidgetRedirector(%s<%s>)" % (self
.widget
.__class
__.__name
__,
22 for name
in self
.dict.keys():
24 widget
= self
.widget
; del self
.widget
25 orig
= self
.orig
; del self
.orig
29 tk
.call("rename", orig
, w
)
31 def register(self
, name
, function
):
32 if self
.dict.has_key(name
):
35 previous
= OriginalCommand(self
, name
)
36 self
.dict[name
] = function
37 setattr(self
.widget
, name
, function
)
40 def unregister(self
, name
):
41 if self
.dict.has_key(name
):
42 function
= self
.dict[name
]
44 if hasattr(self
.widget
, name
):
45 delattr(self
.widget
, name
)
50 def dispatch(self
, cmd
, *args
):
51 m
= self
.dict.get(cmd
)
56 return self
.tk
.call((self
.orig
, cmd
) + args
)
61 class OriginalCommand
:
63 def __init__(self
, redir
, name
):
67 self
.orig
= redir
.orig
68 self
.tk_call
= self
.tk
.call
69 self
.orig_and_name
= (self
.orig
, self
.name
)
72 return "OriginalCommand(%s, %s)" % (`self
.redir`
, `self
.name`
)
74 def __call__(self
, *args
):
75 return self
.tk_call(self
.orig_and_name
+ args
)
83 redir
= WidgetRedirector(text
)
87 apply(orig_insert
, args
)
88 orig_insert
= redir
.register("insert", my_insert
)
91 if __name__
== "__main__":