Mercurial > fife-parpg
comparison clients/editor/scripts/events/events.py @ 255:51cc05d862f2
Merged editor_rewrite branch to trunk.
This contains changes that may break compatibility against existing clients.
For a list of changes that may affect your client, see: http://wiki.fifengine.de/Changes_to_pychan_and_FIFE_in_editor_rewrite_branch
author | cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Mon, 08 Jun 2009 16:00:02 +0000 |
parents | |
children | e249fa887259 |
comparison
equal
deleted
inserted
replaced
254:10b5f7f36dd4 | 255:51cc05d862f2 |
---|---|
1 #from editor import getEditor # Needed to quit application | |
2 | |
3 import fife, scripts | |
4 from fife import IKeyListener, ICommandListener, IMouseListener, LayerChangeListener, MapChangeListener, ConsoleExecuter | |
5 from signal import Signal | |
6 import pdb | |
7 | |
8 #--- Signals ---# | |
9 onPump = Signal() | |
10 preSave = Signal(providing_args=["mapview"]) | |
11 postSave = Signal(providing_args=["mapview"]) | |
12 mapAdded = Signal(providing_args=["mapview"]) | |
13 preMapRemove = Signal(providing_args=["mapview"]) | |
14 postMapRemove = Signal(providing_args=["mapview"]) | |
15 preMapShown = Signal(providing_args=["mapview"]) | |
16 postMapShown = Signal(providing_args=["mapview"]) | |
17 onInstancesSelected = Signal(providing_args=["instances"]) | |
18 onObjectSelected = Signal(providing_args=["object"]) | |
19 | |
20 # Signals emitted by EventListener | |
21 onQuit = Signal(providing_args=[]) | |
22 keyPressed = Signal(providing_args=["event"]) | |
23 keyReleased = Signal(providing_args=["event"]) | |
24 mouseEntered = Signal(providing_args=["event"]) | |
25 mouseExited = Signal(providing_args=["event"]) | |
26 mousePressed = Signal(providing_args=["event"]) | |
27 mouseReleased = Signal(providing_args=["event"]) | |
28 mouseClicked = Signal(providing_args=["event"]) | |
29 mouseWheelMovedUp = Signal(providing_args=["event"]) | |
30 mouseWheelMovedDown = Signal(providing_args=["event"]) | |
31 mouseMoved = Signal(providing_args=["event"]) | |
32 mouseDragged = Signal(providing_args=["event"]) | |
33 onLayerChanged = Signal(providing_args=["layer", "changedInstances"]) | |
34 onInstanceCreate = Signal(providing_args=["layer", "instance"]) | |
35 onInstanceDelete = Signal(providing_args=["layer", "instance"]) | |
36 onMapChanged = Signal(providing_args=["map", "changedLayers"]) | |
37 onLayerCreate = Signal(providing_args=["map", "layer"]) | |
38 onLayerDelete = Signal(providing_args=["map", "layer"]) | |
39 onToolsClick = Signal(providing_args=[]) | |
40 onCommand = Signal(providing_args=["command"]) | |
41 onConsoleCommand= Signal(providing_args=["command"]) | |
42 | |
43 class KeySequence(object): | |
44 def __init__(self): | |
45 self.key = None | |
46 self.modifiers = {"alt":False,"ctrl":False,"shift":False,"meta":False} | |
47 self.signal = None | |
48 | |
49 class EventListener(IKeyListener, ICommandListener, IMouseListener, LayerChangeListener, MapChangeListener, ConsoleExecuter): | |
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 | |
52 # mouse and key event tracking for the central widget | |
53 | |
54 def __init__(self, engine): | |
55 self.engine = engine | |
56 | |
57 eventmanager = self.engine.getEventManager() | |
58 self.keysequences = [] | |
59 | |
60 IKeyListener.__init__(self) | |
61 eventmanager.addKeyListener(self) | |
62 | |
63 ICommandListener.__init__(self) | |
64 eventmanager.addCommandListener(self) | |
65 | |
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 | |
75 self.controlPressed = False | |
76 self.altPressed = False | |
77 self.shiftPressed = False | |
78 self.metaPressed = False | |
79 | |
80 def getKeySequenceSignal(self, key, modifiers=[]): | |
81 # Parse modifiers | |
82 mods = {"alt":False,"ctrl":False,"shift":False,"meta":False} | |
83 for m in modifiers: | |
84 m = m.lower() | |
85 if m in mods: | |
86 mods[m] = True | |
87 else: | |
88 print "Unknown modifier:",m | |
89 | |
90 # Check if signal for keysequence has been created | |
91 for k in self.keysequences: | |
92 if k.key == key and k.modifiers == mods: | |
93 return k.signal | |
94 | |
95 # Create keysequence and signal | |
96 keysequence = KeySequence() | |
97 keysequence.key = key | |
98 keysequence.modifiers = mods | |
99 keysequence.signal = Signal(providing_args=["event"]) | |
100 self.keysequences.append(keysequence) | |
101 | |
102 return keysequence.signal | |
103 | |
104 #--- Listener methods ---# | |
105 # IKeyListener | |
106 def keyPressed(self, evt): | |
107 keyval = evt.getKey().getValue() | |
108 keystr = evt.getKey().getAsString().lower() | |
109 | |
110 self.controlPressed = evt.isControlPressed() | |
111 self.altPressed = evt.isAltPressed() | |
112 self.shiftPressed = evt.isShiftPressed() | |
113 self.metaPressed = evt.isMetaPressed() | |
114 | |
115 if keyval in (fife.Key.LEFT_CONTROL, fife.Key.RIGHT_CONTROL): | |
116 self.controlPressed = True | |
117 elif keyval in (fife.Key.LEFT_SHIFT, fife.Key.RIGHT_SHIFT): | |
118 self.shiftPressed = True | |
119 elif keyval in (fife.Key.LEFT_ALT, fife.Key.RIGHT_ALT): | |
120 self.altPressed = True | |
121 elif keyval in (fife.Key.RIGHT_META, fife.Key.LEFT_META): | |
122 self.metaPressed = True | |
123 | |
124 elif keyval == fife.Key.ESCAPE: | |
125 scripts.editor.getEditor().quit() | |
126 elif keyval == fife.Key.F10: | |
127 self.engine.getGuiManager().getConsole().toggleShowHide() | |
128 elif keystr == "d": | |
129 pdb.set_trace() | |
130 | |
131 # Check keysequences | |
132 for k in self.keysequences: | |
133 if k.modifiers["alt"] != self.altPressed: continue | |
134 if k.modifiers["ctrl"] != self.controlPressed: continue | |
135 if k.modifiers["shift"] != self.shiftPressed: continue | |
136 if k.modifiers["meta"] != self.metaPressed: continue | |
137 if keyval != k.key: continue | |
138 k.signal.send(sender=self, event=evt) | |
139 | |
140 keyPressed.send(sender=self.engine, event=evt) | |
141 | |
142 evt.consume() | |
143 | |
144 def keyReleased(self, evt): | |
145 keyval = evt.getKey().getValue() | |
146 | |
147 self.controlPressed = evt.isControlPressed() | |
148 self.altPressed = evt.isAltPressed() | |
149 self.shiftPressed = evt.isShiftPressed() | |
150 self.metaPressed = evt.isMetaPressed() | |
151 | |
152 if keyval in (fife.Key.LEFT_CONTROL, fife.Key.RIGHT_CONTROL): | |
153 self.controlPressed = False | |
154 elif keyval in (fife.Key.LEFT_SHIFT, fife.Key.RIGHT_SHIFT): | |
155 self.shiftPressed = False | |
156 elif keyval in (fife.Key.LEFT_ALT, fife.Key.RIGHT_ALT): | |
157 self.altPressed = False | |
158 elif keyval in (fife.Key.RIGHT_META, fife.Key.LEFT_META): | |
159 self.metaPressed = False | |
160 | |
161 keyReleased.send(sender=self.engine, event=evt) | |
162 | |
163 # ICommandListener | |
164 def onCommand(self, command): | |
165 if command.getCommandType() == fife.CMD_QUIT_GAME: | |
166 scripts.editor.getEditor().quit() | |
167 else: | |
168 onCommand.send(sender=self.engine, command=command) | |
169 | |
170 | |
171 # IMouseListener | |
172 def mouseEntered(self, evt): | |
173 mouseEntered.send(sender=self.engine, event=evt) | |
174 | |
175 def mouseExited(self, evt): | |
176 mouseExited.send(sender=self.engine, event=evt) | |
177 | |
178 def mousePressed(self, evt): | |
179 mousePressed.send(sender=self.engine, event=evt) | |
180 | |
181 def mouseReleased(self, evt): | |
182 mouseReleased.send(sender=self.engine, event=evt) | |
183 | |
184 def mouseClicked(self, evt): | |
185 mouseClicked.send(sender=self.engine, event=evt) | |
186 | |
187 def mouseWheelMovedUp(self, evt): | |
188 mouseWheelMovedUp.send(sender=self.engine, event=evt) | |
189 | |
190 def mouseWheelMovedDown(self, evt): | |
191 mouseWheelMovedDown.send(sender=self.engine, event=evt) | |
192 | |
193 def mouseMoved(self, evt): | |
194 mouseMoved.send(sender=self.engine, event=evt) | |
195 | |
196 def mouseDragged(self, evt): | |
197 mouseDragged.send(sender=self.engine, event=evt) | |
198 | |
199 # LayerChangeListener | |
200 def onLayerChanged(self, layer, changedInstances): | |
201 onLayerChanged.send(sender=self.engine, layer=layer, changedInstances=changedInstances) | |
202 | |
203 def onInstanceCreate(self, layer, instance): | |
204 onInstanceCreate.send(sender=self.engine, layer=layer, instance=instance) | |
205 | |
206 def onInstanceDelete(self, layer, instance): | |
207 onInstanceDelete.send(sender=self.engine, layer=layer, instance=instance) | |
208 | |
209 # MapChangeListener | |
210 def onMapChanged(self, map, changedLayers): | |
211 onMapChanged.send(sender=self.engine, map=map, changedLayers=changedLayers) | |
212 | |
213 def onLayerCreate(self, map, layer): | |
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 | |
220 def onToolsClick(self): | |
221 onToolsClick.send(sender=self.engine) | |
222 | |
223 def onConsoleCommand(self, command): | |
224 onConsoleCommand.send(sender=self.engine, command=command) |