changeset 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 b6db213e53a2
children e89a43d208b9
files tools/area_editor.py
diffstat 1 files changed, 80 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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)