Mercurial > rinkhals
changeset 571:2921169e545b
Don't rely on connect listener call order (PGU stores listeners in a dict).
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 28 Nov 2009 20:21:27 +0000 |
parents | be47830a56b1 |
children | 40eee9e1246c |
files | gamelib/gameboard.py gamelib/savegame.py |
diffstat | 2 files changed, 12 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/gamelib/gameboard.py Sat Nov 28 20:00:42 2009 +0000 +++ b/gamelib/gameboard.py Sat Nov 28 20:21:27 2009 +0000 @@ -865,16 +865,13 @@ def _do_quit(self): - def check_saved(_widget): - if _widget.value: - # OK to quit, rely on pgu ordering that this happens in - # the right order + def saved(val): + if val: pygame.event.post(constants.GO_GAME_OVER) def sure(val): if val == 2: - savedialog = savegame.SaveDialog(self) - savedialog.connect(gui.CHANGE, check_saved) + savedialog = savegame.SaveDialog(self, saved) savedialog.open() elif val: pygame.event.post(constants.GO_GAME_OVER)
--- a/gamelib/savegame.py Sat Nov 28 20:00:42 2009 +0000 +++ b/gamelib/savegame.py Sat Nov 28 20:21:27 2009 +0000 @@ -217,13 +217,18 @@ class SaveDialog(BaseSaveRestoreDialog): """Save game dialog.""" - def __init__(self, gameboard): + def __init__(self, gameboard, saved_func=None): BaseSaveRestoreDialog.__init__(self, "Save Game ...", "Save", allow_new=True) + if saved_func is None: + self._saved_func = lambda _val: None + else: + self._saved_func = saved_func self.connect(gui.CHANGE, self._save, gameboard) def _save(self, gameboard): filename = self.get_fullpath() if filename is None: + self._saved_func(False) return data = gameboard.save_game() @@ -234,9 +239,11 @@ try: write_savegame(filename, data, snapshot, level_name, timestamp) except Exception, e: + self._saved_func(False) print "Failed to save game: %s" % (e,) - self.value = None + return + self._saved_func(True) class RestoreDialog(BaseSaveRestoreDialog): """Restore game dialog."""