annotate mamba/widgets/editlevel.py @ 565:fa673a8312ec

Add author to editor
author Neil Muller <drnlmuller@gmail.com>
date Tue, 18 Oct 2011 16:42:15 +0200
parents 4030ad60eebc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
454
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 from mamba.data import get_tileset_list, get_track_list
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
2 from mamba.widgets.base import Box
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3 from mamba.widgets.text import TextWidget, TextButton, EntryTextWidget
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
4 from mamba.widgets.listbox import ListBox
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
6
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
7 class EditLevelBox(Box):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
8 """Edit details for a level map"""
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
9
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
10 button_padding = 2
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
11
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
12 def __init__(self, rect, level, post_callback=None):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
13 super(EditLevelBox, self).__init__(rect)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
14 self.level = level
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
15 self.level_tileset = self.level.tileset.name
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
16 self.level_track = self.level.background_track
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
17 self.post_callback = post_callback
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
18 self.prepare()
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
19 self.modal = True
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
20
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
21 def add_widget(self, cls, *args, **kw):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
22 clicked = kw.pop('clicked', None)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
23 offset = kw.pop('offset', (0, 0))
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
24 pos = (self.widget_left + offset[0],
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
25 self.widget_top + offset[1])
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
26 widget = cls(pos, *args, **kw)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
27 if clicked:
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
28 widget.add_callback('clicked', *clicked)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
29 self.add(widget)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
30 self.widget_top += widget.rect.height + self.button_padding
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
31 return widget
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
32
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
33 def prepare(self):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
34 self.widget_left = self.rect.left
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
35 self.widget_top = self.rect.top
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
36
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
37 self.add_widget(TextWidget, "Specify Level Details")
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
38
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
39 self.filename = self.add_widget(
565
fa673a8312ec Add author to editor
Neil Muller <drnlmuller@gmail.com>
parents: 457
diff changeset
40 EntryTextWidget, self.level.level_name, prompt="File:")
454
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
41
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
42 self.levelname = self.add_widget(
565
fa673a8312ec Add author to editor
Neil Muller <drnlmuller@gmail.com>
parents: 457
diff changeset
43 EntryTextWidget, self.level.name, prompt='Level Title:')
fa673a8312ec Add author to editor
Neil Muller <drnlmuller@gmail.com>
parents: 457
diff changeset
44
fa673a8312ec Add author to editor
Neil Muller <drnlmuller@gmail.com>
parents: 457
diff changeset
45 self.authorname = self.add_widget(
fa673a8312ec Add author to editor
Neil Muller <drnlmuller@gmail.com>
parents: 457
diff changeset
46 EntryTextWidget, self.level.author, prompt='Author:')
454
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
47
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
48 # self.tileset = self.add_widget(
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
49 # TextButton, 'Tileset: %s' % self.level_tileset,
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
50 # color='white', clicked=(self.list_tilesets,))
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
51
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
52 self.trackname = self.add_widget(
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
53 TextButton, 'Music: %s' % self.level_track,
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
54 color='white', clicked=(self.list_tracks,))
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
55
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
56 self.ok_button = self.add_widget(
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
57 TextButton, 'OK', offset=(10, 0), clicked=(self.close, True))
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
58
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
59 self.cancel_button = self.add_widget(
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
60 TextButton, 'Cancel', offset=(10, 0), clicked=(self.close, False))
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
61
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
62 self.rect.width = max(self.rect.width, 400)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
63 self.rect.height += 5
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
64
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
65 def change_tileset(self, ev, widget, name):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
66 self.level_tileset = name
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
67 self.tileset.text = 'Tileset: %s' % name
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
68 self.tileset.prepare()
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
69
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
70 def change_track(self, ev, widget, name):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
71 self.level_track = name
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
72 self.trackname.text = 'Music: %s' % name
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
73 self.trackname.prepare()
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
74
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
75 def mk_loadlist(self, title, items, callback):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
76 load_list = []
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
77 for name in items:
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
78 load_button = TextButton((0, 0), name)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
79 load_button.add_callback('clicked', callback, name)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
80 load_list.append(load_button)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
81 lb = ListBox((200, 200), title, load_list, 6)
457
4030ad60eebc Fix music selection stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
82 lb.parent_modal = self.modal
4030ad60eebc Fix music selection stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
83 self.modal = False
4030ad60eebc Fix music selection stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
84 self.parent.add(lb)
454
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
85 lb.grab_focus()
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
86
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
87 def list_tilesets(self, ev, widget):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
88 tilesets = [i for i in get_tileset_list() if i != 'common']
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
89 self.mk_loadlist('Select Tileset', tilesets, self.change_tileset)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
90
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
91 def list_tracks(self, ev, widget):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
92 tracks = get_track_list()
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
93 self.mk_loadlist('Select Music', tracks, self.change_track)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
94
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
95 def close(self, ev, widget, do_update):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
96 self.modal = False
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
97 self.parent.remove(self)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
98 if do_update:
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
99 self.post_callback(
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
100 self.filename.value,
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
101 self.levelname.value,
565
fa673a8312ec Add author to editor
Neil Muller <drnlmuller@gmail.com>
parents: 457
diff changeset
102 self.authorname.value,
454
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
103 self.level_tileset,
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
104 self.level_track)
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
105 return True
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
106
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
107 def grab_focus(self):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
108 return self.ok_button.grab_focus()