Ticket #3742: restore_selection_v2.patch
File restore_selection_v2.patch, 12.3 KB (added by , 8 years ago) |
---|
-
binaries/data/mods/public/gui/replaymenu/replay_actions.js
1 1 /** 2 * Creates the data for restoring selection, order and filters when returning to the replay menu 3 */ 4 function createReplayMenuData(selectedDirectory) 5 { 6 return { 7 "selectedDirectory": selectedDirectory, 8 "selectedColumn": Engine.GetGUIObjectByName("replaySelection").selected_column, 9 "selectedColumnOrder": Engine.GetGUIObjectByName("replaySelection").selected_column_order, 10 "selectedFilters": { 11 "date": Engine.GetGUIObjectByName("dateTimeFilter").list_data[Engine.GetGUIObjectByName("dateTimeFilter").selected], 12 "playernames": Engine.GetGUIObjectByName("playersFilter").caption, 13 "mapName": Engine.GetGUIObjectByName("mapNameFilter").list_data[Engine.GetGUIObjectByName("mapNameFilter").selected], 14 "mapSize": Engine.GetGUIObjectByName("mapSizeFilter").list_data[Engine.GetGUIObjectByName("mapSizeFilter").selected], 15 "popCap": Engine.GetGUIObjectByName("populationFilter").list_data[Engine.GetGUIObjectByName("populationFilter").selected], 16 "duration": Engine.GetGUIObjectByName("durationFilter").list_data[Engine.GetGUIObjectByName("durationFilter").selected] 17 } 18 } 19 } 20 /** 2 21 * Starts the selected visual replay, or shows an error message in case of incompatibility. 3 22 */ 4 23 function startReplay() … … 25 44 Engine.StartVisualReplay(replayDirectory); 26 45 Engine.SwitchGuiPage("page_loading.xml", { 27 46 "attribs": Engine.GetReplayAttributes(replayDirectory), 28 "isNetworked" 47 "isNetworked": false, 29 48 "playerAssignments": { 30 49 "local":{ 31 50 "name": translate("You"), … … 33 52 } 34 53 }, 35 54 "savedGUIData": "", 36 "isReplay" : true 55 "isReplay": true, 56 "replayMenuData": createReplayMenuData(replayDirectory) 37 57 }); 38 58 } 39 59 … … 79 99 // Open summary screen 80 100 summary.isReplay = true; 81 101 summary.gameResult = translate("Scores at the end of the game."); 82 summary.replay Directory = g_ReplaysFiltered[selected].directory;102 summary.replayMenuData = createReplayMenuData(g_ReplaysFiltered[selected].directory); 83 103 Engine.SwitchGuiPage("page_summary.xml", summary); 84 104 } 85 105 -
binaries/data/mods/public/gui/replaymenu/replay_filters.js
21 21 * Reloads the selectable values in the filters. The filters depend on g_Settings and g_Replays 22 22 * (including its derivatives g_MapSizes, g_MapNames). 23 23 */ 24 function initFilters( )24 function initFilters(data) 25 25 { 26 initDateFilter( );27 initMapNameFilter( );28 initMapSizeFilter( );29 initPopCapFilter( );30 initDurationFilter( );26 initDateFilter(data); 27 initMapNameFilter(data); 28 initMapSizeFilter(data); 29 initPopCapFilter(data); 30 initDurationFilter(data); 31 31 } 32 32 33 33 /** 34 34 * Allow to filter by month. Uses g_Replays. 35 35 */ 36 function initDateFilter( )36 function initDateFilter(data) 37 37 { 38 38 var months = g_Replays.map(replay => getReplayMonth(replay)); 39 39 months = months.filter((month, index) => months.indexOf(month) == index).sort(); 40 months.unshift(translateWithContext("datetime", "Any"));41 40 42 41 var dateTimeFilter = Engine.GetGUIObjectByName("dateTimeFilter"); 43 dateTimeFilter.list = months;44 dateTimeFilter.list_data = months;42 dateTimeFilter.list = [translateWithContext("datetime", "Any")].concat(months); 43 dateTimeFilter.list_data = [""].concat(months); 45 44 45 if(data && data.replayMenuData) 46 dateTimeFilter.selected = dateTimeFilter.list_data.indexOf(data.replayMenuData.selectedFilters.date); 47 46 48 if (dateTimeFilter.selected == -1 || dateTimeFilter.selected >= dateTimeFilter.list.length) 47 49 dateTimeFilter.selected = 0; 48 50 } … … 50 52 /** 51 53 * Allow to filter by mapsize. Uses g_MapSizes. 52 54 */ 53 function initMapSizeFilter( )55 function initMapSizeFilter(data) 54 56 { 55 57 var mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter"); 56 58 mapSizeFilter.list = [translateWithContext("map size", "Any")].concat(g_MapSizes.Name); 57 59 mapSizeFilter.list_data = [-1].concat(g_MapSizes.Tiles); 58 60 61 if(data && data.replayMenuData) 62 mapSizeFilter.selected = mapSizeFilter.list_data.indexOf(data.replayMenuData.selectedFilters.mapSize); 63 59 64 if (mapSizeFilter.selected == -1 || mapSizeFilter.selected >= mapSizeFilter.list.length) 60 65 mapSizeFilter.selected = 0; 61 66 } … … 63 68 /** 64 69 * Allow to filter by mapname. Uses g_MapNames. 65 70 */ 66 function initMapNameFilter( )71 function initMapNameFilter(data) 67 72 { 68 73 var mapNameFilter = Engine.GetGUIObjectByName("mapNameFilter"); 69 mapNameFilter.list = [translateWithContext("map name", "Any")].concat(g_MapNames );70 mapNameFilter.list_data = [""].concat(g_MapNames .map(mapName => translate(mapName)));74 mapNameFilter.list = [translateWithContext("map name", "Any")].concat(g_MapNames.map(mapName => translate(mapName))); 75 mapNameFilter.list_data = [""].concat(g_MapNames); 71 76 77 if(data && data.replayMenuData) 78 mapNameFilter.selected = mapNameFilter.list_data.indexOf(data.replayMenuData.selectedFilters.mapName); 79 72 80 if (mapNameFilter.selected == -1 || mapNameFilter.selected >= mapNameFilter.list.length) 73 81 mapNameFilter.selected = 0; 74 82 } … … 76 84 /** 77 85 * Allow to filter by population capacity. 78 86 */ 79 function initPopCapFilter( )87 function initPopCapFilter(data) 80 88 { 81 89 var populationFilter = Engine.GetGUIObjectByName("populationFilter"); 82 90 populationFilter.list = [translateWithContext("population capacity", "Any")].concat(g_PopulationCapacities.Title); 83 91 populationFilter.list_data = [""].concat(g_PopulationCapacities.Population); 84 92 93 if(data && data.replayMenuData) 94 populationFilter.selected = populationFilter.list_data.indexOf(data.replayMenuData.selectedFilters.popCap); 95 85 96 if (populationFilter.selected == -1 || populationFilter.selected >= populationFilter.list.length) 86 97 populationFilter.selected = 0; 87 98 } … … 89 100 /** 90 101 * Allow to filter by game duration. Uses g_DurationFilterIntervals. 91 102 */ 92 function initDurationFilter( )103 function initDurationFilter(data) 93 104 { 94 105 var durationFilter = Engine.GetGUIObjectByName("durationFilter"); 95 106 durationFilter.list = g_DurationFilterIntervals.map((interval, index) => { … … 110 121 }); 111 122 durationFilter.list_data = g_DurationFilterIntervals.map((interval, index) => index); 112 123 124 if(data && data.replayMenuData) 125 durationFilter.selected = durationFilter.list_data.indexOf(data.replayMenuData.selectedFilters.duration); 126 113 127 if (durationFilter.selected == -1 || durationFilter.selected >= g_DurationFilterIntervals.length) 114 128 durationFilter.selected = 0; 115 129 } -
binaries/data/mods/public/gui/replaymenu/replay_menu.js
36 36 /** 37 37 * Directory name of the currently selected replay. Used to restore the selection after changing filters. 38 38 */ 39 var g_ selectedReplayDirectory = "";39 var g_SelectedReplayDirectory = ""; 40 40 41 41 /** 42 42 * Initializes globals, loads replays and displays the list. 43 43 */ 44 function init( )44 function init(data) 45 45 { 46 if (data && data.replayMenuData) 47 { 48 g_SelectedReplayDirectory = data.replayMenuData.selectedDirectory; 49 Engine.GetGUIObjectByName("playersFilter").caption = data.replayMenuData.selectedFilters.playernames; 50 Engine.GetGUIObjectByName("replaySelection").selected_column = data.replayMenuData.selectedColumn; 51 Engine.GetGUIObjectByName("replaySelection").selected_column_order = data.replayMenuData.selectedColumnOrder; 52 } 53 46 54 if (!g_Settings) 47 55 { 48 56 Engine.SwitchGuiPage("page_pregame.xml"); … … 49 57 return; 50 58 } 51 59 52 loadReplays( );60 loadReplays(data); 53 61 54 62 if (!g_Replays) 55 63 { … … 64 72 * Store the list of replays loaded in C++ in g_Replays. 65 73 * Check timestamp and compatibility and extract g_Playernames, g_MapNames 66 74 */ 67 function loadReplays( )75 function loadReplays(data) 68 76 { 69 77 g_Replays = Engine.GetReplays(); 70 78 … … 105 113 g_MapNames.sort(); 106 114 107 115 // Reload filters (since they depend on g_Replays and its derivatives) 108 initFilters( );116 initFilters(data); 109 117 } 110 118 111 119 /** … … 152 160 // Remember previously selected replay 153 161 var replaySelection = Engine.GetGUIObjectByName("replaySelection"); 154 162 if (replaySelection.selected != -1) 155 g_ selectedReplayDirectory = g_ReplaysFiltered[replaySelection.selected].directory;163 g_SelectedReplayDirectory = g_ReplaysFiltered[replaySelection.selected].directory; 156 164 157 165 filterReplays(); 158 166 … … 188 196 replaySelection.list_data = list.directories || []; 189 197 190 198 // Restore selection 191 replaySelection.selected = replaySelection.list.findIndex(directory => directory == g_ selectedReplayDirectory);199 replaySelection.selected = replaySelection.list.findIndex(directory => directory == g_SelectedReplayDirectory); 192 200 193 201 displayReplayDetails(); 194 202 } -
binaries/data/mods/public/gui/session/session.js
61 61 62 62 /** 63 63 * Not constant as we add "gaia". 64 * */64 */ 65 65 var g_CivData = {}; 66 66 67 /** 68 * For restoring selection, order and filters when returning to the replay menu 69 */ 70 var g_ReplayMenuData; 71 67 72 var g_PlayerAssignments = { "local": { "name": translate("You"), "player": 1 } }; 68 73 69 74 /** … … 213 218 g_PlayerAssignments = initData.playerAssignments; 214 219 g_MatchID = initData.attribs.matchID; 215 220 221 g_ReplayMenuData = initData.replayMenuData; 222 216 223 // Cache the player data 217 224 // (This may be updated at runtime by handleNetMessage) 218 225 g_Players = getPlayerData(g_PlayerAssignments); … … 473 480 Engine.SaveReplayMetadata(JSON.stringify(summary)); 474 481 475 482 summary.replayDirectory = Engine.GetCurrentReplayDirectory(); 483 summary.replayMenuData = g_ReplayMenuData; 476 484 477 485 Engine.EndGame(); 478 486 -
binaries/data/mods/public/gui/summary/summary.js
134 134 if (Engine.HasXmppClient()) 135 135 Engine.StopXmppClient(); 136 136 137 Engine.StartVisualReplay(g_GameData.replay Directory);137 Engine.StartVisualReplay(g_GameData.replayMenuData.selectedDirectory); 138 138 Engine.SwitchGuiPage("page_loading.xml", { 139 "attribs": Engine.GetReplayAttributes(g_GameData.replay Directory),140 "isNetworked" 139 "attribs": Engine.GetReplayAttributes(g_GameData.replayMenuData.selectedDirectory), 140 "isNetworked": false, 141 141 "playerAssignments": { 142 "local" 142 "local": { 143 143 "name": translate("You"), 144 144 "player": -1 145 145 } 146 146 }, 147 147 "savedGUIData": "", 148 "isReplay" : true 148 "isReplay": true, 149 "replayMenuData": g_GameData.replayMenuData 149 150 }); 150 151 } 151 152 … … 159 160 Engine.GetGUIObjectByName("timeElapsed").caption = sprintf(translate("Game time elapsed: %(time)s"), { "time": timeToString(data.timeElapsed) }); 160 161 Engine.GetGUIObjectByName("summaryText").caption = data.gameResult; 161 162 Engine.GetGUIObjectByName("mapName").caption = sprintf(translate("%(mapName)s - %(mapType)s"), { "mapName": translate(data.mapSettings.Name), "mapType": mapSize ? mapSize.LongName : (mapType ? mapType.Title : "") }); 162 Engine.GetGUIObjectByName("replayButton").hidden = g_GameData.isInGame || !g_GameData.replay Directory;163 Engine.GetGUIObjectByName("replayButton").hidden = g_GameData.isInGame || !g_GameData.replayMenuData.selectedDirectory; 163 164 164 165 // Panels 165 166 g_PlayerCount = data.playerStates.length - 1; -
binaries/data/mods/public/gui/summary/summary.xml
187 187 } 188 188 else if (g_GameData.isReplay) 189 189 { 190 Engine.SwitchGuiPage("page_replaymenu.xml" );190 Engine.SwitchGuiPage("page_replaymenu.xml", { "replayMenuData": g_GameData.replayMenuData }); 191 191 } 192 192 else if (!Engine.HasXmppClient()) 193 193 {