comparison gamelib/savegame.py @ 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 a8dde729000a
children 95c71a13468c
comparison
equal deleted inserted replaced
570:be47830a56b1 571:2921169e545b
215 return gui.Dialog.event(self, e) 215 return gui.Dialog.event(self, e)
216 216
217 class SaveDialog(BaseSaveRestoreDialog): 217 class SaveDialog(BaseSaveRestoreDialog):
218 """Save game dialog.""" 218 """Save game dialog."""
219 219
220 def __init__(self, gameboard): 220 def __init__(self, gameboard, saved_func=None):
221 BaseSaveRestoreDialog.__init__(self, "Save Game ...", "Save", allow_new=True) 221 BaseSaveRestoreDialog.__init__(self, "Save Game ...", "Save", allow_new=True)
222 if saved_func is None:
223 self._saved_func = lambda _val: None
224 else:
225 self._saved_func = saved_func
222 self.connect(gui.CHANGE, self._save, gameboard) 226 self.connect(gui.CHANGE, self._save, gameboard)
223 227
224 def _save(self, gameboard): 228 def _save(self, gameboard):
225 filename = self.get_fullpath() 229 filename = self.get_fullpath()
226 if filename is None: 230 if filename is None:
231 self._saved_func(False)
227 return 232 return
228 233
229 data = gameboard.save_game() 234 data = gameboard.save_game()
230 snapshot = gameboard.snapshot() 235 snapshot = gameboard.snapshot()
231 level_name = gameboard.level.level_name 236 level_name = gameboard.level.level_name
232 timestamp = datetime.datetime.now() 237 timestamp = datetime.datetime.now()
233 238
234 try: 239 try:
235 write_savegame(filename, data, snapshot, level_name, timestamp) 240 write_savegame(filename, data, snapshot, level_name, timestamp)
236 except Exception, e: 241 except Exception, e:
242 self._saved_func(False)
237 print "Failed to save game: %s" % (e,) 243 print "Failed to save game: %s" % (e,)
238 self.value = None 244 return
239 245
246 self._saved_func(True)
240 247
241 class RestoreDialog(BaseSaveRestoreDialog): 248 class RestoreDialog(BaseSaveRestoreDialog):
242 """Restore game dialog.""" 249 """Restore game dialog."""
243 250
244 def __init__(self, restore_func): 251 def __init__(self, restore_func):