# HG changeset patch # User Neil Muller # Date 1316099361 -7200 # Node ID a061dd62127c46fe5df54dd931a635bd431bcac7 # Parent 49c125e8bc2a82087b2222ca436f5b3632d536af Hook up load and new buttons diff -r 49c125e8bc2a -r a061dd62127c mamba/habitats/editor.py --- a/mamba/habitats/editor.py Thu Sep 15 17:08:32 2011 +0200 +++ b/mamba/habitats/editor.py Thu Sep 15 17:09:21 2011 +0200 @@ -9,9 +9,10 @@ from mamba.widgets.imagebutton import ImageButtonWidget #from mamba.widgets.messagebox import MessageBox from mamba.widgets.entrybox import EntryBox +from mamba.widgets.listbox import ListBox from mamba.widgets.toollist import ToolListWidget from mamba.level import Level, TILE_MAP, THING_MAP -from mamba.data import check_level_exists +from mamba.data import check_level_exists, list_levels from mamba.constants import (SCREEN, EDIT_SCREEN, NAME, ESCAPE_KEYS, RESERVED_NAMES) @@ -151,13 +152,36 @@ if self.level.level_name in RESERVED_NAMES: print "Can't save over reserved name" return + if not self.level: + print "Need a level name" + return self.level.save_level() def new(self, ev, widget): - pass + self.load_level(ev, widget, 'blank') def load(self, ev, widget): - pass + levels = list_levels() + load_list = [] + for level_name in levels: + if level_name in RESERVED_NAMES: + continue + load_button = TextButton((0, 0), level_name) + load_button.add_callback('clicked', self.load_level, level_name) + load_list.append(load_button) + load_dialog = ListBox((200, 200), 'Select Level', load_list) + self.container.add(load_dialog) + load_dialog.grab_focus() + + def load_level(self, ev, widget, level_name): + self.container.remove(self.edit_widget) + self.level = Level(level_name) + if level_name in RESERVED_NAMES: + self.level.level_name = '' # Special case for new level + self.edit_widget = EditLevelWidget(self.level) + self.container.add(self.edit_widget) + self.clear_toolbar() + self.setup_toolbar() def change_toolbar(self, ev, widget): if self.mode == 'Tile': diff -r 49c125e8bc2a -r a061dd62127c mamba/widgets/level.py --- a/mamba/widgets/level.py Thu Sep 15 17:08:32 2011 +0200 +++ b/mamba/widgets/level.py Thu Sep 15 17:09:21 2011 +0200 @@ -28,10 +28,11 @@ else: self.tool = '.' self.drawing = True - self.update_tile(event.pos) + if self.tool: + self.update_tile(event.pos) elif event.type == MOUSEBUTTONUP: self.drawing = False - elif event.type == MOUSEMOTION and self.drawing: + elif event.type == MOUSEMOTION and self.drawing and self.tool: # FIXME: Need to consider leaving and re-entering the widget self.update_tile(event.pos) diff -r 49c125e8bc2a -r a061dd62127c mamba/widgets/listbox.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mamba/widgets/listbox.py Thu Sep 15 17:09:21 2011 +0200 @@ -0,0 +1,51 @@ +import pygame +from pygame.constants import SRCALPHA + +from mamba.widgets.base import Container +from mamba.widgets.toollist import ToolListWidget +from mamba.widgets.text import TextWidget, TextButton + + +class ListBox(Container): + + def __init__(self, rect, text, widget_list, page_length=8): + super(ListBox, self).__init__(rect) + self.message = TextWidget(rect, text) + self.toolbar = ToolListWidget(rect, widget_list, page_length, + start_key=None) + self.prepare() + self.modal = True + + def prepare(self): + width = max(self.toolbar.rect.width, self.message.rect.width) + if width > self.message.rect.width: + message_pos = (self.rect.left + width / 2 + - self.message.rect.width / 2, self.rect.top) + else: + message_pos = (self.rect.left, self.rect.top + 5) + tool_pos = (self.rect.left, + self.rect.top + self.message.rect.height + 2) + self.message.rect.topleft = message_pos + self.toolbar.rect.topleft = tool_pos + self.toolbar.fill_page() # Fix alignment + self.add(self.message) + self.add(self.toolbar) + self.ok_button = ok_button = TextButton((0, 0), 'OK') + ok_pos = (self.rect.left + width / 2 - ok_button.rect.width / 2, + tool_pos[1] + 2 + self.toolbar.rect.height) + ok_button.rect.topleft = ok_pos + ok_button.add_callback('clicked', self.close) + self.add(ok_button) + + def draw(self, surface): + background = pygame.Surface(self.rect.size, SRCALPHA) + background.fill(pygame.Color('gray')) + surface.blit(background, self.rect) + super(ListBox, self).draw(surface) + + def close(self, ev, widget): + self.parent.remove(self) + return True + + def grab_focus(self): + return self.ok_button.grab_focus()