tuikit/eventsource.py
author Radek Brich <radek.brich@devl.cz>
Thu, 08 Sep 2011 11:37:27 +0200
changeset 13 19ebde2fd594
parent 12 bb7d41be0c44
child 32 088b92ffb119
permissions -rw-r--r--
Add more generated documentation.

# -*- coding: utf-8 -*-

class EventSource:
    
    '''Event source base class.'''

    def __init__(self):
        self.event = dict()

    def addevents(self, *events):
        '''Create new events with empty handler list.'''
        for event in events:
            self.event[event] = []

    def connect(self, event, handler):
        '''Add handler to handler list of the event.'''
        if event in list(self.event.keys()):
            self.event[event].append(handler)
        else:
            raise KeyError('Event %s not known.', event)

    def disconnect(self, event, handler=None):
        '''Remove handler from event's handler list.

        If no handler is given, remove all handlers.

        '''
        if event in list(self.event.keys()):
            if handler:
                self.event[event].remove(handler)
            else:
                self.event[event] = []
        else:
            raise KeyError('Event %s not known.', event)

    def handle(self, event, *args, **kwargs):
        '''Call all handlers from event's handler list.

        This is used when user defined handlers are to be called.

        '''
        handled = False
        for handler in self.event[event]:
            res = handler(*args, **kwargs)
            if res:
                handled = True
        return handled

    def emit(self, event, *args, **kwargs):
        '''Emit event.

        This is used by original event source when the event is detected.

        '''
        try:
            getattr(self, event)(*args, **kwargs)
        except AttributeError:
            self.handle(event, *args, **kwargs)