]>
Commit | Line | Data |
---|---|---|
d14a1e28 RD |
1 | |
2 | ||
3 | #--------------------------------------------------------------------------- | |
4 | ||
5 | class PyEventBinder(object): | |
6 | """ | |
7 | Instances of this class are used to bind specific events to event | |
8 | handlers. | |
9 | """ | |
10 | def __init__(self, evtType, expectedIDs=0): | |
11 | if expectedIDs not in [0, 1, 2]: | |
12 | raise ValueError, "Invalid number of expectedIDs" | |
13 | self.expectedIDs = expectedIDs | |
14 | ||
15 | if type(evtType) == list or type(evtType) == tuple: | |
16 | self.evtType = evtType | |
17 | else: | |
18 | self.evtType = [evtType] | |
19 | ||
20 | ||
21 | def Bind(self, target, id1, id2, function): | |
22 | """Bind this set of event types to target.""" | |
23 | for et in self.evtType: | |
24 | target.Connect(id1, id2, et, function) | |
25 | ||
dce2bd22 | 26 | |
ded6ea23 RD |
27 | def Unbind(self, target, id1, id2): |
28 | """Remove an event binding.""" | |
29 | success = 0 | |
30 | for et in self.evtType: | |
31 | success += target.Disconnect(id1, id2, et) | |
32 | return success != 0 | |
dce2bd22 | 33 | |
d576c660 RD |
34 | def _getEvtType(self): |
35 | """ | |
36 | Make it easy to get to the default wxEventType typeID for this | |
37 | event binder. | |
38 | """ | |
39 | return self.evtType[0] | |
40 | ||
41 | typeId = property(_getEvtType) | |
42 | ||
d14a1e28 RD |
43 | |
44 | def __call__(self, *args): | |
45 | """ | |
46 | For backwards compatibility with the old EVT_* functions. | |
47 | Should be called with either (window, func), (window, ID, | |
48 | func) or (window, ID1, ID2, func) parameters depending on the | |
49 | type of the event. | |
50 | """ | |
51 | assert len(args) == 2 + self.expectedIDs | |
52 | id1 = wx.ID_ANY | |
53 | id2 = wx.ID_ANY | |
54 | target = args[0] | |
55 | if self.expectedIDs == 0: | |
56 | func = args[1] | |
57 | elif self.expectedIDs == 1: | |
58 | id1 = args[1] | |
59 | func = args[2] | |
60 | elif self.expectedIDs == 2: | |
61 | id1 = args[1] | |
62 | id2 = args[2] | |
63 | func = args[3] | |
64 | else: | |
65 | raise ValueError, "Unexpected number of IDs" | |
66 | ||
67 | self.Bind(target, id1, id2, func) | |
68 | ||
69 | ||
70 | # These two are square pegs that don't fit the PyEventBinder hole... | |
71 | def EVT_COMMAND(win, id, cmd, func): | |
72 | win.Connect(id, -1, cmd, func) | |
73 | def EVT_COMMAND_RANGE(win, id1, id2, cmd, func): | |
74 | win.Connect(id1, id2, cmd, func) | |
75 | ||
76 | ||
77 | #--------------------------------------------------------------------------- |