changeset 522:b250b4c6c9ba

Link up boxes in main menu.
author Simon Cross <hodgestar@gmail.com>
date Sun, 18 Sep 2011 00:45:37 +0200
parents 8a3884201d00
children 01ef685191d3
files mamba/habitats/mainmenu.py
diffstat 1 files changed, 33 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/habitats/mainmenu.py	Sun Sep 18 00:44:11 2011 +0200
+++ b/mamba/habitats/mainmenu.py	Sun Sep 18 00:45:37 2011 +0200
@@ -1,7 +1,8 @@
 """Main menu."""
 
 import pygame
-from pygame.locals import KEYDOWN, QUIT
+from pygame.locals import (KEYDOWN, QUIT, K_LEFT, K_RIGHT, K_UP,
+                           K_DOWN)
 import pygame.event
 
 from mamba.data import load_image
@@ -16,19 +17,42 @@
         super(MainMenu, self).__init__()
 
         self.bg_image = load_image('menus/splash.png')
-        self.add_box((117, 135), (556, 85), 'play', self.start_event)
-        self.add_box((117, 255), (260, 102), 'user', self.userlevels_event)
-        self.add_box((112, 384), (310, 102), 'network',
-                     self.networklevels_event)
-        self.add_box((424, 258), (267, 96), 'editor', self.edit_event)
-        self.add_box((435, 389), (210, 90), 'quit', self.quit_keydown_event)
-        self.add_box((578, 480), (131, 31), 'credits', self.credits_event)
+        play = self.add_box((117, 135), (556, 85), 'play', self.start_event)
+        user = self.add_box((117, 255), (260, 102), 'user',
+                            self.userlevels_event)
+        network = self.add_box((112, 384), (310, 102), 'network',
+                               self.networklevels_event)
+        editor = self.add_box((424, 258), (267, 96), 'editor', self.edit_event)
+        quitb = self.add_box((435, 389), (210, 90), 'quit',
+                            self.quit_keydown_event)
+        credits = self.add_box((578, 480), (131, 31), 'credits',
+                               self.credits_event)
         self.container.add_callback(KEYDOWN, self.keydown_event)
 
+        self.link_boxes(play, K_UP, editor, None)
+        self.link_boxes(user, K_LEFT, editor, K_RIGHT)
+        self.link_boxes(network, K_LEFT, quitb, K_RIGHT)
+        self.link_boxes(editor, K_UP, quitb, K_DOWN)
+        self.link_boxes(quitb, K_UP, credits, K_DOWN)
+
     def draw_background(self):
         self.surface.blit(self.bg_image, self.surface.get_rect())
 
-    def add_box(self, pos, size, overlay_name, clicked):
+    def link_boxes(self, left_box, left_key, right_box, right_key):
+        def go_right(ev, widget):
+            if ev.key == right_key:
+                right_box.grab_focus()
+                return True
+
+        def go_left(ev, widget):
+            if ev.key == left_key:
+                left_box.grab_focus()
+                return True
+
+        left_box.add_callback(KEYDOWN, go_right)
+        right_box.add_callback(KEYDOWN, go_left)
+
+    def add_box(self, pos, size, overlay_name, clicked, other=None):
         image = load_image('menus/highlight-%s.png' % overlay_name)
         box = OverlayOnFocusButton(pygame.Rect(pos, size), image)
         box.add_callback('clicked', clicked)