banned/src/events.py
2016-05-11 16:09:19 +02:00

30 lines
921 B
Python

# event system
from collections import defaultdict
EVENT_CALLBACKS = defaultdict(list)
def add_listener(event, callback, priority=5):
if (priority, callback) not in EVENT_CALLBACKS[event]:
EVENT_CALLBACKS[event].append((priority, callback))
EVENT_CALLBACKS[event].sort(key = lambda x: x[0])
def remove_listener(event, callback, priority = 5):
if (priority, callback) in EVENT_CALLBACKS[event]:
EVENT_CALLBACKS[event].remove((priority, callback))
class Event:
def __init__(self, name, data):
self.stop_processing = False
self.prevent_default = False
self.name = name
self.data = data
def dispatch(self, *args, **kwargs):
for item in list(EVENT_CALLBACKS[self.name]):
item[1](self, *args, **kwargs)
if self.stop_processing:
break
return not self.prevent_default
# vim: set sw=4 expandtab: