diff mamba/habitats/editor.py @ 337:170d4a43c00e

Don't edit the level when interacting with dialogs
author Neil Muller <drnlmuller@gmail.com>
date Fri, 16 Sep 2011 21:47:56 +0200
parents 00c36ff53de9
children 5bf35267ddc0
line wrap: on
line diff
--- a/mamba/habitats/editor.py	Fri Sep 16 21:35:10 2011 +0200
+++ b/mamba/habitats/editor.py	Fri Sep 16 21:47:56 2011 +0200
@@ -25,6 +25,7 @@
     def __init__(self, level):
         super(EditorHabitat, self).__init__(EDIT_SCREEN)
         self.level = level
+        self.container.paused = False
         self.edit_widget = EditLevelWidget(self.level)
         self.container.add(self.edit_widget)
         self.container.add_callback(KEYDOWN, self.keydown_event)
@@ -54,9 +55,11 @@
         if ev.key in ESCAPE_KEYS:
             from mamba.habitats.mainmenu import MainMenu
             NewHabitatEvent.post(MainMenu())
+            return True
         elif ev.key == K_1:
             # Activate floor button
             self.floor_button.forced_click()
+            return True
 
     def setup_toolbar(self):
         """Draw the editor toolbar"""
@@ -186,6 +189,7 @@
         self.edit_widget.set_tool(new_tool)
         self.current_tool.text = 'Tool: %s' % text
         self.current_tool.prepare()
+        return True
 
     def save(self, ev, widget):
         message = None
@@ -194,15 +198,19 @@
         elif self.level.level_name in RESERVED_NAMES:
             message = MessageBox((300, 300), 'Reserved level name')
         if message:
+            self.container.paused = True
             self.container.add(message)
             message.grab_focus()
             return
         self.level.save_level()
+        return True
 
     def new(self, ev, widget):
         self.load_level(ev, widget, 'blank')
+        return True
 
     def load(self, ev, widget):
+        self.container.paused = True
         levels = get_level_list()
         load_list = []
         for level_name in levels:
@@ -214,6 +222,7 @@
         load_dialog = ListBox((200, 200), 'Select Level', load_list)
         self.container.add(load_dialog)
         load_dialog.grab_focus()
+        return True
 
     def load_level(self, ev, widget, level_name):
         try:
@@ -221,6 +230,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()
             return False
@@ -228,6 +238,7 @@
         self.level = new_level
         if level_name in RESERVED_NAMES:
             self.level.level_name = ''  # Special case for new level
+        self.container.paused = False
         self.edit_widget = EditLevelWidget(self.level)
         self.container.add(self.edit_widget)
         self.clear_toolbar()
@@ -235,8 +246,10 @@
 
     def change_toolbar(self, ev, widget, new_mode):
         self.mode = new_mode
+        self.edit_widget.tile_mode = (self.mode != 'Sprites')
         self.clear_toolbar()
         self.setup_toolbar()
+        return True
 
     def clear_toolbar(self):
         """Remove every non-edit widget from the container"""
@@ -245,17 +258,21 @@
                 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()
+        return True
 
     def update_name(self, new_name):
+        self.container.paused = False
         self.level.name = new_name
         self.clear_toolbar()
         self.setup_toolbar()
         return True
 
     def list_tilesets(self, ev, widget):
+        self.container.paused = True
         tilesets = get_tileset_list()
         load_list = []
         for name in tilesets:
@@ -267,8 +284,10 @@
         load_dialog = ListBox((200, 200), 'Select Level', load_list)
         self.container.add(load_dialog)
         load_dialog.grab_focus()
+        return True
 
     def list_tracks(self, ev, widget):
+        self.container.paused = True
         tracks = get_track_list()
         load_list = []
         for name in tracks:
@@ -291,14 +310,17 @@
             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()
             return True
+        self.container.paused = False
         self.clear_toolbar()
         self.setup_toolbar()
         return True
 
     def change_track(self, ev, widget, new_name):
+        self.container.paused = False
         self.level.background_track = new_name
         self.clear_toolbar()
         self.setup_toolbar()
@@ -324,9 +346,11 @@
         elif check_level_exists(new_name):
             message = MessageBox((300, 300), 'Name already in use')
         if message:
+            self.container.paused = True
             self.container.add(message)
             message.grab_focus()
             return False
+        self.container.paused = False
         self.level.level_name = new_name
         self.clear_toolbar()
         self.setup_toolbar()
@@ -337,3 +361,4 @@
         self.sprite_mode = sprite_mode
         self.clear_toolbar()
         self.setup_toolbar()
+        return True