Mercurial > rinkhals
annotate gamelib/savegame.py @ 491:75ef6ea3b7a6
Start of support for save game snapshots.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Wed, 25 Nov 2009 22:12:08 +0000 |
parents | 8897a436a8cb |
children | bf90a2948e34 |
rev | line source |
---|---|
486
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
1 """Utilities and widgets for saving and restoring games.""" |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
2 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
3 import xmlrpclib |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
4 import os |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
5 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
6 from pgu import gui |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
7 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
8 import config |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
9 import version |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
10 |
491
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
11 def open_save_game(fullpath): |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
12 """Open a save game file.""" |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
13 try: |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
14 xml = open(fullpath, "rb").read() |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
15 params, methodname = xmlrpclib.loads(xml) |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
16 if methodname != "foxassault": |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
17 raise SaveGameError("File does not appear to be a " |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
18 "Fox Assault save game.") |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
19 save_version = params[0] |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
20 if save_version != version.SAVE_GAME_VERSION: |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
21 raise SaveGameError("Incompatible save game version.") |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
22 data = params[1] |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
23 except Exception, e: |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
24 raise SaveGameError("Failed to load game: %s" % (e,)) |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
25 |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
26 return data, None |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
27 |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
28 |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
29 class SaveGameError(Exception): |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
30 pass |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
31 |
486
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
32 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
33 class BaseSaveRestoreDialog(gui.Dialog): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
34 """Save game dialog.""" |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
35 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
36 def __init__(self, title_txt, button_txt, allow_new, cls="dialog"): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
37 self.value = None |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
38 self.save_folder = config.config.save_folder |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
39 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
40 self.save_games = {} |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
41 self._populate_save_games() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
42 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
43 if allow_new: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
44 self.name_input = gui.Input() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
45 else: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
46 self.name_input = None |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
47 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
48 td_style = { |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
49 'padding_left': 4, |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
50 'padding_right': 4, |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
51 'padding_top': 2, |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
52 'padding_bottom': 2, |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
53 } |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
54 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
55 self.save_list = gui.List(width=350, height=250) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
56 games = self.save_games.keys() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
57 games.sort() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
58 for name in games: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
59 self.save_list.add(name, value=name) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
60 self.save_list.set_vertical_scroll(0) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
61 self.save_list.connect(gui.CHANGE, self._save_list_change) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
62 |
491
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
63 self.image_container = gui.Container() |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
64 |
486
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
65 button_ok = gui.Button(button_txt) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
66 button_ok.connect(gui.CLICK, self._click_ok) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
67 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
68 button_cancel = gui.Button("Cancel") |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
69 button_cancel.connect(gui.CLICK, self._click_cancel) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
70 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
71 body = gui.Table() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
72 body.tr() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
73 body.td(self.save_list, style=td_style, colspan=2) |
491
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
74 body.td(self.image_container, style=td_style, colspan=2) |
486
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
75 body.tr() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
76 if self.name_input: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
77 body.td(gui.Label("Save as:"), style=td_style, align=1) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
78 body.td(self.name_input, style=td_style) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
79 else: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
80 body.td(gui.Spacer(0, 0), style=td_style, colspan=2) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
81 body.td(button_ok, style=td_style, align=1) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
82 body.td(button_cancel, style=td_style, align=1) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
83 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
84 title = gui.Label(title_txt, cls=cls + ".title.label") |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
85 gui.Dialog.__init__(self, title, body) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
86 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
87 def get_fullpath(self): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
88 """Return the fullpath of the select save game file or None.""" |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
89 if self.value is None: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
90 return None |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
91 return os.path.join(self.save_folder, self.value + ".xml") |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
92 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
93 def _populate_save_games(self): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
94 """Read list of save games.""" |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
95 for filename in os.listdir(self.save_folder): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
96 fullpath = os.path.join(self.save_folder, filename) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
97 root, ext = os.path.splitext(filename) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
98 if not os.path.isfile(fullpath): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
99 continue |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
100 if ext != ".xml": |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
101 continue |
491
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
102 self.save_games[root] = self._create_image_widget(fullpath) |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
103 |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
104 def _create_image_widget(self, fullpath): |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
105 """Create an image showing the contents of a save game file.""" |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
106 try: |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
107 data, screenshot = open_save_game(fullpath) |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
108 except SaveGameError: |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
109 return gui.Label("Bad Save Game") |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
110 |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
111 if screenshot is None: |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
112 return gui.Label("No screenshot") |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
113 |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
114 return gui.Image(screenshot) |
486
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
115 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
116 def _save_list_change(self): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
117 if self.name_input: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
118 self.name_input.value = self.save_list.value |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
119 |
491
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
120 for w in self.image_container.widgets: |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
121 self.image_container.remove(w) |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
122 |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
123 image_widget = self.save_games[self.save_list.value] |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
124 self.image_container.add(image_widget, 0, 0) |
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
125 |
486
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
126 def _click_ok(self): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
127 if self.name_input: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
128 self.value = self.name_input.value |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
129 else: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
130 self.value = self.save_list.value |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
131 if self.value: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
132 self.send(gui.CHANGE) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
133 self.close() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
134 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
135 def _click_cancel(self): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
136 self.value = None |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
137 self.send(gui.CHANGE) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
138 self.close() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
139 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
140 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
141 class SaveDialog(BaseSaveRestoreDialog): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
142 """Save game dialog.""" |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
143 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
144 def __init__(self, gameboard): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
145 BaseSaveRestoreDialog.__init__(self, "Save Game ...", "Save", allow_new=True) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
146 self.connect(gui.CHANGE, self._save, gameboard) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
147 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
148 def _save(self, gameboard): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
149 filename = self.get_fullpath() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
150 if filename is None: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
151 return |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
152 data = gameboard.save_game() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
153 params = (version.SAVE_GAME_VERSION, data) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
154 xml = xmlrpclib.dumps(params, "foxassault") |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
155 try: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
156 open(filename, "wb").write(xml) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
157 except Exception, e: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
158 print "Failed to save game: %s" % (e,) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
159 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
160 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
161 class RestoreDialog(BaseSaveRestoreDialog): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
162 """Restore game dialog.""" |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
163 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
164 def __init__(self, gameboard): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
165 BaseSaveRestoreDialog.__init__(self, "Load Game ...", "Load", allow_new=False) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
166 self.connect(gui.CHANGE, self._restore, gameboard) |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
167 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
168 def _restore(self, gameboard): |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
169 filename = self.get_fullpath() |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
170 if filename is None: |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
171 return |
491
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
172 |
486
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
173 try: |
491
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
174 data, screenshot = open_save_game(filename) |
486
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
175 except Exception, e: |
491
75ef6ea3b7a6
Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents:
486
diff
changeset
|
176 print "Failed to load game: %s" % (e,) |
486
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
177 return |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
178 |
8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
179 gameboard.restore_game(data) |