changeset 404:38f95fbc3710

Better dialog handling.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 17 Sep 2011 13:30:00 +0200
parents 4e9a30da79e1
children 35680740f163
files mamba/engine.py mamba/habitats/editor.py mamba/habitats/level.py
diffstat 3 files changed, 18 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/engine.py	Sat Sep 17 12:57:04 2011 +0200
+++ b/mamba/engine.py	Sat Sep 17 13:30:00 2011 +0200
@@ -70,6 +70,11 @@
             self.container.draw(self.surface)
             surface.blit(self.surface, self.surface.get_rect())
 
+    def display_dialog(self, dialog):
+        self.container.paused = True
+        self.container.add(dialog)
+        dialog.grab_focus()
+
 
 class UserEvent(object):
 
--- a/mamba/habitats/editor.py	Sat Sep 17 12:57:04 2011 +0200
+++ b/mamba/habitats/editor.py	Sat Sep 17 13:30:00 2011 +0200
@@ -208,9 +208,7 @@
         except InvalidMapError, error:
             message = MessageBox((300, 300), "Map isn't valid\n%s" % error)
         if message:
-            self.container.paused = True
-            self.container.add(message)
-            message.grab_focus()
+            self.display_dialog(message)
             return
         self.level.save_level('user_levels', is_user_dir=True)
         self.refresh_display()
@@ -235,9 +233,7 @@
             load_button.add_callback(
                 'clicked', self.load_level, level_name, level_dir, is_user_dir)
             load_list.append(load_button)
-        load_dialog = ListBox((200, 200), 'Select Level', load_list, 6)
-        self.container.add(load_dialog)
-        load_dialog.grab_focus()
+        self.display_dialog(ListBox((200, 200), 'Select Level', load_list, 6))
         return True
 
     def load_level(self, ev, widget, level_name, level_dir, is_user_dir):
@@ -248,9 +244,7 @@
         except (IOError, InvalidMapError, pygame.error), error:
             message = MessageBox((300, 300),
                     'Loading Level Failed: %s' % error, color='red')
-            self.container.paused = True
-            self.container.add(message)
-            message.grab_focus()
+            self.display_dialog(message)
             return False
         self.container.remove(self.edit_widget)
         self.level = new_level
@@ -277,10 +271,8 @@
                 self.container.remove(widget)
 
     def do_edit(self, ev, widget, message, init_value, callback):
-        self.container.paused = True
-        editbox = EntryBox((200, 200), message, init_value, callback)
-        self.container.add(editbox)
-        editbox.grab_focus()
+        self.display_dialog(
+            EntryBox((200, 200), message, init_value, callback))
         return True
 
     def update_name(self, new_name):
@@ -300,9 +292,7 @@
             load_button = TextButton((0, 0), name)
             load_button.add_callback('clicked', self.change_tileset, name)
             load_list.append(load_button)
-        load_dialog = ListBox((200, 200), 'Select Level', load_list)
-        self.container.add(load_dialog)
-        load_dialog.grab_focus()
+        self.display_dialog(ListBox((200, 200), 'Select Level', load_list))
         return True
 
     def list_tracks(self, ev, widget):
@@ -313,9 +303,7 @@
             load_button = TextButton((0, 0), name)
             load_button.add_callback('clicked', self.change_track, name)
             load_list.append(load_button)
-        load_dialog = ListBox((200, 200), 'Select Level', load_list, 6)
-        self.container.add(load_dialog)
-        load_dialog.grab_focus()
+        self.display_dialog(ListBox((200, 200), 'Select Level', load_list, 6))
         return True
 
     def change_tileset(self, ev, widget, new_name):
@@ -329,9 +317,7 @@
             message = MessageBox((300, 300),
                     'Unable to change tileset:: %s' % error,
                     self.refresh_display, color='red')
-            self.container.paused = True
-            self.container.add(message)
-            message.grab_focus()
+            self.display_dialog(message)
             return True
         self.container.paused = False
         self.clear_toolbar()
@@ -365,9 +351,7 @@
         elif check_level_exists(new_name, 'user_levels', is_user_dir=True):
             message = MessageBox((300, 300), 'Name already in use')
         if message:
-            self.container.paused = True
-            self.container.add(message)
-            message.grab_focus()
+            self.display_dialog(message)
             return False
         self.container.paused = False
         self.level.level_name = new_name
@@ -401,11 +385,9 @@
         return True
 
     def edit_sprite(self, tile_pos, sprite):
-        self.container.paused = True
         sprite_editor = EditSpriteBox((200, 100), tile_pos, sprite,
                 post_callback=self.commit_line)
-        self.container.add(sprite_editor)
-        sprite_editor.grab_focus()
+        self.display_dialog(sprite_editor)
 
     def commit_line(self, sprite):
         try:
@@ -418,9 +400,7 @@
             info = traceback.format_exception_only(exc_type, info)[0]
             message = MessageBox((300, 300),
                     'Validation failed:\n%s' % info)
-            self.container.paused = True
-            self.container.add(message)
-            message.grab_focus()
+            self.display_dialog(message)
             return False
         # Validation successful, so add to level
         if self.sprite_mode == 'Add':
--- a/mamba/habitats/level.py	Sat Sep 17 12:57:04 2011 +0200
+++ b/mamba/habitats/level.py	Sat Sep 17 13:30:00 2011 +0200
@@ -28,9 +28,7 @@
     def level_completed(self, ev, widget):
         if not self.world.pause():
             return False
-        messagebox = MessageBox((300, 200), 'Level complete!',
-                                self.go_menu)
-        self.container.add(messagebox)
-        messagebox.grab_focus()
+        self.display_dialog(
+            MessageBox((300, 200), 'Level complete!', self.go_menu))
         level_done(self.world.level.unique_name())
         return True