# HG changeset patch # User Neil Muller # Date 1378383175 -7200 # Node ID 7bb6296024c40061caff37c0fd8c7737f4a41f71 # Parent 9f68e22c1e58cf04d4305ed8ddcb35016d245de8 Add current mode hints diff -r 9f68e22c1e58 -r 7bb6296024c4 tools/area_editor.py --- a/tools/area_editor.py Thu Sep 05 13:47:22 2013 +0200 +++ b/tools/area_editor.py Thu Sep 05 14:12:55 2013 +0200 @@ -331,7 +331,7 @@ class LevelWidget(Widget): - def __init__(self, level): + def __init__(self, level, parent): super(LevelWidget, self).__init__(pygame.rect.Rect(0, 0, SCREEN[0], SCREEN[1])) self.level = level @@ -345,6 +345,7 @@ self._draw_lines = False self.sel_mode = False self._start_pos = None + self._parent = parent def _level_coordinates(self, pos): # Move positions to level values @@ -401,10 +402,12 @@ self.cur_poly = new_poly self._draw_lines = False if self.cur_poly is not None: + self._parent.reset_lit_buttons() self.filled_mode = False def line_mode(self): self.cur_poly = None + self._parent.reset_lit_buttons() self._draw_lines = True self.filled_mode = False self._start_pos = None @@ -433,6 +436,7 @@ closed, _ = self.level.all_closed() if closed: self.cur_poly = None + self._parent.reset_lit_buttons() self.filled_mode = True self._draw_lines = False else: @@ -634,20 +638,36 @@ new_cls, None) -class PolyButton(Button): +class HighLightButton(Button): + """Button with highlight support""" + def __init__(self, text, parent, **kwds): + super(HighLightButton, self).__init__(text, **kwds) + self._parent = parent + + def highlight(self): + self.border_color = pygame.color.Color('red') + + def reset(self): + self.border_color = self.fg_color + + +class PolyButton(HighLightButton): """Button for coosing the correct polygon""" - def __init__(self, index, level_widget): + def __init__(self, index, level_widget, parent): if index is not None: text = "Draw: %s" % index else: text = 'Exit Draw Mode' - super(PolyButton, self).__init__(text) + super(PolyButton, self).__init__(text, parent) self.index = index self.level_widget = level_widget def action(self): self.level_widget.change_poly(self.index) + self._parent.reset_lit_buttons() + if self.index is not None: + self.highlight() class EditorApp(RootWidget): @@ -655,11 +675,13 @@ def __init__(self, level, surface): super(EditorApp, self).__init__(surface) self.level = level - self.level_widget = LevelWidget(self.level) + self.level_widget = LevelWidget(self.level, self) self.add(self.level_widget) self._dMenus = {} + self._light_buttons = [] + self._make_draw_menu() self._make_objects_menu() @@ -672,7 +694,7 @@ # Add poly buttons y = 15 for poly in range(1, 7): - but = PolyButton(poly, self.level_widget) + but = PolyButton(poly, self.level_widget, self) but.rect = pygame.rect.Rect(0, 0, MENU_WIDTH // 2 - MENU_PAD, MENU_BUTTON_HEIGHT) if poly % 2: @@ -681,18 +703,21 @@ but.rect.move_ip(MENU_LEFT + MENU_WIDTH // 2 - MENU_HALF_PAD, y) y += MENU_BUTTON_HEIGHT + MENU_PAD + self._light_buttons.append(but) widgets.append(but) - end_poly_but = PolyButton(None, self.level_widget) + end_poly_but = PolyButton(None, self.level_widget, self) end_poly_but.rect = BUTTON_RECT.copy() end_poly_but.rect.move_ip(MENU_LEFT, y) widgets.append(end_poly_but) y += MENU_BUTTON_HEIGHT + MENU_PAD - draw_line = Button("Draw interior wall", self.level_widget.line_mode) - draw_line.rect = BUTTON_RECT.copy() - draw_line.rect.move_ip(MENU_LEFT, y) - widgets.append(draw_line) + self.draw_line_but = HighLightButton("Draw interior wall", self, + action=self.set_line_mode) + self.draw_line_but.rect = BUTTON_RECT.copy() + self.draw_line_but.rect.move_ip(MENU_LEFT, y) + widgets.append(self.draw_line_but) + self._light_buttons.append(self.draw_line_but) y += MENU_BUTTON_HEIGHT + MENU_PAD fill_but = Button('Fill exterior', action=self.level_widget.set_filled) @@ -790,11 +815,12 @@ y += MENU_BUTTON_HEIGHT + MENU_PAD y += MENU_PAD - sel_mode_but = Button('Select Object', - action=self.sel_mode) - sel_mode_but.rect = BUTTON_RECT.copy() - sel_mode_but.rect.move_ip(MENU_LEFT, y) - widgets.append(sel_mode_but) + self.sel_mode_but = HighLightButton('Select Object', self, + action=self.sel_mode) + self.sel_mode_but.rect = BUTTON_RECT.copy() + self.sel_mode_but.rect.move_ip(MENU_LEFT, y) + widgets.append(self.sel_mode_but) + self._light_buttons.append(self.sel_mode_but) y += MENU_BUTTON_HEIGHT + MENU_PAD y += MENU_PAD @@ -852,6 +878,10 @@ for widget in self._dMenus[self._menu_mode]: self.remove(widget) + def reset_lit_buttons(self): + for but in self._light_buttons: + but.reset() + def _populate_menu(self): self.level_widget.change_poly(None) self.level_widget.sel_mode = False @@ -859,8 +889,16 @@ self.add(widget) self.invalidate() + def set_line_mode(self): + self.level_widget.line_mode() + self.draw_line_but.highlight() + def sel_mode(self): self.level_widget.sel_mode = not self.level_widget.sel_mode + if self.level_widget.sel_mode: + self.sel_mode_but.highlight() + else: + self.sel_mode_but.reset() def mouse_move(self, ev): self.level_widget.mouse_move(ev)