SelectorWidget
[naja.git] / naja / widgets / selector.py
diff --git a/naja/widgets/selector.py b/naja/widgets/selector.py
new file mode 100644 (file)
index 0000000..c0c91b9
--- /dev/null
@@ -0,0 +1,35 @@
+import pygame.locals as pgl
+
+from naja.widgets.base import Container
+from naja.resources import resources
+from naja.resources.mutators import R270
+
+
+class SelectorWidget(Container):
+    def __init__(self, *args, **kwargs):
+        super(SelectorWidget, self).__init__(*args, **kwargs)
+        self.position = 0
+        self.selector = resources.get_image('bits', 'arrow_on.png',
+                                            transforms=(R270,))
+
+    def render(self, surface):
+        super(SelectorWidget, self).render(surface)
+        pos = self.selector.get_rect()
+        selected = self.widgets[self.position]
+        pos = pos.move(selected.pos)
+        pos = pos.move(-pos.width * 1.5, (selected.size[1] - pos.height) / 2)
+        surface.blit(self.selector, pos)
+
+    def handle_event(self, ev):
+        if ev.type == pgl.KEYDOWN:
+            if ev.key in (pgl.K_DOWN, pgl.K_UP):
+                if ev.key == pgl.K_DOWN:
+                    self.position += 1
+                else:
+                    self.position -= 1
+                self.position %= len(self.widgets)
+                return True
+            elif ev.key == pgl.K_RETURN:
+                return self.widgets[self.position].callback('click')
+
+        return super(SelectorWidget, self).handle_event(ev)