changeset 510:9393dc6f5707

Hook up pager buttons in level menu
author Stefano Rivera <stefano@rivera.za.net>
date Sun, 18 Sep 2011 00:13:16 +0200
parents a332f8b3619c
children e94f2b7df88d
files mamba/habitats/levelmenu.py mamba/habitats/mainmenu.py mamba/widgets/overlay.py
diffstat 3 files changed, 33 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/habitats/levelmenu.py	Sun Sep 18 00:12:16 2011 +0200
+++ b/mamba/habitats/levelmenu.py	Sun Sep 18 00:13:16 2011 +0200
@@ -1,5 +1,6 @@
 """Level menu."""
 
+import pygame
 from pygame.locals import KEYDOWN, K_PAGEUP, K_PAGEDOWN
 
 from mamba.constants import ESCAPE_KEYS
@@ -7,7 +8,7 @@
 from mamba.gamestate import done_levels
 from mamba.data import get_official_levels, load_image
 from mamba.level import Level
-from mamba.widgets.text import TextButton
+from mamba.widgets.overlay import OverlayButton
 from mamba.widgets.base import GridContainer
 from mamba.widgets.levelbutton import LevelButton
 
@@ -30,16 +31,21 @@
         self.grid_container = GridContainer(width=self.WIDTH)
         self.container.add(self.grid_container)
 
-        self.prev_button = TextButton((50, 550), u"\N{LEFTWARDS ARROW}")
-        self.prev_button.add_callback('clicked', self.change_page, -1)
-        self.container.add(self.prev_button)
-
-        self.next_button = TextButton((700, 550), u"\N{RIGHTWARDS ARROW}")
-        self.next_button.add_callback('clicked', self.change_page, 1)
-        self.container.add(self.next_button)
+        self.prev_button = self.add_box((9, 497), (52, 45), 'left',
+                                        self.change_page, -1)
+        self.next_button = self.add_box((738, 497), (54, 44), 'right',
+                                        self.change_page, 1)
+        self.add_box((12, 11), (142, 41), 'back', self.return_to_mainmenu)
 
         self.container.add_callback(KEYDOWN, self.keydown_event)
 
+    def add_box(self, pos, size, overlay_name, clicked, *args):
+        image = load_image('menus/submenu-%s.png' % overlay_name)
+        box = OverlayButton(pygame.Rect(pos, size), image)
+        box.add_callback('clicked', clicked, *args)
+        self.container.add(box)
+        return box
+
     def draw_background(self):
         self.surface.blit(self.bg_image, self.surface.get_rect())
 
--- a/mamba/habitats/mainmenu.py	Sun Sep 18 00:12:16 2011 +0200
+++ b/mamba/habitats/mainmenu.py	Sun Sep 18 00:13:16 2011 +0200
@@ -8,7 +8,7 @@
 from mamba.constants import ESCAPE_KEYS
 from mamba.engine import Habitat, NewHabitatEvent
 from mamba.level import Level
-from mamba.widgets.overlay import OverlayButton
+from mamba.widgets.overlay import OverlayOnFocusButton
 
 
 class MainMenu(Habitat):
@@ -30,7 +30,7 @@
 
     def add_box(self, pos, size, overlay_name, clicked):
         image = load_image('menus/highlight-%s.png' % overlay_name)
-        box = OverlayButton(pygame.Rect(pos, size), image)
+        box = OverlayOnFocusButton(pygame.Rect(pos, size), image)
         box.add_callback('clicked', clicked)
         self.container.add(box)
         return box
--- a/mamba/widgets/overlay.py	Sun Sep 18 00:12:16 2011 +0200
+++ b/mamba/widgets/overlay.py	Sun Sep 18 00:13:16 2011 +0200
@@ -1,8 +1,23 @@
 from mamba.widgets.base import Button
 
 
+class OverlayOnFocusButton(Button):
+    """A non-visiable clickable area, that causes an overlay to be
+       displayed when focussed"""
+
+    def __init__(self, rect, image):
+        self.image = image
+        super(OverlayOnFocusButton, self).__init__(rect)
+        self.focussable = True
+
+    def draw(self, surface):
+        if self.focussed:
+            surface.blit(self.image, surface.get_rect())
+
+
 class OverlayButton(Button):
-    """A non-visiable clickable area, that causes an overlay to be display"""
+    """A non-visiable clickable area, that causes an overlay to be
+    displayed. Doesn't really understand this focus thing."""
 
     def __init__(self, rect, image):
         self.image = image
@@ -10,5 +25,5 @@
         self.focussable = True
 
     def draw(self, surface):
-        if self.focussed:
+        if not self.disabled:
             surface.blit(self.image, surface.get_rect())