Mercurial > fife-parpg
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 |