]>
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 | ||
26 | ||
27 | def __call__(self, *args): | |
28 | """ | |
29 | For backwards compatibility with the old EVT_* functions. | |
30 | Should be called with either (window, func), (window, ID, | |
31 | func) or (window, ID1, ID2, func) parameters depending on the | |
32 | type of the event. | |
33 | """ | |
34 | assert len(args) == 2 + self.expectedIDs | |
35 | id1 = wx.ID_ANY | |
36 | id2 = wx.ID_ANY | |
37 | target = args[0] | |
38 | if self.expectedIDs == 0: | |
39 | func = args[1] | |
40 | elif self.expectedIDs == 1: | |
41 | id1 = args[1] | |
42 | func = args[2] | |
43 | elif self.expectedIDs == 2: | |
44 | id1 = args[1] | |
45 | id2 = args[2] | |
46 | func = args[3] | |
47 | else: | |
48 | raise ValueError, "Unexpected number of IDs" | |
49 | ||
50 | self.Bind(target, id1, id2, func) | |
51 | ||
52 | ||
53 | # These two are square pegs that don't fit the PyEventBinder hole... | |
54 | def EVT_COMMAND(win, id, cmd, func): | |
55 | win.Connect(id, -1, cmd, func) | |
56 | def EVT_COMMAND_RANGE(win, id1, id2, cmd, func): | |
57 | win.Connect(id1, id2, cmd, func) | |
58 | ||
59 | ||
60 | #--------------------------------------------------------------------------- |