class FrameState(object):
    """ processes client events to present state information
    """

    def __init__(self, previous=None):
        self.mouse0down = False
        self.mouse1down = False
        self.mouse2down = False
        self.mouse0clicks = 0
        self.mouse1clicks = 0
        self.mouse2clicks = 0
        self.keysdown = {} # use as list, values are always None

        if previous:
            self.__dict__.update(previous.__dict__)

        # list of unknown commands, tuples (name, value)
        self.unknown = []

    def process_event(self, event):
        type = event.type
        if event.type == event.KEYUP:
            self.keysdown.pop(event.value, None)
        elif event.type == event.KEYDOWN:
            self.keysdown[event.value] = None
        elif event.type == event.MOUSEDOWN:
            setattr(self, 'mouse%sdown' % (event.value,), True)
            clickattr = 'mouse%sclicks' % (event.value,)
            newvalue = getattr(self, clickattr) + 1
            setattr(self, clickattr, newvalue)
        elif event.type == event.MOUSEUP:
            setattr(self, 'mouse%sdown' % (event.value,), False)
        else:
            self.unknown.append((event.command, event.value))


