Load and save dialog cleanup.
[0ad.git] / binaries / data / mods / public / gui / savedgames / save.js
blob5a5495f7df59eaca2790ed7068f6f284b605c719
1 var g_Descriptions;
2 var g_SavedGameData;
4 function selectDescription()
6 let gameSelection = Engine.GetGUIObjectByName("gameSelection");
7 let gameID = gameSelection.list_data[gameSelection.selected];
8 Engine.GetGUIObjectByName("deleteGameButton").enabled = !!gameID;
10 if (!gameID)
11 return;
13 Engine.GetGUIObjectByName("saveGameDesc").caption = g_Descriptions[gameID];
16 function init(data)
18 g_SavedGameData = data && data.savedGameData || {};
19 let simulationState = Engine.GuiInterfaceCall("GetSimulationState");
20 g_SavedGameData.timeElapsed = simulationState.timeElapsed;
21 g_SavedGameData.states = simulationState.players.map(pState => pState.state);
23 let gameSelection = Engine.GetGUIObjectByName("gameSelection");
25 let savedGames = Engine.GetSavedGames().sort(sortDecreasingDate);
26 if (!savedGames.length)
28 gameSelection.list = [translate("No saved games found")];
29 gameSelection.selected = -1;
30 return;
33 g_Descriptions = {};
34 for (let game of savedGames)
35 g_Descriptions[game.id] = game.metadata.description || "";
37 gameSelection.list = savedGames.map(game => generateLabel(game.metadata));
38 gameSelection.list_data = savedGames.map(game => game.id);
39 gameSelection.selected = -1;
41 Engine.GetGUIObjectByName("deleteGameButton").tooltip = deleteTooltip();
44 function saveGame()
46 let gameSelection = Engine.GetGUIObjectByName("gameSelection");
47 let gameLabel = gameSelection.list[gameSelection.selected];
48 let gameID = gameSelection.list_data[gameSelection.selected];
49 let desc = Engine.GetGUIObjectByName("saveGameDesc").caption;
50 let name = gameID || "savegame";
52 if (!gameID)
54 reallySaveGame(name, desc, true);
55 return;
58 messageBox(
59 500, 200,
60 sprintf(translate("\"%(label)s\""), { "label": gameLabel }) + "\n" +
61 translate("Saved game will be permanently overwritten, are you sure?"),
62 translate("OVERWRITE SAVE"),
63 [translate("No"), translate("Yes")],
64 [null, function(){ reallySaveGame(name, desc, false); }]
68 function reallySaveGame(name, desc, nameIsPrefix)
70 if (nameIsPrefix)
71 Engine.SaveGamePrefix(name, desc, g_SavedGameData);
72 else
73 Engine.SaveGame(name, desc, g_SavedGameData);
75 closeSave();
78 function closeSave()
80 Engine.PopGuiPageCB(0);
83 // HACK: Engine.SaveGame* expects this function to be defined on the current page.
84 // That's why we have to pass the data to this page even if we don't need it.
85 function getSavedGameData()
87 return g_SavedGameData;