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)