Mercurial > mamba
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 |
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 | 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 | 43 EntryTextWidget, self.level.name, prompt='Level Title:') |
44 | |
45 self.authorname = self.add_widget( | |
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 | 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() |