Better tool names
[erdslangetjie.git] / erdslangetjie / editor / editor.py
index 553132e546e1c7bf981380375ca7efe60e809b8e..f2bf09b9d12e1afc071ebcebf914933a35a7149d 100644 (file)
@@ -1,26 +1,29 @@
 import sys
 import os
 import sys
 import os
-import kivy
 
 
-kivy.require('1.6.0')
+from erdslangetjie.constants import TILE_SIZE
 
 from kivy.app import App
 
 from kivy.app import App
-from kivy.logger import Logger, LoggerHistory
 from kivy.uix.widget import Widget
 from kivy.uix.floatlayout import FloatLayout
 from kivy.graphics import Color, Rectangle
 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.utils import platform
+from kivy.config import Config
 
 from erdslangetjie.data import filepath, load
 from erdslangetjie.level import Level
 
 
 
 from erdslangetjie.data import filepath, load
 from erdslangetjie.level import Level
 
 
-TILE_SIZE = 24
+if platform() != 'android':
+    Config.set('graphics', 'width', '1326')
+    Config.set('graphics', 'height', '760')
 
 
 class EditorWindow(FloatLayout):
 
     def __init__(self, level):
 
 
 class EditorWindow(FloatLayout):
 
     def __init__(self, level):
-        super(EditorWindow, self).__init__(size=(800, 600))
+        super(EditorWindow, self).__init__(size=(1326, 760))
         if os.path.exists(filepath(level)):
             level_data = load(level)
             self.level = level
         if os.path.exists(filepath(level)):
             level_data = load(level)
             self.level = level
@@ -38,22 +41,69 @@ class EditorWindow(FloatLayout):
         level_data.close()
         self.level_obj.load_tiles()
 
         level_data.close()
         self.level_obj.load_tiles()
 
+        self.tool = None
+        self.tool_widgets = []
+
     def build(self):
         self.clear_widgets()
         tiles = self.level_obj.get_tiles()
         bx, by = 0, 0
     def build(self):
         self.clear_widgets()
         tiles = self.level_obj.get_tiles()
         bx, by = 0, 0
+        self.nodes = {}
         for tile_line in tiles:
             bx = 0
             for tile in tile_line:
                 node = Widget(size=(TILE_SIZE, TILE_SIZE), pos=(bx, by))
         for tile_line in tiles:
             bx = 0
             for tile in tile_line:
                 node = Widget(size=(TILE_SIZE, TILE_SIZE), pos=(bx, by))
+                node.bind(on_touch_down=self.change_node)
+                node.bind(on_touch_move=self.change_node)
                 with node.canvas:
                     Color(1, 1, 1)
                     Rectangle(pos=node.pos, size=node.size,
                             texture=tile.texture)
                 self.add_widget(node)
                 with node.canvas:
                     Color(1, 1, 1)
                     Rectangle(pos=node.pos, size=node.size,
                             texture=tile.texture)
                 self.add_widget(node)
+                self.nodes[(bx, by)] = node
                 bx += TILE_SIZE
             by += TILE_SIZE
 
                 bx += TILE_SIZE
             by += TILE_SIZE
 
+        name = Label(text="Level: [color=00ffcc]%s[/color]" % self.level,
+                markup=True, font_size=24, pos=(500, 360))
+        self.add_widget(name)
+
+        self.draw_toolbar()
+
+    def draw_toolbar(self):
+        for widget in self.tool_widgets:
+            widget.unbind(on_ref_press=self.change_tool)
+            self.remove_widget(widget)
+        self.tool_widgets = []
+        y = 300
+        for tool in ['wall', 'floor', 'add entrance', 'add exit']:
+            if self.tool == tool:
+                color = '00cccc'
+            else:
+                color = 'cccccc'
+            tool_label = Label(text='[color=%s][ref=%s]%s[/color]' %
+                    (color, tool, tool), markup=True, font_size=24,
+                    pos=(500, y))
+            y -= 50
+            tool_label.bind(on_ref_press=self.change_tool)
+            self.add_widget(tool_label)
+            self.tool_widgets.append(tool_label)
+
+    def change_tool(self, label, ref):
+        self.tool = ref
+        self.draw_toolbar()
+
+    def contained(self, node, pos):
+        if pos[0] < node.pos[0] or pos[0] > node.pos[0] + TILE_SIZE:
+            return False
+        if pos[1] < node.pos[1] or pos[1] > node.pos[1] + TILE_SIZE:
+            return False
+        return True
+
+    def change_node(self, node, touch):
+        if self.contained(node, touch.pos):
+            print touch, node, node.size, node.pos
+
 
 class EditorApp(App):
 
 
 class EditorApp(App):
 
@@ -72,10 +122,6 @@ def main():
         level = sys.argv[1]
     else:
         level = 'level1.txt'
         level = sys.argv[1]
     else:
         level = 'level1.txt'
-    # Uncomment to silence excessive logging
-    #for hdlr in Logger.handlers[:]:
-    #    if not isinstance(hdlr, LoggerHistory):
-    #        Logger.removeHandler(hdlr)
     EditorApp(level).run()
 
 
     EditorApp(level).run()