changeset 272:a061dd62127c

Hook up load and new buttons
author Neil Muller <drnlmuller@gmail.com>
date Thu, 15 Sep 2011 17:09:21 +0200
parents 49c125e8bc2a
children dcd0642e12e0
files mamba/habitats/editor.py mamba/widgets/level.py mamba/widgets/listbox.py
diffstat 3 files changed, 81 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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':
--- 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)
 
--- /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()