Mercurial > pyntnclick
diff pyntnclick/gamescreen.py @ 679:fa168b5e2624 pyntnclick
The return of the message dialog (and there was much rejoicing)
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Sun, 12 Feb 2012 23:06:44 +0200 |
parents | 36d7f7e9650e |
children | c9562e24bfed |
line wrap: on
line diff
--- a/pyntnclick/gamescreen.py Sun Feb 12 21:47:06 2012 +0200 +++ b/pyntnclick/gamescreen.py Sun Feb 12 23:06:44 2012 +0200 @@ -11,7 +11,7 @@ from pyntnclick.engine import Screen from pyntnclick.state import handle_result from pyntnclick.widgets.base import Container, ModalStackContainer -from pyntnclick.widgets.text import TextButton, LabelWidget +from pyntnclick.widgets.text import TextButton, ModalWrappedTextLabel from pyntnclick.widgets.imagebutton import ImageButtonWidget # XXX: Need a way to get at the constants. @@ -151,6 +151,7 @@ self.detail = DetailWindow(rect, gd, screen) self.add_callback(MOUSEBUTTONDOWN, self.mouse_down) self.add_callback(MOUSEMOTION, self.mouse_move) + self._message_queue = [] def draw(self, surface): self.game.current_scene.draw(surface, self) @@ -170,6 +171,9 @@ else: self.game.current_scene.draw_description(surface) + def queue_widget(self, widget): + self._message_queue.append(widget) + def mouse_down(self, event, widget): if self.game.current_detail: return self.detail.mouse_down(event, widget) @@ -188,6 +192,11 @@ # of what happens result = self.game.check_enter_leave(self.screen) handle_result(result, self) + if self._message_queue: + # Only add a message if we're at the top + if self.screen.modal_magic.is_top(self.screen.inner_container): + widget = self._message_queue.pop(0) + self.screen.modal_magic.add(widget) if self.game.current_detail: self.game.current_detail.animate() else: @@ -200,10 +209,8 @@ self.game.current_scene.mouse_move(event.pos) self.game.old_pos = event.pos - def show_message(self, message, style=None): + def show_message(self, message): # Display the message as a modal dialog - # self.screen.modal_magic.add(LabelWidget((50, 50), self.gd, message)) - print message # XXX: MessageDialog(self.screen, message, 60, style=style).present() # queue a redraw to show updated state # XXX: self.invalidate() @@ -212,6 +219,13 @@ # self.subwidgets[0]._mouse_move(mouse.get_pos()) # else: # self._mouse_move(mouse.get_pos()) + rect = Rect((0, 0), (1, 1)) + widget = ModalWrappedTextLabel(rect, self.gd, message, + max_width=self.gd.constants.screen[0] - 100) + widget.rect.center = self.rect.center + # We abuse animate so we can queue multiple results + # according + self.queue_widget(widget) def show_detail(self, detail): self.clear_detail() @@ -286,10 +300,9 @@ self.game.highlight_override = False self.game.current_detail.mouse_move(self.global_to_local(pos)) - def show_message(self, message, style=None): - # self.parent.show_message(message, style) + def show_message(self, message): + self.parent.show_message(message) # self.invalidate() - print message class ToolBar(Container):