tuikit/core/events.py
changeset 111 b055add74b18
child 118 8c7970520632
equal deleted inserted replaced
110:cf3d49cdd6e2 111:b055add74b18
       
     1 from collections import OrderedDict
       
     2 
       
     3 
       
     4 class Event:
       
     5 
       
     6     """Base class for events."""
       
     7 
       
     8     def __init__(self, event_name=None, arg_names=(), arg_values=()):
       
     9         self.name = event_name
       
    10         self.args = OrderedDict(zip(arg_names, arg_values))
       
    11 
       
    12     def __getattr__(self, item):
       
    13         if item in self.args:
       
    14             return self.args[item]
       
    15         else:
       
    16             raise AttributeError(item)
       
    17 
       
    18     def __getitem__(self, key):
       
    19         return self.args[key]
       
    20 
       
    21     def __repr__(self):
       
    22         return '{}({})'.format(self.__class__.__name__,
       
    23                                ', '.join("%s=%r" % (k,v) for k,v
       
    24                                          in self.args.items()))
       
    25 
       
    26 
       
    27 class ResizeEvent(Event):
       
    28 
       
    29     def __init__(self, w, h):
       
    30         Event.__init__(self, 'resize', ('w', 'h'), (w, h))
       
    31 
       
    32 
       
    33 class KeypressEvent(Event):
       
    34 
       
    35     def __init__(self, keyname, char, mods):
       
    36         Event.__init__(self, 'keypress',
       
    37                        ('keyname', 'char', 'mods'),
       
    38                        (keyname, char, mods))
       
    39 
       
    40     def mod_key(self, sep='+'):
       
    41         """Return combined key with modifiers.
       
    42 
       
    43         E.g. "shift+tab"
       
    44 
       
    45         Order of modifiers is fixed: ctrl, alt, meta, shift
       
    46 
       
    47         """
       
    48         res = []
       
    49         for mod in ('ctrl', 'alt', 'meta', 'shift'):
       
    50             if mod in self.mods:
       
    51                 res.append(mod)
       
    52         res.append(self.keyname or self.char)
       
    53         return sep.join(res)