$search
00001 00002 00003 #--------------------------------------------------------------------------- 00004 00005 class PyEventBinder(object): 00006 """ 00007 Instances of this class are used to bind specific events to event 00008 handlers. 00009 """ 00010 def __init__(self, evtType, expectedIDs=0): 00011 if expectedIDs not in [0, 1, 2]: 00012 raise ValueError, "Invalid number of expectedIDs" 00013 self.expectedIDs = expectedIDs 00014 00015 if type(evtType) == list or type(evtType) == tuple: 00016 self.evtType = evtType 00017 else: 00018 self.evtType = [evtType] 00019 00020 00021 def Bind(self, target, id1, id2, function): 00022 """Bind this set of event types to target.""" 00023 for et in self.evtType: 00024 target.Connect(id1, id2, et, function) 00025 00026 00027 def Unbind(self, target, id1, id2): 00028 """Remove an event binding.""" 00029 success = 0 00030 for et in self.evtType: 00031 success += target.Disconnect(id1, id2, et) 00032 return success != 0 00033 00034 def _getEvtType(self): 00035 """ 00036 Make it easy to get to the default wxEventType typeID for this 00037 event binder. 00038 """ 00039 return self.evtType[0] 00040 00041 typeId = property(_getEvtType) 00042 00043 00044 def __call__(self, *args): 00045 """ 00046 For backwards compatibility with the old EVT_* functions. 00047 Should be called with either (window, func), (window, ID, 00048 func) or (window, ID1, ID2, func) parameters depending on the 00049 type of the event. 00050 """ 00051 assert len(args) == 2 + self.expectedIDs 00052 id1 = wx.ID_ANY 00053 id2 = wx.ID_ANY 00054 target = args[0] 00055 if self.expectedIDs == 0: 00056 func = args[1] 00057 elif self.expectedIDs == 1: 00058 id1 = args[1] 00059 func = args[2] 00060 elif self.expectedIDs == 2: 00061 id1 = args[1] 00062 id2 = args[2] 00063 func = args[3] 00064 else: 00065 raise ValueError, "Unexpected number of IDs" 00066 00067 self.Bind(target, id1, id2, func) 00068 00069 00070 # These two are square pegs that don't fit the PyEventBinder hole... 00071 def EVT_COMMAND(win, id, cmd, func): 00072 win.Connect(id, -1, cmd, func) 00073 def EVT_COMMAND_RANGE(win, id1, id2, cmd, func): 00074 win.Connect(id1, id2, cmd, func) 00075 00076 00077 #---------------------------------------------------------------------------