Mercurial > nagslang
comparison tools/area_editor.py @ 225:c8ead015c48e
Display list of objects to edit / delete
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 04 Sep 2013 18:04:59 +0200 |
parents | 4197350b9897 |
children | 261fd65a8816 |
comparison
equal
deleted
inserted
replaced
224:b6db213e53a2 | 225:c8ead015c48e |
---|---|
22 import pymunk | 22 import pymunk |
23 | 23 |
24 from albow.root import RootWidget | 24 from albow.root import RootWidget |
25 from albow.widget import Widget | 25 from albow.widget import Widget |
26 from albow.controls import Button, Label, CheckBox | 26 from albow.controls import Button, Label, CheckBox |
27 from albow.dialogs import alert | 27 from albow.dialogs import alert, Dialog |
28 from albow.layout import Row | |
29 from albow.table_view import TableView, TableColumn | |
28 | 30 |
29 from nagslang.options import parse_args | 31 from nagslang.options import parse_args |
30 from nagslang.constants import SCREEN | 32 from nagslang.constants import SCREEN |
31 from nagslang.level import Level, POLY_COLORS, LINE_COLOR | 33 from nagslang.level import Level, POLY_COLORS, LINE_COLOR |
32 from nagslang.enemies import Enemy | 34 from nagslang.enemies import Enemy |
167 self.point_to_pygame(endpoint)] | 169 self.point_to_pygame(endpoint)] |
168 pygame.draw.lines(self._surface, LINE_COLOR, False, pointlist, 1) | 170 pygame.draw.lines(self._surface, LINE_COLOR, False, pointlist, 1) |
169 return self._surface.copy() | 171 return self._surface.copy() |
170 | 172 |
171 | 173 |
174 class ObjectTable(TableView): | |
175 | |
176 columns = [TableColumn("Object", 690, 'l', '%r')] | |
177 | |
178 def __init__(self, data): | |
179 super(ObjectTable, self).__init__(height=450) | |
180 self.data = data | |
181 self.selected_row = -1 | |
182 | |
183 def num_rows(self): | |
184 return len(self.data) | |
185 | |
186 def row_data(self, i): | |
187 data = self.data[i] | |
188 if 'name' in data: | |
189 return ('%s (%s)' % (data['classname'], data['name']), ) | |
190 return (data['classname'], ) | |
191 | |
192 def row_is_selected(self, i): | |
193 return self.selected_row == i | |
194 | |
195 def click_row(self, i, ev): | |
196 self.selected_row = i | |
197 | |
198 def get_selection(self): | |
199 if self.selected_row >= 0: | |
200 return self.data[self.selected_row] | |
201 return None | |
202 | |
203 | |
172 class LevelWidget(Widget): | 204 class LevelWidget(Widget): |
173 | 205 |
174 def __init__(self, level): | 206 def __init__(self, level): |
175 super(LevelWidget, self).__init__(pygame.rect.Rect(0, 0, | 207 super(LevelWidget, self).__init__(pygame.rect.Rect(0, 0, |
176 SCREEN[0], SCREEN[1])) | 208 SCREEN[0], SCREEN[1])) |
330 alert("Successfully closed the polygon") | 362 alert("Successfully closed the polygon") |
331 self.change_poly(None) | 363 self.change_poly(None) |
332 else: | 364 else: |
333 alert("Failed to close the polygon") | 365 alert("Failed to close the polygon") |
334 | 366 |
367 def _make_edit_dialog(self, entries): | |
368 # Dialog to hold the editor | |
369 edit_box = Dialog() | |
370 edit_box.rect = pygame.rect.Rect(0, 0, 700, 500) | |
371 table = ObjectTable(entries) | |
372 edit_box.add(table) | |
373 buttons = [] | |
374 for text in ['OK', 'Delete', 'Cancel']: | |
375 but = Button(text, action=lambda x=text: edit_box.dismiss(x)) | |
376 buttons.append(but) | |
377 row = Row(buttons) | |
378 row.rect = pygame.rect.Rect(0, 450, 700, 50) | |
379 edit_box.add(row) | |
380 return edit_box | |
381 | |
382 def edit_objects(self): | |
383 edit_box = self._make_edit_dialog(self.level._game_objects) | |
384 res = edit_box.present() | |
385 if res == 'OK': | |
386 # Edit object stuff goes here | |
387 pass | |
388 elif res == 'Delete': | |
389 pass | |
390 | |
391 def edit_enemies(self): | |
392 edit_box = self._make_edit_dialog(self.level._enemies) | |
393 res = edit_box.present() | |
394 if res == 'OK': | |
395 # Edit object stuff goes here | |
396 pass | |
397 elif res == 'Delete': | |
398 pass | |
399 | |
335 | 400 |
336 class PolyButton(Button): | 401 class PolyButton(Button): |
337 """Button for coosing the correct polygon""" | 402 """Button for coosing the correct polygon""" |
338 | 403 |
339 def __init__(self, index, level_widget): | 404 def __init__(self, index, level_widget): |
448 def _make_objects_menu(self): | 513 def _make_objects_menu(self): |
449 widgets = [] | 514 widgets = [] |
450 | 515 |
451 # Add poly buttons | 516 # Add poly buttons |
452 y = 15 | 517 y = 15 |
518 | |
519 edit_objs_but = Button('Edit Objects', | |
520 action=self.level_widget.edit_objects) | |
521 edit_objs_but.rect = BUTTON_RECT.copy() | |
522 edit_objs_but.rect.move_ip(MENU_LEFT, y) | |
523 widgets.append(edit_objs_but) | |
524 y += MENU_BUTTON_HEIGHT + MENU_PAD | |
525 | |
526 edir_enemies_but = Button('Edit Enemies', | |
527 action=self.level_widget.edit_enemies) | |
528 edir_enemies_but.rect = BUTTON_RECT.copy() | |
529 edir_enemies_but.rect.move_ip(MENU_LEFT, y) | |
530 widgets.append(edir_enemies_but) | |
531 y += MENU_BUTTON_HEIGHT + MENU_PAD | |
453 | 532 |
454 save_but = Button('Save Level', action=self.save) | 533 save_but = Button('Save Level', action=self.save) |
455 save_but.rect = BUTTON_RECT.copy() | 534 save_but.rect = BUTTON_RECT.copy() |
456 save_but.rect.move_ip(MENU_LEFT, y) | 535 save_but.rect.move_ip(MENU_LEFT, y) |
457 widgets.append(save_but) | 536 widgets.append(save_but) |