Mercurial > mamba
changeset 441:72f210945576
Paging in level menu
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 17 Sep 2011 20:02:58 +0200 |
parents | 93ba8c966cb9 |
children | 54803d6cac57 |
files | mamba/habitats/levelmenu.py |
diffstat | 1 files changed, 47 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/mamba/habitats/levelmenu.py Sat Sep 17 20:02:49 2011 +0200 +++ b/mamba/habitats/levelmenu.py Sat Sep 17 20:02:58 2011 +0200 @@ -1,12 +1,13 @@ """Level menu.""" -from pygame.locals import KEYDOWN +from pygame.locals import KEYDOWN, K_PAGEUP, K_PAGEDOWN from mamba.constants import ESCAPE_KEYS from mamba.engine import Habitat, NewHabitatEvent, HabitatSetupEvent from mamba.gamestate import done_levels from mamba.data import get_official_levels from mamba.level import Level +from mamba.widgets.text import TextButton from mamba.widgets.base import GridContainer from mamba.widgets.levelbutton import LevelButton @@ -17,13 +18,25 @@ class LevelMenu(Habitat): - WIDTH = 5 + WIDTH = 6 + HEIGHT = 4 def __init__(self): super(LevelMenu, self).__init__() self.level_buttons = {} + self.page = 0 + self.grid_container = GridContainer(width=self.WIDTH) self.container.add(self.grid_container) + + self.prev_button = TextButton((50, 550), "<-") + self.prev_button.add_callback('clicked', self.change_page, -1) + self.container.add(self.prev_button) + + self.next_button = TextButton((700, 550), "->") + self.next_button.add_callback('clicked', self.change_page, 1) + self.container.add(self.next_button) + self.container.add_callback(KEYDOWN, self.keydown_event) def on_enter(self): @@ -39,15 +52,13 @@ def _setup_levels(self, ev=None): if ev is not None: self.setup_levels() - # We now have widgets, let's give them focus - self.container.adjust_focus(1) else: HabitatSetupEvent.post() def setup_level(self, i, name): level = self.get_level(name) - button = LevelButton((20 + 120 * (i % self.WIDTH), - 20 + 120 * (i // self.WIDTH)), + button = LevelButton((50 + 120 * (i % self.WIDTH), + 50 + 120 * (i // self.WIDTH)), level) button.add_callback('clicked', self.level_selected, name) button.done = level.unique_name() in done_levels @@ -55,9 +66,34 @@ self.level_buttons[name] = button def setup_levels(self): - for i, name in enumerate(self.list_levels()): + del self.grid_container.children[:] + levels = list(self.list_levels()) + if self.page * self.WIDTH * self.HEIGHT > len(levels): + self.page = len(levels) // self.WIDTH // self.HEIGHT + elif self.page < 0: + self.page = 0 + first = self.page * self.WIDTH * self.HEIGHT + last = first + (self.WIDTH * self.HEIGHT) + for i, name in enumerate(levels[first:last]): self.setup_level(i, name) + if self.page == 0: + self.prev_button.disable() + else: + self.prev_button.enable() + if len(levels) <= last: + self.next_button.disable() + else: + self.next_button.enable() + self.container.defocus() + # We now have widgets, let's give them focus + self.container.adjust_focus(1) + + def change_page(self, ev, widget, direction): + self.page += direction + self.setup_levels() + return True + def list_levels(self): raise NotImplementedError() @@ -81,6 +117,10 @@ def keydown_event(self, ev, widget): if ev.key in ESCAPE_KEYS: return self.return_to_mainmenu(ev, widget) + if ev.key == K_PAGEUP: + return self.change_page(ev, widget, -1) + if ev.key == K_PAGEDOWN: + return self.change_page(ev, widget, 1) def return_to_mainmenu(self, ev, widget): from mamba.habitats.mainmenu import MainMenu