Mercurial > fife-parpg
diff 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 |
line wrap: on
line diff
--- a/clients/editor/scripts/events/events.py Tue Aug 18 18:03:54 2009 +0000 +++ b/clients/editor/scripts/events/events.py Fri Aug 21 14:39:54 2009 +0000 @@ -46,7 +46,7 @@ self.modifiers = {"alt":False,"ctrl":False,"shift":False,"meta":False} self.signal = None -class EventListener(IKeyListener, ICommandListener, IMouseListener, LayerChangeListener, MapChangeListener, ConsoleExecuter): +class EventListener: # NOTE: As FIFEdit currently covers the entire screen with widgets, # FIFE doesn't receive any mouse or key events. Therefore we have to add # mouse and key event tracking for the central widget @@ -56,27 +56,28 @@ eventmanager = self.engine.getEventManager() self.keysequences = [] - - IKeyListener.__init__(self) - eventmanager.addKeyListener(self) - ICommandListener.__init__(self) - eventmanager.addCommandListener(self) - - IMouseListener.__init__(self) - eventmanager.addMouseListener(self) - - ConsoleExecuter.__init__(self) - self.engine.getGuiManager().getConsole().setConsoleExecuter(self) - - MapChangeListener.__init__(self) - LayerChangeListener.__init__(self) + self.keylistener = _IKeyListener(engine) + self.mouselistener = _IMouseListener(engine) + self.mapchangelistener = _MapChangeListener(engine) + self.layerchangelistener = _LayerChangeListener(engine) + self.commandlistener = _ICommandListener(engine) + self.consoleexecuter = _ConsoleExecuter(engine) self.controlPressed = False self.altPressed = False self.shiftPressed = False self.metaPressed = False + eventmanager.addKeyListener(self.keylistener) + eventmanager.addCommandListener(self.commandlistener) + eventmanager.addMouseListener(self.mouselistener) + self.engine.getGuiManager().getConsole().setConsoleExecuter(self.consoleexecuter) + + keyPressed.connect(self.keyPressed) + keyReleased.connect(self.keyReleased) + + def getKeySequenceSignal(self, key, modifiers=[]): # Parse modifiers mods = {"alt":False,"ctrl":False,"shift":False,"meta":False} @@ -100,17 +101,16 @@ self.keysequences.append(keysequence) return keysequence.signal - - #--- Listener methods ---# + # IKeyListener - def keyPressed(self, evt): - keyval = evt.getKey().getValue() - keystr = evt.getKey().getAsString().lower() + def keyPressed(self, event): + keyval = event.getKey().getValue() + keystr = event.getKey().getAsString().lower() - self.controlPressed = evt.isControlPressed() - self.altPressed = evt.isAltPressed() - self.shiftPressed = evt.isShiftPressed() - self.metaPressed = evt.isMetaPressed() + self.controlPressed = event.isControlPressed() + self.altPressed = event.isAltPressed() + self.shiftPressed = event.isShiftPressed() + self.metaPressed = event.isMetaPressed() if keyval in (fife.Key.LEFT_CONTROL, fife.Key.RIGHT_CONTROL): self.controlPressed = True @@ -135,19 +135,15 @@ if k.modifiers["shift"] != self.shiftPressed: continue if k.modifiers["meta"] != self.metaPressed: continue if keyval != k.key: continue - k.signal.send(sender=self, event=evt) - - keyPressed.send(sender=self.engine, event=evt) - - evt.consume() + k.signal.send(sender=self, event=event) - def keyReleased(self, evt): - keyval = evt.getKey().getValue() + def keyReleased(self, event): + keyval = event.getKey().getValue() - self.controlPressed = evt.isControlPressed() - self.altPressed = evt.isAltPressed() - self.shiftPressed = evt.isShiftPressed() - self.metaPressed = evt.isMetaPressed() + self.controlPressed = event.isControlPressed() + self.altPressed = event.isAltPressed() + self.shiftPressed = event.isShiftPressed() + self.metaPressed = event.isMetaPressed() if keyval in (fife.Key.LEFT_CONTROL, fife.Key.RIGHT_CONTROL): self.controlPressed = False @@ -157,9 +153,26 @@ self.altPressed = False elif keyval in (fife.Key.RIGHT_META, fife.Key.LEFT_META): self.metaPressed = False - + + +#--- Internal sublistener classes ---# +class _IKeyListener(IKeyListener): + def __init__(self, engine): + IKeyListener.__init__(self) + self.engine = engine + + # IKeyListener + def keyPressed(self, evt): + keyPressed.send(sender=self.engine, event=evt) + + def keyReleased(self, evt): keyReleased.send(sender=self.engine, event=evt) +class _ICommandListener(ICommandListener): + def __init__(self, engine): + ICommandListener.__init__(self) + self.engine = engine + # ICommandListener def onCommand(self, command): if command.getCommandType() == fife.CMD_QUIT_GAME: @@ -167,7 +180,11 @@ else: onCommand.send(sender=self.engine, command=command) - +class _IMouseListener(IMouseListener): + def __init__(self, engine): + IMouseListener.__init__(self) + self.engine = engine + # IMouseListener def mouseEntered(self, evt): mouseEntered.send(sender=self.engine, event=evt) @@ -196,6 +213,26 @@ def mouseDragged(self, evt): mouseDragged.send(sender=self.engine, event=evt) +class _MapChangeListener(MapChangeListener): + def __init__(self, engine): + MapChangeListener.__init__(self) + self.engine = engine + + # MapChangeListener + def onMapChanged(self, map, changedLayers): + onMapChanged.send(sender=self.engine, map=map, changedLayers=changedLayers) + + def onLayerCreate(self, map, layer): + onLayerCreate.send(sender=self.engine, map=map, layer=layer) + + def onLayerDelete(self, map, layer): + onLayerDelete.send(sender=self.engine, map=map, layer=layer) + +class _LayerChangeListener(LayerChangeListener): + def __init__(self, engine): + LayerChangeListener.__init__(self) + self.engine = engine + # LayerChangeListener def onLayerChanged(self, layer, changedInstances): onLayerChanged.send(sender=self.engine, layer=layer, changedInstances=changedInstances) @@ -205,20 +242,17 @@ def onInstanceDelete(self, layer, instance): onInstanceDelete.send(sender=self.engine, layer=layer, instance=instance) - - # MapChangeListener - def onMapChanged(self, map, changedLayers): - onMapChanged.send(sender=self.engine, map=map, changedLayers=changedLayers) - def onLayerCreate(self, map, layer): - onLayerCreate.send(sender=self.engine, map=map, layer=layer) +class _ConsoleExecuter(ConsoleExecuter): + def __init__(self, engine): + ConsoleExecuter.__init__(self) + self.engine = engine - def onLayerDelete(self, map, layer): - onLayerDelete.send(sender=self.engine, map=map, layer=layer) - # ConsoleExecuter def onToolsClick(self): onToolsClick.send(sender=self.engine) def onConsoleCommand(self, command): onConsoleCommand.send(sender=self.engine, command=command) + + \ No newline at end of file