Refactor
[erdslangetjie.git] / erdslangetjie / editor / editor.py
index 1606fd63bcd6f2d92a184ff197e6341941652716..ef08b813e01f7c2d30c4dccbda827ba2bbe21df1 100644 (file)
@@ -8,6 +8,7 @@ from kivy.uix.widget import Widget
 from kivy.uix.floatlayout import FloatLayout
 from kivy.graphics import Color, Rectangle
 from kivy.uix.label import Label
+from kivy.uix.popup import Popup
 from kivy.utils import platform
 from kivy.config import Config
 
@@ -75,6 +76,8 @@ class EditorWindow(FloatLayout):
         self.draw_save_button()
 
     def _draw_tile(self, tile_pos, tile):
+        if tile_pos in self.nodes:
+            self.remove_widget(self.nodes[tile_pos])
         node = Widget(size=(TILE_SIZE, TILE_SIZE), pos=tile_pos)
         node.bind(on_touch_down=self.change_node)
         node.bind(on_touch_move=self.change_node)
@@ -110,7 +113,24 @@ class EditorWindow(FloatLayout):
         self.add_widget(save_label)
 
     def do_save(self, label, ref):
-        pass
+        try:
+            self.level_obj.validate()
+        except RuntimeError as err:
+            print err
+            popup = Popup(title='Error',
+                    content=Label(text='Level not valid: %s' % err),
+                    size_hint=(.5, .5))
+            popup.open()
+            return
+        save_data = self.level_obj.get_level_data()
+        savefile = file(filepath(self.level), 'w')
+        savefile.write(save_data)
+        savefile.write('\n')
+        savefile.close()
+        popup = Popup(title='Success',
+                content=Label(text='Level saved to %s' % self.level),
+                size_hint=(.5, .5))
+        popup.open()
 
     def change_tool(self, label, ref):
         self.tool = ref
@@ -131,8 +151,6 @@ class EditorWindow(FloatLayout):
                 self.level_obj.set_tile_type(tile_pos, action)
                 for map_pos, new_tile in self.level_obj.get_changed_tiles():
                     node_pos = (map_pos[0] * TILE_SIZE, map_pos[1] * TILE_SIZE)
-                    old_node = self.nodes[node_pos]
-                    self.remove_widget(old_node)
                     self._draw_tile(node_pos, new_tile)