comparison clients/editor/scripts/events/events.py @ 324:e249fa887259

* Split EventListener into several internal subclasses. This fixes issue with multiple inheritance where each BaseClass.__init__() call would overwrite the previous one. This meant that you could only add EventListener to one type of event managers. * MapView now adds maps and layers to EventListener * LayerEditor should now fetch only NameClash exceptions when creating or editing layers
author cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
date Fri, 21 Aug 2009 14:39:54 +0000
parents 51cc05d862f2
children 54de5aebf732
comparison
equal deleted inserted replaced
323:b64ce990abb1 324:e249fa887259
44 def __init__(self): 44 def __init__(self):
45 self.key = None 45 self.key = None
46 self.modifiers = {"alt":False,"ctrl":False,"shift":False,"meta":False} 46 self.modifiers = {"alt":False,"ctrl":False,"shift":False,"meta":False}
47 self.signal = None 47 self.signal = None
48 48
49 class EventListener(IKeyListener, ICommandListener, IMouseListener, LayerChangeListener, MapChangeListener, ConsoleExecuter): 49 class EventListener:
50 # NOTE: As FIFEdit currently covers the entire screen with widgets, 50 # NOTE: As FIFEdit currently covers the entire screen with widgets,
51 # FIFE doesn't receive any mouse or key events. Therefore we have to add 51 # FIFE doesn't receive any mouse or key events. Therefore we have to add
52 # mouse and key event tracking for the central widget 52 # mouse and key event tracking for the central widget
53 53
54 def __init__(self, engine): 54 def __init__(self, engine):
55 self.engine = engine 55 self.engine = engine
56 56
57 eventmanager = self.engine.getEventManager() 57 eventmanager = self.engine.getEventManager()
58 self.keysequences = [] 58 self.keysequences = []
59 59
60 IKeyListener.__init__(self) 60 self.keylistener = _IKeyListener(engine)
61 eventmanager.addKeyListener(self) 61 self.mouselistener = _IMouseListener(engine)
62 62 self.mapchangelistener = _MapChangeListener(engine)
63 ICommandListener.__init__(self) 63 self.layerchangelistener = _LayerChangeListener(engine)
64 eventmanager.addCommandListener(self) 64 self.commandlistener = _ICommandListener(engine)
65 65 self.consoleexecuter = _ConsoleExecuter(engine)
66 IMouseListener.__init__(self)
67 eventmanager.addMouseListener(self)
68
69 ConsoleExecuter.__init__(self)
70 self.engine.getGuiManager().getConsole().setConsoleExecuter(self)
71
72 MapChangeListener.__init__(self)
73 LayerChangeListener.__init__(self)
74 66
75 self.controlPressed = False 67 self.controlPressed = False
76 self.altPressed = False 68 self.altPressed = False
77 self.shiftPressed = False 69 self.shiftPressed = False
78 self.metaPressed = False 70 self.metaPressed = False
79 71
72 eventmanager.addKeyListener(self.keylistener)
73 eventmanager.addCommandListener(self.commandlistener)
74 eventmanager.addMouseListener(self.mouselistener)
75 self.engine.getGuiManager().getConsole().setConsoleExecuter(self.consoleexecuter)
76
77 keyPressed.connect(self.keyPressed)
78 keyReleased.connect(self.keyReleased)
79
80
80 def getKeySequenceSignal(self, key, modifiers=[]): 81 def getKeySequenceSignal(self, key, modifiers=[]):
81 # Parse modifiers 82 # Parse modifiers
82 mods = {"alt":False,"ctrl":False,"shift":False,"meta":False} 83 mods = {"alt":False,"ctrl":False,"shift":False,"meta":False}
83 for m in modifiers: 84 for m in modifiers:
84 m = m.lower() 85 m = m.lower()
98 keysequence.modifiers = mods 99 keysequence.modifiers = mods
99 keysequence.signal = Signal(providing_args=["event"]) 100 keysequence.signal = Signal(providing_args=["event"])
100 self.keysequences.append(keysequence) 101 self.keysequences.append(keysequence)
101 102
102 return keysequence.signal 103 return keysequence.signal
103 104
104 #--- Listener methods ---#
105 # IKeyListener 105 # IKeyListener
106 def keyPressed(self, evt): 106 def keyPressed(self, event):
107 keyval = evt.getKey().getValue() 107 keyval = event.getKey().getValue()
108 keystr = evt.getKey().getAsString().lower() 108 keystr = event.getKey().getAsString().lower()
109 109
110 self.controlPressed = evt.isControlPressed() 110 self.controlPressed = event.isControlPressed()
111 self.altPressed = evt.isAltPressed() 111 self.altPressed = event.isAltPressed()
112 self.shiftPressed = evt.isShiftPressed() 112 self.shiftPressed = event.isShiftPressed()
113 self.metaPressed = evt.isMetaPressed() 113 self.metaPressed = event.isMetaPressed()
114 114
115 if keyval in (fife.Key.LEFT_CONTROL, fife.Key.RIGHT_CONTROL): 115 if keyval in (fife.Key.LEFT_CONTROL, fife.Key.RIGHT_CONTROL):
116 self.controlPressed = True 116 self.controlPressed = True
117 elif keyval in (fife.Key.LEFT_SHIFT, fife.Key.RIGHT_SHIFT): 117 elif keyval in (fife.Key.LEFT_SHIFT, fife.Key.RIGHT_SHIFT):
118 self.shiftPressed = True 118 self.shiftPressed = True
133 if k.modifiers["alt"] != self.altPressed: continue 133 if k.modifiers["alt"] != self.altPressed: continue
134 if k.modifiers["ctrl"] != self.controlPressed: continue 134 if k.modifiers["ctrl"] != self.controlPressed: continue
135 if k.modifiers["shift"] != self.shiftPressed: continue 135 if k.modifiers["shift"] != self.shiftPressed: continue
136 if k.modifiers["meta"] != self.metaPressed: continue 136 if k.modifiers["meta"] != self.metaPressed: continue
137 if keyval != k.key: continue 137 if keyval != k.key: continue
138 k.signal.send(sender=self, event=evt) 138 k.signal.send(sender=self, event=event)
139 139
140 keyPressed.send(sender=self.engine, event=evt) 140 def keyReleased(self, event):
141 141 keyval = event.getKey().getValue()
142 evt.consume() 142
143 143 self.controlPressed = event.isControlPressed()
144 def keyReleased(self, evt): 144 self.altPressed = event.isAltPressed()
145 keyval = evt.getKey().getValue() 145 self.shiftPressed = event.isShiftPressed()
146 146 self.metaPressed = event.isMetaPressed()
147 self.controlPressed = evt.isControlPressed()
148 self.altPressed = evt.isAltPressed()
149 self.shiftPressed = evt.isShiftPressed()
150 self.metaPressed = evt.isMetaPressed()
151 147
152 if keyval in (fife.Key.LEFT_CONTROL, fife.Key.RIGHT_CONTROL): 148 if keyval in (fife.Key.LEFT_CONTROL, fife.Key.RIGHT_CONTROL):
153 self.controlPressed = False 149 self.controlPressed = False
154 elif keyval in (fife.Key.LEFT_SHIFT, fife.Key.RIGHT_SHIFT): 150 elif keyval in (fife.Key.LEFT_SHIFT, fife.Key.RIGHT_SHIFT):
155 self.shiftPressed = False 151 self.shiftPressed = False
156 elif keyval in (fife.Key.LEFT_ALT, fife.Key.RIGHT_ALT): 152 elif keyval in (fife.Key.LEFT_ALT, fife.Key.RIGHT_ALT):
157 self.altPressed = False 153 self.altPressed = False
158 elif keyval in (fife.Key.RIGHT_META, fife.Key.LEFT_META): 154 elif keyval in (fife.Key.RIGHT_META, fife.Key.LEFT_META):
159 self.metaPressed = False 155 self.metaPressed = False
160 156
157
158 #--- Internal sublistener classes ---#
159 class _IKeyListener(IKeyListener):
160 def __init__(self, engine):
161 IKeyListener.__init__(self)
162 self.engine = engine
163
164 # IKeyListener
165 def keyPressed(self, evt):
166 keyPressed.send(sender=self.engine, event=evt)
167
168 def keyReleased(self, evt):
161 keyReleased.send(sender=self.engine, event=evt) 169 keyReleased.send(sender=self.engine, event=evt)
162 170
171 class _ICommandListener(ICommandListener):
172 def __init__(self, engine):
173 ICommandListener.__init__(self)
174 self.engine = engine
175
163 # ICommandListener 176 # ICommandListener
164 def onCommand(self, command): 177 def onCommand(self, command):
165 if command.getCommandType() == fife.CMD_QUIT_GAME: 178 if command.getCommandType() == fife.CMD_QUIT_GAME:
166 scripts.editor.getEditor().quit() 179 scripts.editor.getEditor().quit()
167 else: 180 else:
168 onCommand.send(sender=self.engine, command=command) 181 onCommand.send(sender=self.engine, command=command)
169 182
170 183 class _IMouseListener(IMouseListener):
184 def __init__(self, engine):
185 IMouseListener.__init__(self)
186 self.engine = engine
187
171 # IMouseListener 188 # IMouseListener
172 def mouseEntered(self, evt): 189 def mouseEntered(self, evt):
173 mouseEntered.send(sender=self.engine, event=evt) 190 mouseEntered.send(sender=self.engine, event=evt)
174 191
175 def mouseExited(self, evt): 192 def mouseExited(self, evt):
194 mouseMoved.send(sender=self.engine, event=evt) 211 mouseMoved.send(sender=self.engine, event=evt)
195 212
196 def mouseDragged(self, evt): 213 def mouseDragged(self, evt):
197 mouseDragged.send(sender=self.engine, event=evt) 214 mouseDragged.send(sender=self.engine, event=evt)
198 215
216 class _MapChangeListener(MapChangeListener):
217 def __init__(self, engine):
218 MapChangeListener.__init__(self)
219 self.engine = engine
220
221 # MapChangeListener
222 def onMapChanged(self, map, changedLayers):
223 onMapChanged.send(sender=self.engine, map=map, changedLayers=changedLayers)
224
225 def onLayerCreate(self, map, layer):
226 onLayerCreate.send(sender=self.engine, map=map, layer=layer)
227
228 def onLayerDelete(self, map, layer):
229 onLayerDelete.send(sender=self.engine, map=map, layer=layer)
230
231 class _LayerChangeListener(LayerChangeListener):
232 def __init__(self, engine):
233 LayerChangeListener.__init__(self)
234 self.engine = engine
235
199 # LayerChangeListener 236 # LayerChangeListener
200 def onLayerChanged(self, layer, changedInstances): 237 def onLayerChanged(self, layer, changedInstances):
201 onLayerChanged.send(sender=self.engine, layer=layer, changedInstances=changedInstances) 238 onLayerChanged.send(sender=self.engine, layer=layer, changedInstances=changedInstances)
202 239
203 def onInstanceCreate(self, layer, instance): 240 def onInstanceCreate(self, layer, instance):
204 onInstanceCreate.send(sender=self.engine, layer=layer, instance=instance) 241 onInstanceCreate.send(sender=self.engine, layer=layer, instance=instance)
205 242
206 def onInstanceDelete(self, layer, instance): 243 def onInstanceDelete(self, layer, instance):
207 onInstanceDelete.send(sender=self.engine, layer=layer, instance=instance) 244 onInstanceDelete.send(sender=self.engine, layer=layer, instance=instance)
208 245
209 # MapChangeListener 246 class _ConsoleExecuter(ConsoleExecuter):
210 def onMapChanged(self, map, changedLayers): 247 def __init__(self, engine):
211 onMapChanged.send(sender=self.engine, map=map, changedLayers=changedLayers) 248 ConsoleExecuter.__init__(self)
212 249 self.engine = engine
213 def onLayerCreate(self, map, layer): 250
214 onLayerCreate.send(sender=self.engine, map=map, layer=layer)
215
216 def onLayerDelete(self, map, layer):
217 onLayerDelete.send(sender=self.engine, map=map, layer=layer)
218
219 # ConsoleExecuter 251 # ConsoleExecuter
220 def onToolsClick(self): 252 def onToolsClick(self):
221 onToolsClick.send(sender=self.engine) 253 onToolsClick.send(sender=self.engine)
222 254
223 def onConsoleCommand(self, command): 255 def onConsoleCommand(self, command):
224 onConsoleCommand.send(sender=self.engine, command=command) 256 onConsoleCommand.send(sender=self.engine, command=command)
257
258