changeset 726:efa58c92b304 pyntnclick

Move prepare out of __init__ and into everywhere else
author Neil Muller <neil@dip.sun.ac.za>
date Tue, 15 Jan 2013 22:44:50 +0200
parents 65e9b5c40233
children 657b4da736bc
files gamelib/custom_widgets.py pyntnclick/gamescreen.py pyntnclick/state.py pyntnclick/widgets/base.py pyntnclick/widgets/listbox.py pyntnclick/widgets/messagebox.py pyntnclick/widgets/text.py pyntnclick/widgets/toollist.py
diffstat 8 files changed, 33 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/custom_widgets.py	Tue Jan 15 21:57:42 2013 +0200
+++ b/gamelib/custom_widgets.py	Tue Jan 15 22:44:50 2013 +0200
@@ -14,7 +14,9 @@
                 bg_color=pygame.Color(255, 175, 127, 191),
                 color=pygame.Color(0, 0, 0),
                 border_color=pygame.Color(127, 15, 0))
+
+    def prepare(self):
         # Centre the widget
-        # Should this happen automatically in state?
-        self.rect.center = (gd.constants.screen[0] / 2,
-                gd.constants.screen[1] / 2)
+        super(JimLabel, self).prepare()
+        self.rect.center = (self.gd.constants.screen[0] / 2,
+                self.gd.constants.screen[1] / 2)
--- a/pyntnclick/gamescreen.py	Tue Jan 15 21:57:42 2013 +0200
+++ b/pyntnclick/gamescreen.py	Tue Jan 15 22:44:50 2013 +0200
@@ -15,7 +15,6 @@
 from pyntnclick.widgets.imagebutton import ImageButtonWidget
 
 
-
 class InventorySlot(ImageButtonWidget):
     SELECTED_COLOR = Color("yellow")
     SELECTED_WIDTH = 2
@@ -148,6 +147,7 @@
         self.is_detail = is_detail
         if is_detail:
             self.close_button = TextButton((0, 0), self.gd, "Close")
+            self.close_button.do_prepare()
             self.close_button.rect.midbottom = self.rect.midbottom
             self.close_button.add_callback('clicked', self.close)
             self.add(self.close_button)
@@ -222,6 +222,7 @@
             rect = Rect(rect, (width, self.rect.height))
         tool = cls(rect, *args, **kw)
         self.add(tool)
+        tool.do_prepare()
         self.left += tool.rect.width
         return tool
 
@@ -339,6 +340,7 @@
         rect = Rect((0, 0), (1, 1))
         max_width = self.gd.constants.screen[0] - 100
         widget = WrappedTextLabel(rect, self.gd, message, max_width=max_width)
+        widget.do_prepare()
         widget.rect.center = self.container.rect.center
         self.queue_widget(widget)
 
--- a/pyntnclick/state.py	Tue Jan 15 21:57:42 2013 +0200
+++ b/pyntnclick/state.py	Tue Jan 15 22:44:50 2013 +0200
@@ -273,6 +273,7 @@
         if text is None:
             return None
         label = LabelWidget((0, 10), self.gd, text)
+        label.do_prepare()
         label.rect.left += (dest_rect.width - label.rect.width) / 2
         return label
 
--- a/pyntnclick/widgets/base.py	Tue Jan 15 21:57:42 2013 +0200
+++ b/pyntnclick/widgets/base.py	Tue Jan 15 22:44:50 2013 +0200
@@ -24,6 +24,7 @@
         self.callbacks = collections.defaultdict(list)
         # To track which widget the mouse is over
         self.mouseover_widget = self
+        self.is_prepared = False
 
     def set_parent(self, parent):
         self.parent = parent
@@ -53,17 +54,26 @@
         "Override me"
         pass
 
+    def prepare(self):
+        """Override me"""
+        pass
+
+    def do_prepare(self):
+        if not self.is_prepared:
+            self.prepare()
+            self.is_prepared = True
+
     def disable(self):
         if not self.disabled:
             self.disabled = True
