annotate mamba/habitats/editor.py @ 325:00c36ff53de9

Teach editor about background tracks
author Neil Muller <drnlmuller@gmail.com>
date Fri, 16 Sep 2011 20:31:02 +0200
parents fba74abad7b7
children 170d4a43c00e
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
276
9c57025781e7 Warn on enter filename results
Neil Muller <drnlmuller@gmail.com>
parents: 275
diff changeset
10 from mamba.widgets.messagebox import MessageBox
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
11 from mamba.widgets.entrybox import EntryBox
272
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
12 from mamba.widgets.listbox import ListBox
265
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
13 from mamba.widgets.toollist import ToolListWidget
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
14 from mamba.level import Level, Tileset, TILE_MAP, THING_MAP, InvalidMapError
325
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
15 from mamba.data import (check_level_exists, get_level_list, get_tileset_list,
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
16 get_track_list)
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
17 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
18 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
19
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
20 MAX_TOOLS = 6
284
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
21 MODE_HEIGHT = 500
240
f0c14d9abd84 Hack in multi-page toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
22
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
23
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 class EditorHabitat(Habitat):
314
fba74abad7b7 Pass Level() objects to LevelHabitat and LevelEditorHabitat, in preparation for generating thumbnails from levels in levelmenu
Stefano Rivera <stefano@rivera.za.net>
parents: 284
diff changeset
25 def __init__(self, level):
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
26 super(EditorHabitat, self).__init__(EDIT_SCREEN)
314
fba74abad7b7 Pass Level() objects to LevelHabitat and LevelEditorHabitat, in preparation for generating thumbnails from levels in levelmenu
Stefano Rivera <stefano@rivera.za.net>
parents: 284
diff changeset
27 self.level = level
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
28 self.edit_widget = EditLevelWidget(self.level)
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
29 self.container.add(self.edit_widget)
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
30 self.container.add_callback(KEYDOWN, self.keydown_event)
284
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
31 self.mode = 'Tiles'
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
32 self.sprite_mode = 'Add'
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
33
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
34 def on_enter(self):
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
35 # 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
36 # This is a horrible hack
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
37 pygame.display.quit()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
38 pygame.display.init()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
39 pygame.display.set_mode(EDIT_SCREEN, SWSURFACE)
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
40 pygame.display.set_caption('%s Level editor' % NAME)
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
41 super(EditorHabitat, self).on_enter()
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
42 self.setup_toolbar()
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
43
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
44 def on_exit(self):
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
45 # 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
46 # This is a horrible hack
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
47 super(EditorHabitat, self).on_exit()
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
48 pygame.display.quit()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
49 pygame.display.init()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
50 pygame.display.set_mode(SCREEN, SWSURFACE)
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
51 pygame.display.set_caption(NAME)
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
52
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
53 def keydown_event(self, ev, widget):
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
54 if ev.key in ESCAPE_KEYS:
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
55 from mamba.habitats.mainmenu import MainMenu
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
56 NewHabitatEvent.post(MainMenu())
267
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
57 elif ev.key == K_1:
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
58 # Activate floor button
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
59 self.floor_button.forced_click()
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
60
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
61 def setup_toolbar(self):
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
62 """Draw the editor toolbar"""
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
63 button_height = 5
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
64 button_left = 820
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
65 button_padding = 2
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
66
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
67 filename = TextButton(
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
68 (button_left, button_height),
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
69 '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
70 filename.add_callback('clicked', self.do_edit,
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
71 '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
72 self.container.add(filename)
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
73 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
74 levelname = TextButton((button_left, button_height),
170
77f1dae64019 Use name in editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
75 '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
76 levelname.add_callback('clicked', self.do_edit,
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
77 'Edit Level Title', self.level.name, self.update_name)
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
78 self.container.add(levelname)
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
79 button_height += levelname.rect.height + button_padding
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
80
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
81 tilesetname = TextButton((button_left, button_height),
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
82 'Tileset: %s' % self.level.tileset.name, color='white')
275
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
83 tilesetname.add_callback('clicked', self.list_tilesets)
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
84 self.container.add(tilesetname)
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
85 button_height += tilesetname.surface.get_height() + button_padding
325
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
86 trackname = TextButton((button_left, button_height),
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
87 'Music: %s' % self.level.background_track, color='white')
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
88 trackname.add_callback('clicked', self.list_tracks)
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
89 self.container.add(trackname)
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
90 button_height += trackname.surface.get_height() + button_padding
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
91 # TODO: Add Image widget for the current tool
284
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
92 if self.mode != 'Sprites':
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
93 self.current_tool = TextWidget((button_left, button_height),
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
94 'Tool: Floor', color='white')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
95 else:
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
96 self.current_tool = TextWidget((button_left, button_height),
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
97 '%s Sprite' % self.sprite_mode, color='white')
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
98 self.container.add(self.current_tool)
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
99 button_height += self.current_tool.surface.get_height()
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
100 button_height += button_padding
284
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
101 if self.mode != 'Sprites':
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
102 self.floor_button = ImageButtonWidget(
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
103 (button_left, button_height), self.level.tileset.floor,
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
104 'Floor', color='white')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
105 self.container.add(self.floor_button)
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
106 self.floor_button.add_callback('clicked', self.change_tool,
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
107 '.', 'Floor')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
108 self.edit_widget.set_tool('.')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
109 button_height += (self.floor_button.surface.get_height()
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
110 + button_padding)
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
111 if self.mode == 'Tiles':
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
112 tile_map = TILE_MAP
284
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
113 elif self.mode == 'Things':
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
114 tile_map = THING_MAP
284
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
115 else:
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
116 tile_map = []
265
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
117 tool_list = []
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
118 for tile_char in sorted(tile_map):
113
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
119 try:
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
120 tile = self.level.tileset[tile_char]
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
121 except pygame.error:
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
122 # Ignore stuff we can't load for now
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
123 continue
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
124 if tile is None:
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
125 continue
170
77f1dae64019 Use name in editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
126 if tile.name:
77f1dae64019 Use name in editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
127 text = tile.name
77f1dae64019 Use name in editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
128 else:
77f1dae64019 Use name in editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
129 text = 'Tile'
265
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
130 tile_button = ImageButtonWidget((0, 0), tile.image, text,
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
131 color='white')
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
132 tile_button.add_callback('clicked', self.change_tool,
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
133 tile_char, text)
265
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents: 240
diff changeset
134 tool_list.append(tile_button)
284
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
135 if self.mode == "Sprites":
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
136 for name in ['Add', 'Edit', 'Delete']:
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
137 tile_button = TextButton((0, 0), '%s Sprite' % name)
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
138 tile_button.add_callback('clicked', self.sprite_tool,
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
139 name)
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
140 tool_list.append(tile_button)
267
1e8dca95c48a Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
141 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
142 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
143 self.container.add(self.tool_widget)
284
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
144 button_height = self.container.rect.top + MODE_HEIGHT
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
145 if self.mode == 'Tiles':
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
146 mode_button1 = TextButton((button_left, button_height),
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
147 'Things')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
148 mode_button1.add_callback('clicked', self.change_toolbar, 'Things')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
149 mode_button2 = TextButton((button_left + 100, button_height),
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
150 'Sprites')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
151 mode_button2.add_callback('clicked', self.change_toolbar,
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
152 'Sprites')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
153 elif self.mode == 'Things':
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
154 mode_button1 = TextButton((button_left, button_height),
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
155 'Tiles')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
156 mode_button1.add_callback('clicked', self.change_toolbar, 'Tiles')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
157 mode_button2 = TextButton((button_left + 100, button_height),
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
158 'Sprites')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
159 mode_button2.add_callback('clicked', self.change_toolbar,
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
160 'Sprites')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
161 elif self.mode == 'Sprites':
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
162 mode_button1 = TextButton((button_left, button_height),
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
163 'Tiles')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
164 mode_button1.add_callback('clicked', self.change_toolbar, 'Tiles')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
165 mode_button2 = TextButton((button_left + 100, button_height),
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
166 'Things')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
167 mode_button2.add_callback('clicked', self.change_toolbar,
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
168 'Things')
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
169 self.container.add(mode_button1)
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
170 self.container.add(mode_button2)
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
171 button_height += mode_button1.rect.height + button_padding
237
9498b259c248 compress layout a tad more
Neil Muller <drnlmuller@gmail.com>
parents: 236
diff changeset
172 button_height += 2
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
173
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
174 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
175 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
176 self.container.add(new)
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
177 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
178 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
179 self.container.add(load)
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
180
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
181 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
182 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
183 self.container.add(save)
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
184
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
185 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
186 self.edit_widget.set_tool(new_tool)
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
187 self.current_tool.text = 'Tool: %s' % text
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 170
diff changeset
188 self.current_tool.prepare()
174
893fb9f8f468 Hook up basic saving
Neil Muller <drnlmuller@gmail.com>
parents: 172
diff changeset
189
893fb9f8f468 Hook up basic saving
Neil Muller <drnlmuller@gmail.com>
parents: 172
diff changeset
190 def save(self, ev, widget):
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
191 message = None
277
82aa91664e27 Warn on save failures
Neil Muller <drnlmuller@gmail.com>
parents: 276
diff changeset
192 if not self.level.level_name:
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
193 message = MessageBox((300, 300), 'Please enter a name')
277
82aa91664e27 Warn on save failures
Neil Muller <drnlmuller@gmail.com>
parents: 276
diff changeset
194 elif self.level.level_name in RESERVED_NAMES:
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
195 message = MessageBox((300, 300), 'Reserved level name')
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
196 if message:
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
197 self.container.add(message)
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
198 message.grab_focus()
272
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
199 return
174
893fb9f8f468 Hook up basic saving
Neil Muller <drnlmuller@gmail.com>
parents: 172
diff changeset
200 self.level.save_level()
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
201
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
202 def new(self, ev, widget):
272
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
203 self.load_level(ev, widget, 'blank')
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
204
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
205 def load(self, ev, widget):
325
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
206 levels = get_level_list()
272
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
207 load_list = []
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
208 for level_name in levels:
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
209 if level_name in RESERVED_NAMES:
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
210 continue
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
211 load_button = TextButton((0, 0), level_name)
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
212 load_button.add_callback('clicked', self.load_level, level_name)
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
213 load_list.append(load_button)
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
214 load_dialog = ListBox((200, 200), 'Select Level', load_list)
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
215 self.container.add(load_dialog)
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
216 load_dialog.grab_focus()
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
217
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
218 def load_level(self, ev, widget, level_name):
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
219 try:
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
220 new_level = Level(level_name)
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
221 except (IOError, InvalidMapError, pygame.error), error:
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
222 message = MessageBox((300, 300),
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
223 'Loading Level Failed: %s' % error, color='red')
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
224 self.container.add(message)
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
225 message.grab_focus()
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
226 return False
272
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
227 self.container.remove(self.edit_widget)
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
228 self.level = new_level
272
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
229 if level_name in RESERVED_NAMES:
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
230 self.level.level_name = '' # Special case for new level
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
231 self.edit_widget = EditLevelWidget(self.level)
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
232 self.container.add(self.edit_widget)
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
233 self.clear_toolbar()
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 270
diff changeset
234 self.setup_toolbar()
270
3c95ba7408f1 Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 267
diff changeset
235
284
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
236 def change_toolbar(self, ev, widget, new_mode):
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
237 self.mode = new_mode
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
238 self.clear_toolbar()
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
239 self.setup_toolbar()
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
240
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
241 def clear_toolbar(self):
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
242 """Remove every non-edit widget from the container"""
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
243 for widget in self.container.children[:]:
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
244 if widget is not self.edit_widget:
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 175
diff changeset
245 self.container.remove(widget)
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
246
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
247 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
248 editbox = EntryBox((200, 200), message, init_value, callback)
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
249 self.container.add(editbox)
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
250 editbox.grab_focus()
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
251
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
252 def update_name(self, new_name):
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
253 self.level.name = new_name
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
254 self.clear_toolbar()
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
255 self.setup_toolbar()
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
256 return True
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
257
275
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
258 def list_tilesets(self, ev, widget):
325
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
259 tilesets = get_tileset_list()
275
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
260 load_list = []
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
261 for name in tilesets:
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
262 if name == 'common':
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
263 continue
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
264 load_button = TextButton((0, 0), name)
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
265 load_button.add_callback('clicked', self.change_tileset, name)
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
266 load_list.append(load_button)
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
267 load_dialog = ListBox((200, 200), 'Select Level', load_list)
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
268 self.container.add(load_dialog)
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
269 load_dialog.grab_focus()
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
270
325
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
271 def list_tracks(self, ev, widget):
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
272 tracks = get_track_list()
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
273 load_list = []
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
274 for name in tracks:
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
275 load_button = TextButton((0, 0), name)
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
276 load_button.add_callback('clicked', self.change_track, name)
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
277 load_list.append(load_button)
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
278 load_dialog = ListBox((200, 200), 'Select Level', load_list, 6)
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
279 self.container.add(load_dialog)
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
280 load_dialog.grab_focus()
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
281 return True
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
282
275
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
283 def change_tileset(self, ev, widget, new_name):
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
284 self.level.update_tiles_ascii()
279
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
285 old_tileset = self.level.tileset
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
286 try:
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
287 self.level.tileset = Tileset(new_name)
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
288 self.level.restart()
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
289 except pygame.error, error:
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
290 self.level.tileset = old_tileset
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
291 message = MessageBox((300, 300),
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
292 'Unable to change tileset:: %s' % error,
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
293 self.refresh_display, color='red')
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
294 self.container.add(message)
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
295 message.grab_focus()
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
296 return True
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
297 self.clear_toolbar()
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
298 self.setup_toolbar()
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
299 return True
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
300
325
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
301 def change_track(self, ev, widget, new_name):
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
302 self.level.background_track = new_name
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
303 self.clear_toolbar()
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
304 self.setup_toolbar()
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
305 return True
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 314
diff changeset
306
279
162bddbbc5d0 Protect against bad tilesets as well
Neil Muller <drnlmuller@gmail.com>
parents: 278
diff changeset
307 def refresh_display(self):
275
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
308 self.level.restart()
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
309 self.clear_toolbar()
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
310 self.setup_toolbar()
51bec5e6191e Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents: 272
diff changeset
311 return True
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
312
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
313 def check_file(self, new_name):
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
314 message = None
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
315 if new_name == self.level.level_name:
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
316 return True # No-op change
276
9c57025781e7 Warn on enter filename results
Neil Muller <drnlmuller@gmail.com>
parents: 275
diff changeset
317 if not new_name:
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
318 message = MessageBox((300, 300), 'Please enter a name')
277
82aa91664e27 Warn on save failures
Neil Muller <drnlmuller@gmail.com>
parents: 276
diff changeset
319 if new_name in RESERVED_NAMES:
82aa91664e27 Warn on save failures
Neil Muller <drnlmuller@gmail.com>
parents: 276
diff changeset
320 # This case is caught by the existance check, but the
82aa91664e27 Warn on save failures
Neil Muller <drnlmuller@gmail.com>
parents: 276
diff changeset
321 # importance of the reserved names means we use a different
82aa91664e27 Warn on save failures
Neil Muller <drnlmuller@gmail.com>
parents: 276
diff changeset
322 # message
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
323 message = MessageBox((300, 300), 'Reserved level name')
277
82aa91664e27 Warn on save failures
Neil Muller <drnlmuller@gmail.com>
parents: 276
diff changeset
324 elif check_level_exists(new_name):
278
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
325 message = MessageBox((300, 300), 'Name already in use')
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
326 if message:
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
327 self.container.add(message)
f10d06fc64b2 Add some robustness against broken levels
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
328 message.grab_focus()
229
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
329 return False
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
330 self.level.level_name = new_name
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
331 self.clear_toolbar()
b0ef7eecc67a Make filename editable
Neil Muller <drnlmuller@gmail.com>
parents: 180
diff changeset
332 self.setup_toolbar()
236
09247e08aeda Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
333 return True
284
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
334
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
335 def sprite_tool(self, ev, widget, sprite_mode):
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
336 """Handle sprite stuff"""
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
337 self.sprite_mode = sprite_mode
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
338 self.clear_toolbar()
96b4ad9b4d30 Start work on sprite editor. Tweak layout issues
Neil Muller <drnlmuller@gmail.com>
parents: 279
diff changeset
339 self.setup_toolbar()