projects
/
minwii.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Implémentation du clic sur le bouton B.
[minwii.git]
/
src
/
app
/
eventutils.py
diff --git
a/src/app/eventutils.py
b/src/app/eventutils.py
index
a89509b
..
1172794
100755
(executable)
--- a/
src/app/eventutils.py
+++ b/
src/app/eventutils.py
@@
-6,7
+6,7
@@
l'implémentation des gestionnaires d'événements pygame.
Utilisation :
- hériter de EventHandlerMixin
- décorer les méthodes gestionnaires d'événements avec le décorateur 'event_handler'
Utilisation :
- hériter de EventHandlerMixin
- décorer les méthodes gestionnaires d'événements avec le décorateur 'event_handler'
- en passant en paramètre
le code
d'événement pygame
+ en passant en paramètre
un ou plusieurs codes
d'événement pygame
Il n'existe aucune contrainte sur le nommage de la méthode décorée.
La méthode gestionnaire d'événement reçoit l'événement pygame comme unique paramètre.
Il n'existe aucune contrainte sur le nommage de la méthode décorée.
La méthode gestionnaire d'événement reçoit l'événement pygame comme unique paramètre.
@@
-29,6
+29,10
@@
$URL$
import types
import pygame
from StringIO import StringIO
import types
import pygame
from StringIO import StringIO
+from logging import getLogger, basicConfig, DEBUG
+import sys
+basicConfig(level=DEBUG, stream = sys.stdout)
+console = getLogger('minwii.eventutils')
class _EventDispatcher :
def __init__(self) :
class _EventDispatcher :
def __init__(self) :
@@
-36,16
+40,25
@@
class _EventDispatcher :
def addEventListener(self, eventType, listener) :
if self.registry.has_key(eventType) :
def addEventListener(self, eventType, listener) :
if self.registry.has_key(eventType) :
- self.registry[eventType]
.append(listener)
+ self.registry[eventType]
[listener] = True
else :
else :
- self.registry[eventType] = [listener]
+ self.registry[eventType] = {listener:True}
+
+ def removeEventListener(self, eventType, listener) :
+ try :
+ del self.registry[eventType][listener]
+ except KeyError :
+ console.warn("no listener to remove")
def dispatchEvents(self) :
events = pygame.event.get()
for event in events :
def dispatchEvents(self) :
events = pygame.event.get()
for event in events :
- listeners = self.registry.get(event.type,
[]
)
- for listener in listeners :
+ listeners = self.registry.get(event.type,
{}
)
+ for listener in listeners
.keys()
:
listener(event)
listener(event)
+
+ def reset(self) :
+ self.registry = {}
def __repr__(self) :
out = StringIO()
def __repr__(self) :
out = StringIO()
@@
-53,7
+66,7
@@
class _EventDispatcher :
keys.sort()
for k in keys :
print >> out, "event", k
keys.sort()
for k in keys :
print >> out, "event", k
- for listener in self.registry[k] :
+ for listener in self.registry[k]
.keys()
:
print >> out, listener.__name__
out.seek(0)
return out.read()
print >> out, listener.__name__
out.seek(0)
return out.read()
@@
-61,10
+74,10
@@
class _EventDispatcher :
EventDispatcher = _EventDispatcher()
EventDispatcher = _EventDispatcher()
-def event_handler(
eventType
) :
+def event_handler(
*eventTypes
) :
def markFunctionAsListener(m) :
m.__islistener__ = True
def markFunctionAsListener(m) :
m.__islistener__ = True
- m.__eventtype
__ = eventType
+ m.__eventtype
s__ = eventTypes
return m
return markFunctionAsListener
return m
return markFunctionAsListener
@@
-76,15
+89,16
@@
class EventInitializer(type):
for k, v in dict.items() :
if isinstance(v, types.FunctionType) and hasattr(v, '__islistener__') :
listener = getattr(self, k)
for k, v in dict.items() :
if isinstance(v, types.FunctionType) and hasattr(v, '__islistener__') :
listener = getattr(self, k)
- EventDispatcher.addEventListener(v.__eventtype__, listener)
+ for eventType in v.__eventtypes__ :
+ EventDispatcher.addEventListener(eventType, listener)
def ctor(self, *args, **kw) :
def ctor(self, *args, **kw) :
- init_listeners(self)
default_ctor = dict.get('__init__')
if not default_ctor :
super(cls, self).__init__(*args, **kw)
else :
default_ctor(self, *args, **kw)
default_ctor = dict.get('__init__')
if not default_ctor :
super(cls, self).__init__(*args, **kw)
else :
default_ctor(self, *args, **kw)
+ init_listeners(self)
cls.__init__ = ctor
cls.__init__ = ctor