# HG changeset patch # User Neil Muller # Date 1378310699 -7200 # Node ID c8ead015c48e1130e5110c64f29510b6f458e03a # Parent b6db213e53a2c77460db88b762dd7f489c1f84c9 Display list of objects to edit / delete diff -r b6db213e53a2 -r c8ead015c48e tools/area_editor.py --- a/tools/area_editor.py Wed Sep 04 17:25:26 2013 +0200 +++ b/tools/area_editor.py Wed Sep 04 18:04:59 2013 +0200 @@ -24,7 +24,9 @@ from albow.root import RootWidget from albow.widget import Widget from albow.controls import Button, Label, CheckBox -from albow.dialogs import alert +from albow.dialogs import alert, Dialog +from albow.layout import Row +from albow.table_view import TableView, TableColumn from nagslang.options import parse_args from nagslang.constants import SCREEN @@ -169,6 +171,36 @@ return self._surface.copy() +class ObjectTable(TableView): + + columns = [TableColumn("Object", 690, 'l', '%r')] + + def __init__(self, data): + super(ObjectTable, self).__init__(height=450) + self.data = data + self.selected_row = -1 + + def num_rows(self): + return len(self.data) + + def row_data(self, i): + data = self.data[i] + if 'name' in data: + return ('%s (%s)' % (data['classname'], data['name']), ) + return (data['classname'], ) + + def row_is_selected(self, i): + return self.selected_row == i + + def click_row(self, i, ev): + self.selected_row = i + + def get_selection(self): + if self.selected_row >= 0: + return self.data[self.selected_row] + return None + + class LevelWidget(Widget): def __init__(self, level): @@ -332,6 +364,39 @@ else: alert("Failed to close the polygon") + def _make_edit_dialog(self, entries): + # Dialog to hold the editor + edit_box = Dialog() + edit_box.rect = pygame.rect.Rect(0, 0, 700, 500) + table = ObjectTable(entries) + edit_box.add(table) + buttons = [] + for text in ['OK', 'Delete', 'Cancel']: + but = Button(text, action=lambda x=text: edit_box.dismiss(x)) + buttons.append(but) + row = Row(buttons) + row.rect = pygame.rect.Rect(0, 450, 700, 50) + edit_box.add(row) + return edit_box + + def edit_objects(self): + edit_box = self._make_edit_dialog(self.level._game_objects) + res = edit_box.present() + if res == 'OK': + # Edit object stuff goes here + pass + elif res == 'Delete': + pass + + def edit_enemies(self): + edit_box = self._make_edit_dialog(self.level._enemies) + res = edit_box.present() + if res == 'OK': + # Edit object stuff goes here + pass + elif res == 'Delete': + pass + class PolyButton(Button): """Button for coosing the correct polygon""" @@ -451,6 +516,20 @@ # Add poly buttons y = 15 + edit_objs_but = Button('Edit Objects', + action=self.level_widget.edit_objects) + edit_objs_but.rect = BUTTON_RECT.copy() + edit_objs_but.rect.move_ip(MENU_LEFT, y) + widgets.append(edit_objs_but) + y += MENU_BUTTON_HEIGHT + MENU_PAD + + edir_enemies_but = Button('Edit Enemies', + action=self.level_widget.edit_enemies) + edir_enemies_but.rect = BUTTON_RECT.copy() + edir_enemies_but.rect.move_ip(MENU_LEFT, y) + widgets.append(edir_enemies_but) + y += MENU_BUTTON_HEIGHT + MENU_PAD + save_but = Button('Save Level', action=self.save) save_but.rect = BUTTON_RECT.copy() save_but.rect.move_ip(MENU_LEFT, y)