changeset 280:7bb6296024c4

Add current mode hints
author Neil Muller <drnlmuller@gmail.com>
date Thu, 05 Sep 2013 14:12:55 +0200
parents 9f68e22c1e58
children 9b56e954c674
files tools/area_editor.py
diffstat 1 files changed, 54 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- 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)