Ticket #4413: 4413_load.patch
File 4413_load.patch, 6.7 KB (added by , 7 years ago) |
---|
-
binaries/data/mods/public/gui/common/functions_utility_loadsave.js
3 3 return b.metadata.time - a.metadata.time; 4 4 } 5 5 6 function generate Label(metadata, engineInfo)6 function generateDateString(metadata, engineInfo) 7 7 { 8 8 let dateTimeString = Engine.FormatMillisecondsIntoDateString(metadata.time*1000, translate("yyyy-MM-dd HH:mm:ss")); 9 9 let dateString = sprintf(translate("\\[%(date)s]"), { "date": dateTimeString }); … … 16 16 dateString = "[color=\"orange\"]" + dateString + "[/color]"; 17 17 } 18 18 19 return dateString; 20 } 21 22 function generateLabel(metadata, engineInfo) 23 { 19 24 return sprintf( 20 25 metadata.description ? 21 26 translate("%(dateString)s %(map)s - %(description)s") : 22 27 translate("%(dateString)s %(map)s"), 23 28 { 24 "dateString": dateString,29 "dateString": generateDateString(metadata, engineInfo), 25 30 "map": metadata.initAttributes.map, 26 31 "description": metadata.description || "" 27 32 } -
binaries/data/mods/public/gui/savedgames/load.js
8 8 function init() 9 9 { 10 10 let gameSelection = Engine.GetGUIObjectByName("gameSelection"); 11 let savedGames = Engine.GetSavedGames() .sort(sortDecreasingDate);11 let savedGames = Engine.GetSavedGames(); 12 12 gameSelection.enabled = !!savedGames.length; 13 13 if (!savedGames.length) 14 14 { 15 gameSelection.list = [translate("No saved games found")];15 Engine.GetGUIObjectByName("gameSelectionFeedback").hidden = false; 16 16 gameSelection.selected = -1; 17 17 return; 18 18 } 19 19 20 g_SavedGamesMetadata = savedGames.map(game => 21 { 22 let metadata = game.metadata; 23 metadata["id"] = game.id; 24 return metadata; 25 }); 26 27 displayList(); 28 29 Engine.GetGUIObjectByName("deleteGameButton").tooltip = deleteTooltip(); 30 } 31 32 function displayList() 33 { 34 let gameSelection = Engine.GetGUIObjectByName("gameSelection"); 35 20 36 // Get current game version and loaded mods 21 37 let engineInfo = Engine.GetEngineInfo(); 22 38 23 g_SavedGamesMetadata = savedGames.map(game => game.metadata); 39 let selectedGameId = gameSelection.list_data[gameSelection.selected]; 40 const sortKey = gameSelection.selected_column; 41 const sortOrder = gameSelection.selected_column_order; 42 g_SavedGamesMetadata = g_SavedGamesMetadata.sort((a, b) => 43 { 44 let cmpA, cmpB; 45 switch (sortKey) 46 { 47 case 'date': 48 cmpA = +a.time; 49 cmpB = +b.time; 50 break; 51 case 'mapName': 52 cmpA = translate(a.initAttributes.settings.Name); 53 cmpB = translate(b.initAttributes.settings.Name); 54 break; 55 case 'mapType': 56 cmpA = translateMapType(a.initAttributes.mapType); 57 cmpB = translateMapType(b.initAttributes.mapType); 58 break; 59 case 'description': 60 cmpA = a.description; 61 cmpB = b.description; 62 break; 63 } 64 65 if (cmpA < cmpB) 66 return -sortOrder; 67 else if (cmpA > cmpB) 68 return +sortOrder; 24 69 25 gameSelection.list = savedGames.map(game => generateLabel(game.metadata, engineInfo)); 26 gameSelection.list_data = savedGames.map(game => game.id); 70 return 0; 71 }); 72 73 let list = g_SavedGamesMetadata.map(metadata => { 74 return { 75 "date": generateDateString(metadata, engineInfo), 76 "mapName": translate(metadata.initAttributes.settings.Name), 77 "mapType": translateMapType(metadata.initAttributes.mapType), 78 "description": metadata.description 79 }; 80 }); 27 81 82 if (list.length) 83 list = prepareForDropdown(list); 84 85 gameSelection.list_date = list.date || []; 86 gameSelection.list_mapName = list.mapName || []; 87 gameSelection.list_mapType = list.mapType || []; 88 gameSelection.list_description = list.description || []; 89 90 // Change these last, otherwise crash 91 gameSelection.list = g_SavedGamesMetadata.map(metadata => generateLabel(metadata, engineInfo)); 92 gameSelection.list_data = g_SavedGamesMetadata.map(metadata => metadata.id); 93 28 94 if (gameSelection.selected == -1) 29 95 gameSelection.selected = 0; 30 else if (gameSelection.selected >= savedGames.length) // happens when deleting the last saved game31 gameSelection.selected = savedGames.length - 1;96 else if (gameSelection.selected >= g_SavedGamesMetadata.length) // happens when deleting the last saved game 97 gameSelection.selected = g_SavedGamesMetadata.length - 1; 32 98 else 33 selectionChanged(); 34 35 Engine.GetGUIObjectByName("deleteGameButton").tooltip = deleteTooltip(); 99 gameSelection.selected = g_SavedGamesMetadata.findIndex(metadata => metadata.id == selectedGameId); 36 100 } 37 101 38 102 function selectionChanged() -
binaries/data/mods/public/gui/savedgames/load.xml
21 21 </object> 22 22 23 23 <object type="image" size="0 20 550 100%"> 24 <object name="gameSelection" style="ModernList" type="list" size="24 12 100%-24 100%-90"> 24 <object name="gameSelection" 25 selected_column="date" 26 selected_column_order="-1" 27 sortable="true" 28 size="24 4 100%-24 100%-90" 29 sprite_asc="ModernArrowDown" 30 sprite_desc="ModernArrowUp" 31 sprite_not_sorted="ModernNotSorted" 32 style="ModernList" 33 type="olist" 34 > 25 35 <action on="SelectionChange">selectionChanged();</action> 36 <action on="SelectionColumnChange">displayList();</action> 37 <action on="mouseleftdoubleclickitem">loadGame();</action> 38 39 <column id="date" color="255 255 255" width="29%"> 40 <translatableAttribute id="heading" context="replay">Date / Time</translatableAttribute> 41 </column> 42 43 <column id="mapType" color="255 255 255" width="17%"> 44 <translatableAttribute id="heading" context="replay">Map Type</translatableAttribute> 45 </column> 46 47 <column id="mapName" color="255 255 255" width="24%"> 48 <translatableAttribute id="heading" context="replay">Map Name</translatableAttribute> 49 </column> 50 51 <column id="description" color="255 255 255" width="30%"> 52 <translatableAttribute id="heading" context="replay">Description</translatableAttribute> 53 </column> 26 54 </object> 27 55 56 <object name="gameSelectionFeedback" size="24 12 100%-24 100" type="text" style="ModernLabelText" hidden="true"> 57 <translatableAttribute id="caption">No saved games found.</translatableAttribute> 58 </object> 59 28 60 <object type="button" size="0%+25 100%-60 33%+10 100%-32" style="StoneButton" hotkey="cancel"> 29 61 <translatableAttribute id="caption">Cancel</translatableAttribute> 30 62 <action on="Press">Engine.PopGuiPage();</action>