comparison pyntnclick/widgets/base.py @ 694:58d78038a197 pyntnclick

Better modal wrapping.
author Jeremy Thurgood <firxen@gmail.com>
date Tue, 14 Feb 2012 15:46:20 +0200
parents c8b683dd56d3
children e9265818a96c
comparison
equal deleted inserted replaced
693:c8b683dd56d3 694:58d78038a197
22 self.disabled = False 22 self.disabled = False
23 self.callbacks = collections.defaultdict(list) 23 self.callbacks = collections.defaultdict(list)
24 # To track which widget the mouse is over 24 # To track which widget the mouse is over
25 self.mouseover_widget = self 25 self.mouseover_widget = self
26 26
27 def set_parent(self, parent):
28 self.parent = parent
29
27 def add_callback(self, eventtype, callback, *args): 30 def add_callback(self, eventtype, callback, *args):
28 self.callbacks[eventtype].append((callback, args)) 31 self.callbacks[eventtype].append((callback, args))
29 32
30 def event(self, ev): 33 def event(self, ev):
31 "Don't override this without damn good reason" 34 "Don't override this without damn good reason"
115 return True 118 return True
116 if super(Container, self).event(ev): 119 if super(Container, self).event(ev):
117 return True 120 return True
118 121
119 def add(self, widget): 122 def add(self, widget):
120 widget.parent = self 123 widget.set_parent(self)
121 self.children.append(widget) 124 self.children.append(widget)
122 self.rect = self.rect.union(widget.rect) 125 self.rect = self.rect.union(widget.rect)
123 return widget 126 return widget
124 127
125 def remove(self, widget): 128 def remove(self, widget):
126 widget.parent = None 129 widget.set_parent(None)
127 self.children.remove(widget) 130 self.children.remove(widget)
128 131
129 def remove_all(self): 132 def remove_all(self):
130 for widget in reversed(self.children[:]): 133 for widget in reversed(self.children[:]):
131 self.remove(widget) 134 self.remove(widget)
219 222
220 def __init__(self, widget, close_callback=None): 223 def __init__(self, widget, close_callback=None):
221 super(ModalWrapper, self).__init__(widget.rect, widget.gd) 224 super(ModalWrapper, self).__init__(widget.rect, widget.gd)
222 self.close_callback = close_callback 225 self.close_callback = close_callback
223 self.add(widget) 226 self.add(widget)
227 self.add_callback(MOUSEBUTTONDOWN, self.close)
224 widget.add_callback(MOUSEBUTTONDOWN, self.close) 228 widget.add_callback(MOUSEBUTTONDOWN, self.close)
229
230 def set_parent(self, parent):
231 super(ModalWrapper, self).set_parent(parent)
232 if parent:
233 self.rect = self.parent.rect
225 234
226 def close(self, ev, widget): 235 def close(self, ev, widget):
227 if self.parent: 236 if self.parent:
228 self.parent.remove(self) 237 self.parent.remove(self)
229 if self.close_callback: 238 if self.close_callback: