diff pyntnclick/widgets/base.py @ 813:3a875256f795 pyntnclick

better visible handling
author Neil Muller <neil@dip.sun.ac.za>
date Sun, 27 Jan 2013 17:33:04 +0200
parents bcc9277a23e6
children 9f542ef6e498
line wrap: on
line diff
--- a/pyntnclick/widgets/base.py	Sun Jan 27 16:50:04 2013 +0200
+++ b/pyntnclick/widgets/base.py	Sun Jan 27 17:33:04 2013 +0200
@@ -21,6 +21,7 @@
         self.modal = False
         self.parent = None
         self.disabled = False
+        self.visible = True
         self.callbacks = collections.defaultdict(list)
         # To track which widget the mouse is over
         self.mouseover_widget = self
@@ -34,7 +35,7 @@
 
     def event(self, ev):
         "Don't override this without damn good reason"
-        if self.disabled:
+        if self.disabled or not self.visible:
             return True
 
         type_ = ev.type
@@ -75,6 +76,12 @@
             self.prepare()
             self.is_prepared = True
 
+    def set_visible(self, visible):
+        if self.visible != visible:
+            self.visible = visible
+            self.prepare()
+            self.is_prepared = True
+
     def global_to_local(self, pos):
         x, y = pos
         return (x - self.rect.left, y - self.rect.top)
@@ -145,9 +152,10 @@
             self.remove(widget)
 
     def draw(self, surface):
-        self.do_prepare()
-        for child in self.children:
-            child.draw(surface)
+        if self.visible:
+            self.do_prepare()
+            for child in self.children:
+                child.draw(surface)
 
 
 class ModalStackContainer(Container):
@@ -181,12 +189,13 @@
         return self.top is widget
 
     def draw(self, surface):
-        self.do_prepare()
-        obscure = pygame.Surface(self.rect.size, SRCALPHA)
-        obscure.fill(self.obscure_color)
-        for child in self.children:
-            surface.blit(obscure, self.rect)
-            child.draw(surface)
+        if self.visible:
+            self.do_prepare()
+            obscure = pygame.Surface(self.rect.size, SRCALPHA)
+            obscure.fill(self.obscure_color)
+            for child in self.children:
+                surface.blit(obscure, self.rect)
+                child.draw(surface)
 
 
 class Box(Container):
@@ -194,18 +203,19 @@
     padding = 4
 
     def draw(self, surface):
-        self.do_prepare()
-        # TODO: Why isn't this done in prepare?
-        expandrect = self.rect.move((-self.padding, -self.padding))
-        expandrect.width = self.rect.width + 2 * self.padding
-        expandrect.height = self.rect.height + 2 * self.padding
-        border = pygame.Surface(expandrect.size, SRCALPHA)
-        border.fill(pygame.Color('black'))
-        surface.blit(border, expandrect)
-        background = pygame.Surface(self.rect.size, SRCALPHA)
-        background.fill(pygame.Color('gray'))
-        surface.blit(background, self.rect)
-        super(Box, self).draw(surface)
+        if self.visible:
+            self.do_prepare()
+            # TODO: Why isn't this done in prepare?
+            expandrect = self.rect.move((-self.padding, -self.padding))
+            expandrect.width = self.rect.width + 2 * self.padding
+            expandrect.height = self.rect.height + 2 * self.padding
+            border = pygame.Surface(expandrect.size, SRCALPHA)
+            border.fill(pygame.Color('black'))
+            surface.blit(border, expandrect)
+            background = pygame.Surface(self.rect.size, SRCALPHA)
+            background.fill(pygame.Color('gray'))
+            surface.blit(background, self.rect)
+            super(Box, self).draw(surface)
 
 
 def convert_color(color):