annotate mamba/habitats/editor.py @ 270:3c95ba7408f1

Add protected level name list. Add load & new buttons
author Neil Muller <drnlmuller@gmail.com>
date Thu, 15 Sep 2011 13:25:00 +0200
parents 1e8dca95c48a
children a061dd62127c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
1 """Habitat for editing levels."""
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
2
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
3 import pygame.display
267
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
4 from pygame.locals import SWSURFACE, KEYDOWN, K_1, K_2
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
5
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
6 from mamba.engine import Habitat, NewHabitatEvent
120
6b1cdbdd34ca Rename LevelWidget
Neil Muller <drnlmuller@gmail.com>
parents: 113
diff changeset
7 from mamba.widgets.level import EditLevelWidget
174
893fb9f8f468 Hook up basic saving
Neil Muller <drnlmuller@gmail.com>
parents: 172
diff changeset
8 from mamba.widgets.text import TextWidget, TextButton
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
9 from mamba.widgets.imagebutton import ImageButtonWidget
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
10 #from mamba.widgets.messagebox import MessageBox
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
11 from mamba.widgets.entrybox import EntryBox
265
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
12 from mamba.widgets.toollist import ToolListWidget
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
13 from mamba.level import Level, TILE_MAP, THING_MAP
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
14 from mamba.data import check_level_exists
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
15 from mamba.constants import (SCREEN, EDIT_SCREEN, NAME, ESCAPE_KEYS,
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
16 RESERVED_NAMES)
42
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
17
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
18 MAX_TOOLS = 6
240
f0c14d9abd84 Hack in multi-page toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
19
42
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
20
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
21 class EditorHabitat(Habitat):
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
22 def __init__(self, level_name):
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
23 super(EditorHabitat, self).__init__(EDIT_SCREEN)
42
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
24 self.level = Level(level_name)
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
25 self.edit_widget = EditLevelWidget(self.level)
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
26 self.container.add(self.edit_widget)
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
27 self.container.add_callback(KEYDOWN, self.keydown_event)
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
28 self.mode = 'Tile'
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
29
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
30 def on_enter(self):
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
31 # We need to juggle the display to the correct size
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
32 # This is a horrible hack
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
33 pygame.display.quit()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
34 pygame.display.init()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
35 pygame.display.set_mode(EDIT_SCREEN, SWSURFACE)
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
36 pygame.display.set_caption('%s Level editor' % NAME)
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
37 super(EditorHabitat, self).on_enter()
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
38 self.setup_toolbar()
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
39
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
40 def on_exit(self):
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
41 # We need to juggle the display to the correct size
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
42 # This is a horrible hack
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
43 super(EditorHabitat, self).on_exit()
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
44 pygame.display.quit()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
45 pygame.display.init()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
46 pygame.display.set_mode(SCREEN, SWSURFACE)
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
47 pygame.display.set_caption(NAME)
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
48
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
49 def keydown_event(self, ev, widget):
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
50 if ev.key in ESCAPE_KEYS:
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
51 from mamba.habitats.mainmenu import MainMenu
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
52 NewHabitatEvent.post(MainMenu())
267
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
53 elif ev.key == K_1:
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
54 # Activate floor button
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
55 self.floor_button.forced_click()
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
56
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
57 def setup_toolbar(self):
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
58 """Draw the editor toolbar"""
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
59 button_height = 5
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
60 button_left = 820
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
61 button_padding = 2
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
62
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
63 filename = TextButton(
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
64 (button_left, button_height),
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
65 'File: %s' % self.level.level_name, color='white')
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
66 filename.add_callback('clicked', self.do_edit,
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
67 'Specify filename', self.level.level_name, self.check_file)
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
68 self.container.add(filename)
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
69 button_height += filename.rect.height + button_padding
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
70 levelname = TextButton((button_left, button_height),
170
77f1dae64019 Use name in editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
71 'Level: %s' % self.level.name, color='white')
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
72 levelname.add_callback('clicked', self.do_edit,
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
73 'Edit Level Title', self.level.name, self.update_name)
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
74 self.container.add(levelname)
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
75 button_height += levelname.rect.height + button_padding
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
76
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
77 tilesetname = TextButton((button_left, button_height),
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
78 'Tileset: %s' % self.level.tileset.name, color='white')
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
79 tilesetname.add_callback('clicked', self.do_edit, 'Edit Tileset',
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
80 self.level.tileset.name, self.check_tileset)
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
81 self.container.add(tilesetname)
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
82 button_height += tilesetname.surface.get_height() + button_padding
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
83 # TODO: Add Image widget for the current tool
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
84 self.current_tool = TextWidget((button_left, button_height),
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
85 'Tool: Floor', color='white')
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
86 self.container.add(self.current_tool)
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
87 button_height += self.current_tool.surface.get_height()
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
88 button_height += button_padding
267
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
89 self.floor_button = ImageButtonWidget(
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
90 (button_left, button_height), self.level.tileset.floor,
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
91 'Floor', color='white')
267
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
92 self.container.add(self.floor_button)
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
93 self.floor_button.add_callback('clicked', self.change_tool,
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
94 '.', 'Floor')
175
b498f76a455f Set initial tool correctly
Neil Muller <drnlmuller@gmail.com>
parents: 174
diff changeset
95 self.edit_widget.set_tool('.')
267
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
96 button_height += (self.floor_button.surface.get_height()
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
97 + button_padding)
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
98 if self.mode == 'Tile':
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
99 tile_map = TILE_MAP
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
100 change_mode_text = 'Switch to Things'
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
101 elif self.mode == 'Thing':
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
102 tile_map = THING_MAP
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
103 change_mode_text = 'Switch to Tiles'
265
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
104 tool_list = []
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
105 for tile_char in sorted(tile_map):
113
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
106 try:
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
107 tile = self.level.tileset[tile_char]
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
108 except pygame.error:
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
109 # Ignore stuff we can't load for now
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
110 continue
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
111 if tile is None:
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
112 continue
170
77f1dae64019 Use name in editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
113 if tile.name:
77f1dae64019 Use name in editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
114 text = tile.name
77f1dae64019 Use name in editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
115 else:
77f1dae64019 Use name in editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
116 text = 'Tile'
265
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
117 tile_button = ImageButtonWidget((0, 0), tile.image, text,
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
118 color='white')
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
119 tile_button.add_callback('clicked', self.change_tool,
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
120 tile_char, text)
265
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
121 tool_list.append(tile_button)
267
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
122 self.tool_widget = ToolListWidget((button_left, button_height),
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
123 tool_list, MAX_TOOLS, start_key=K_2)
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
124 self.container.add(self.tool_widget)
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
125 button_height += self.tool_widget.rect.height + 2
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
126
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
127 mode_button = TextButton((button_left, button_height),
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
128 change_mode_text)
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
129 mode_button.add_callback('clicked', self.change_toolbar)
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
130 self.container.add(mode_button)
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
131 button_height += mode_button.surface.get_height() + button_padding
237
9498b259c248 compress layout a tad more
Neil Muller <drnlmuller@gmail.com>
parents: 236
diff changeset
132 button_height += 2
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
133
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
134 new = TextButton((button_left, button_height), "New")
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
135 new.add_callback('clicked', self.new)
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
136 self.container.add(new)
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
137 load = TextButton((button_left + 60, button_height), "Load")
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
138 load.add_callback('clicked', self.load)
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
139 self.container.add(load)
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
140
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
141 save = TextButton((button_left + 120, button_height), "Save")
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
142 save.add_callback('clicked', self.save)
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
143 self.container.add(save)
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
144
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
145 def change_tool(self, ev, widget, new_tool, text):
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
146 self.edit_widget.set_tool(new_tool)
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
147 self.current_tool.text = 'Tool: %s' % text
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
148 self.current_tool.prepare()
174
893fb9f8f468 Hook up basic saving
Neil Muller <drnlmuller@gmail.com>
parents: 172
diff changeset
149
893fb9f8f468 Hook up basic saving
Neil Muller <drnlmuller@gmail.com>
parents: 172
diff changeset
150 def save(self, ev, widget):
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
151 if self.level.level_name in RESERVED_NAMES:
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
152 print "Can't save over reserved name"
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
153 return
174
893fb9f8f468 Hook up basic saving
Neil Muller <drnlmuller@gmail.com>
parents: 172
diff changeset
154 self.level.save_level()
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
155
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
156 def new(self, ev, widget):
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
157 pass
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
158
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
159 def load(self, ev, widget):
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
160 pass
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
161
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
162 def change_toolbar(self, ev, widget):
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
163 if self.mode == 'Tile':
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
164 self.mode = 'Thing'
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
165 elif self.mode == 'Thing':
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
166 self.mode = 'Tile'
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
167 self.clear_toolbar()
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
168 self.setup_toolbar()
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
169
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
170 def clear_toolbar(self):
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
171 """Remove every non-edit widget from the container"""
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
172 for widget in self.container.children[:]:
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
173 if widget is not self.edit_widget:
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
174 self.container.remove(widget)
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
175
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
176 def do_edit(self, ev, widget, message, init_value, callback):
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
177 editbox = EntryBox((200, 200), message, init_value, callback)
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
178 self.container.add(editbox)
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
179 editbox.grab_focus()
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
180
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
181 def update_name(self, new_name):
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
182 self.level.name = new_name
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
183 self.clear_toolbar()
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
184 self.setup_toolbar()
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
185 return True
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
186
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
187 def check_tileset(self, new_name):
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
188 return False
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
189
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
190 def check_file(self, new_name):
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
191 if new_name == self.level.level_name:
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
192 return True # No-op change
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
193 if check_level_exists(new_name):
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
194 # TODO: Popup warning
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
195 return False
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
196 self.level.level_name = new_name
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
197 self.clear_toolbar()
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
198 self.setup_toolbar()
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
199 return True