Tweak editor layout
[erdslangetjie.git] / erdslangetjie / editor / editor.py
1 import sys
2 import os
3 import kivy
4
5 kivy.require('1.6.0')
6
7 from kivy.app import App
8 from kivy.logger import Logger, LoggerHistory
9 from kivy.uix.widget import Widget
10 from kivy.uix.floatlayout import FloatLayout
11 from kivy.graphics import Color, Rectangle
12
13 from erdslangetjie.data import filepath, load
14 from erdslangetjie.level import Level
15
16
17 TILE_SIZE = 24
18
19
20 class EditorWindow(FloatLayout):
21
22     def __init__(self, level):
23         super(EditorWindow, self).__init__(size=(800, 600))
24         if os.path.exists(filepath(level)):
25             level_data = load(level)
26             self.level = level
27         elif os.path.exists(filepath('levels/' + level)):
28             level_data = load('levels/' + level)
29             self.level = 'levels/' + level
30         else:
31             print 'Unable to find %s - treating this as a new level' % level
32             level_data = load('levels/blank.txt')
33             if 'levels/' in level:
34                 self.level = level
35             else:
36                 self.level = 'levels/' + level
37         self.level_obj = Level(level_data)
38         level_data.close()
39         self.level_obj.load_tiles()
40
41     def build(self):
42         self.clear_widgets()
43         tiles = self.level_obj.get_tiles()
44         bx, by = 0, 0
45         for tile_line in tiles:
46             bx = 0
47             for tile in tile_line:
48                 node = Widget(size=(TILE_SIZE, TILE_SIZE), pos=(bx, by))
49                 with node.canvas:
50                     Color(1, 1, 1)
51                     Rectangle(pos=node.pos, size=node.size,
52                             texture=tile.texture)
53                 self.add_widget(node)
54                 bx += TILE_SIZE
55             by += TILE_SIZE
56
57
58 class EditorApp(App):
59
60     def __init__(self, level):
61         self.level = level
62         super(EditorApp, self).__init__()
63
64     def build(self):
65         editor = EditorWindow(self.level)
66         editor.build()
67         return editor
68
69
70 def main():
71     if len(sys.argv) > 1:
72         level = sys.argv[1]
73     else:
74         level = 'level1.txt'
75     # Uncomment to silence excessive logging
76     #for hdlr in Logger.handlers[:]:
77     #    if not isinstance(hdlr, LoggerHistory):
78     #        Logger.removeHandler(hdlr)
79     EditorApp(level).run()
80
81
82 if __name__ == '__main__':
83     main()