Changeset 225:c8ead015c48e


Ignore:
Timestamp:
Sep 4, 2013, 4:04:59 PM (7 years ago)
Author:
Neil Muller <drnlmuller@…>
Branch:
default
rebase_source:
894e20aac249dd9a224cd6f9b0f0e24fe937c8fe
Message:

Display list of objects to edit / delete

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/area_editor.py

    r223 r225  
    2525from albow.widget import Widget
    2626from albow.controls import Button, Label, CheckBox
    27 from albow.dialogs import alert
     27from albow.dialogs import alert, Dialog
     28from albow.layout import Row
     29from albow.table_view import TableView, TableColumn
    2830
    2931from nagslang.options import parse_args
     
    170172
    171173
     174class 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
    172204class LevelWidget(Widget):
    173205
     
    333365            alert("Failed to close the polygon")
    334366
     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
    335400
    336401class PolyButton(Button):
     
    451516        # Add poly buttons
    452517        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
    453532
    454533        save_but = Button('Save Level', action=self.save)
Note: See TracChangeset for help on using the changeset viewer.