projects
/
minwii.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Bah, c'n'était pas si compliqué tout compte fait :-).
[minwii.git]
/
src
/
app
/
eventutils.py
diff --git
a/src/app/eventutils.py
b/src/app/eventutils.py
index
a89509b
..
969ad81
100755
(executable)
--- a/
src/app/eventutils.py
+++ b/
src/app/eventutils.py
@@
-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,29
@@
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 :
+ #if event.type == pygame.MOUSEMOTION :
+ # if hasattr(event, 'wiimoteid') :
+ # console.info(event)
+ # #return
+
+ 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
+70,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
+78,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
+93,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