-            if hasattr(self, 'prepare'):
-                self.prepare()
+            self.prepare()
+            self.is_prepared = True
 
     def enable(self):
         if self.disabled:
             self.disabled = False
-            if hasattr(self, 'prepare'):
-                self.prepare()
+            self.prepare()
+            self.is_prepared = True
 
     def global_to_local(self, pos):
         x, y = pos
@@ -122,6 +132,7 @@
 
     def add(self, widget):
         widget.set_parent(self)
+        widget.prepare()
         self.children.append(widget)
         self.rect = self.rect.union(widget.rect)
         return widget
@@ -135,6 +146,7 @@
             self.remove(widget)
 
     def draw(self, surface):
+        self.do_prepare()
         for child in self.children:
             child.draw(surface)
 
@@ -170,6 +182,7 @@
         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:
@@ -197,6 +210,7 @@
     padding = 4
 
     def draw(self, surface):
+        self.do_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
@@ -252,6 +266,7 @@
         self.visible = True
 
     def draw(self, surface):
+        self.do_prepare()
         if self.visible:
             surface.blit(self.image, self.rect)
 
@@ -269,6 +284,7 @@
         self.trans_image = surf
 
     def draw(self, surface):
+        self.do_prepare()
         if self.visible:
             if self.translucent:
                 surface.blit(self.trans_image, self.rect)
--- a/pyntnclick/widgets/listbox.py	Tue Jan 15 21:57:42 2013 +0200
+++ b/pyntnclick/widgets/listbox.py	Tue Jan 15 22:44:50 2013 +0200
@@ -9,7 +9,6 @@
         super(ListBox, self).__init__(rect, gd)
         self.message = TextWidget(rect, text)
         self.toolbar = ToolListWidget(rect, widget_list, page_length)
-        self.prepare()
         self.modal = True
 
     def prepare(self):
--- a/pyntnclick/widgets/messagebox.py	Tue Jan 15 21:57:42 2013 +0200
+++ b/pyntnclick/widgets/messagebox.py	Tue Jan 15 22:44:50 2013 +0200
@@ -12,7 +12,6 @@
         self.font_size = fontsize
         self.post_callback = post_callback
         self.color = color
-        self.prepare()
         self.modal = True
 
     def prepare(self):
--- a/pyntnclick/widgets/text.py	Tue Jan 15 21:57:42 2013 +0200
+++ b/pyntnclick/widgets/text.py	Tue Jan 15 22:44:50 2013 +0200
@@ -15,7 +15,6 @@
         self.fontname = fontname or constants.font
         self.fontsize = fontsize or constants.font_size
         self.color = color or constants.text_color
-        self.prepare()
 
     def prepare(self):
         self.font = self.resource.get_font(self.fontname, self.fontsize)
@@ -27,6 +26,7 @@
         self.rect.height = max(self.rect.height, height)
 
     def draw(self, surface):
+        self.do_prepare()
         surface.blit(self.surface, self.rect)
 
 
@@ -57,6 +57,7 @@
         self.surface = new_surface
 
     def draw(self, surface):
+        self.do_prepare()
         surface.blit(self.surface, self.rect)
 
 
@@ -108,7 +109,6 @@
         self._wrap_width = None
         self._text_lines = None
         super(WrappedTextLabel, self).__init__(rect, gd, *args, **kwargs)
-        self.prepare()
 
     def prepare(self):
         if self._wrap_width is None:
--- a/pyntnclick/widgets/toollist.py	Tue Jan 15 21:57:42 2013 +0200
+++ b/pyntnclick/widgets/toollist.py	Tue Jan 15 22:44:50 2013 +0200
@@ -15,6 +15,8 @@
         super(ToolListWidget, self).__init__(rect, gd)
         self.prev_but = None
         self.next_but = None
+
+    def prepare(self):
         self.fill_page()
 
     def fill_page(self):