tuikit/core/events.py
changeset 111 b055add74b18
child 118 8c7970520632
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tuikit/core/events.py	Wed Sep 03 19:14:43 2014 +0200
@@ -0,0 +1,53 @@
+from collections import OrderedDict
+
+
+class Event:
+
+    """Base class for events."""
+
+    def __init__(self, event_name=None, arg_names=(), arg_values=()):
+        self.name = event_name
+        self.args = OrderedDict(zip(arg_names, arg_values))
+
+    def __getattr__(self, item):
+        if item in self.args:
+            return self.args[item]
+        else:
+            raise AttributeError(item)
+
+    def __getitem__(self, key):
+        return self.args[key]
+
+    def __repr__(self):
+        return '{}({})'.format(self.__class__.__name__,
+                               ', '.join("%s=%r" % (k,v) for k,v
+                                         in self.args.items()))
+
+
+class ResizeEvent(Event):
+
+    def __init__(self, w, h):
+        Event.__init__(self, 'resize', ('w', 'h'), (w, h))
+
+
+class KeypressEvent(Event):
+
+    def __init__(self, keyname, char, mods):
+        Event.__init__(self, 'keypress',
+                       ('keyname', 'char', 'mods'),
+                       (keyname, char, mods))
+
+    def mod_key(self, sep='+'):
+        """Return combined key with modifiers.
+
+        E.g. "shift+tab"
+
+        Order of modifiers is fixed: ctrl, alt, meta, shift
+
+        """
+        res = []
+        for mod in ('ctrl', 'alt', 'meta', 'shift'):
+            if mod in self.mods:
+                res.append(mod)
+        res.append(self.keyname or self.char)
+        return sep.join(res)