Restore the previously selected item and filters when returning to the replay menu. Patch by Imarok, fixes #3742.
Also few cleanups and translate the mapnames in the correct place. This was SVN commit r18085.
This commit is contained in:
parent
f0263086c4
commit
fca844eef6
@ -1,3 +1,33 @@
|
||||
/**
|
||||
* Creates the data for restoring selection, order and filters when returning to the replay menu.
|
||||
*/
|
||||
function createReplaySelectionData(selectedDirectory)
|
||||
{
|
||||
let replaySelection = Engine.GetGUIObjectByName("replaySelection");
|
||||
let dateTimeFilter = Engine.GetGUIObjectByName("dateTimeFilter");
|
||||
let playersFilter = Engine.GetGUIObjectByName("playersFilter");
|
||||
let mapNameFilter = Engine.GetGUIObjectByName("mapNameFilter");
|
||||
let mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter");
|
||||
let populationFilter = Engine.GetGUIObjectByName("populationFilter");
|
||||
let durationFilter = Engine.GetGUIObjectByName("durationFilter");
|
||||
let compatibilityFilter = Engine.GetGUIObjectByName("compabilityFilter");
|
||||
|
||||
return {
|
||||
"directory": selectedDirectory,
|
||||
"column": replaySelection.selected_column,
|
||||
"columnOrder": replaySelection.selected_column_order,
|
||||
"filters": {
|
||||
"date": dateTimeFilter.list_data[dateTimeFilter.selected],
|
||||
"playernames": playersFilter.caption,
|
||||
"mapName": mapNameFilter.list_data[mapNameFilter.selected],
|
||||
"mapSize": mapSizeFilter.list_data[mapSizeFilter.selected],
|
||||
"popCap": populationFilter.list_data[populationFilter.selected],
|
||||
"duration": durationFilter.list_data[durationFilter.selected],
|
||||
"compatibility": compatibilityFilter.checked
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the selected visual replay, or shows an error message in case of incompatibility.
|
||||
*/
|
||||
@ -25,7 +55,7 @@ function reallyStartVisualReplay(replayDirectory)
|
||||
Engine.StartVisualReplay(replayDirectory);
|
||||
Engine.SwitchGuiPage("page_loading.xml", {
|
||||
"attribs": Engine.GetReplayAttributes(replayDirectory),
|
||||
"isNetworked" : false,
|
||||
"isNetworked": false,
|
||||
"playerAssignments": {
|
||||
"local":{
|
||||
"name": translate("You"),
|
||||
@ -33,7 +63,8 @@ function reallyStartVisualReplay(replayDirectory)
|
||||
}
|
||||
},
|
||||
"savedGUIData": "",
|
||||
"isReplay" : true
|
||||
"isReplay": true,
|
||||
"replaySelectionData": createReplaySelectionData(replayDirectory)
|
||||
});
|
||||
}
|
||||
|
||||
@ -80,6 +111,7 @@ function showReplaySummary()
|
||||
summary.isReplay = true;
|
||||
summary.gameResult = translate("Scores at the end of the game.");
|
||||
summary.replayDirectory = g_ReplaysFiltered[selected].directory;
|
||||
summary.replaySelectionData = createReplaySelectionData(g_ReplaysFiltered[selected].directory);
|
||||
Engine.SwitchGuiPage("page_summary.xml", summary);
|
||||
}
|
||||
|
||||
|
@ -21,27 +21,34 @@ const g_PopulationCapacities = prepareForDropdown(g_Settings && g_Settings.Popul
|
||||
* Reloads the selectable values in the filters. The filters depend on g_Settings and g_Replays
|
||||
* (including its derivatives g_MapSizes, g_MapNames).
|
||||
*/
|
||||
function initFilters()
|
||||
function initFilters(filters)
|
||||
{
|
||||
initDateFilter();
|
||||
initMapNameFilter();
|
||||
initMapSizeFilter();
|
||||
initPopCapFilter();
|
||||
initDurationFilter();
|
||||
Engine.GetGUIObjectByName("compabilityFilter").checked = !filters || filters.compatibility;
|
||||
|
||||
if (filters && filters.playernames)
|
||||
Engine.GetGUIObjectByName("playersFilter").caption = filters.playernames;
|
||||
|
||||
initDateFilter(filters && filters.date);
|
||||
initMapSizeFilter(filters && filters.mapSize);
|
||||
initMapNameFilter(filters && filters.mapName);
|
||||
initPopCapFilter(filters && filters.popCap);
|
||||
initDurationFilter(filters && filters.duration);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow to filter by month. Uses g_Replays.
|
||||
*/
|
||||
function initDateFilter()
|
||||
function initDateFilter(date)
|
||||
{
|
||||
var months = g_Replays.map(replay => getReplayMonth(replay));
|
||||
months = months.filter((month, index) => months.indexOf(month) == index).sort();
|
||||
months.unshift(translateWithContext("datetime", "Any"));
|
||||
|
||||
var dateTimeFilter = Engine.GetGUIObjectByName("dateTimeFilter");
|
||||
dateTimeFilter.list = months;
|
||||
dateTimeFilter.list_data = months;
|
||||
dateTimeFilter.list = [translateWithContext("datetime", "Any")].concat(months);
|
||||
dateTimeFilter.list_data = [""].concat(months);
|
||||
|
||||
if (date)
|
||||
dateTimeFilter.selected = dateTimeFilter.list_data.indexOf(date);
|
||||
|
||||
if (dateTimeFilter.selected == -1 || dateTimeFilter.selected >= dateTimeFilter.list.length)
|
||||
dateTimeFilter.selected = 0;
|
||||
@ -50,12 +57,15 @@ function initDateFilter()
|
||||
/**
|
||||
* Allow to filter by mapsize. Uses g_MapSizes.
|
||||
*/
|
||||
function initMapSizeFilter()
|
||||
function initMapSizeFilter(mapSize)
|
||||
{
|
||||
var mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter");
|
||||
mapSizeFilter.list = [translateWithContext("map size", "Any")].concat(g_MapSizes.Name);
|
||||
mapSizeFilter.list_data = [-1].concat(g_MapSizes.Tiles);
|
||||
|
||||
if (mapSize)
|
||||
mapSizeFilter.selected = mapSizeFilter.list_data.indexOf(mapSize);
|
||||
|
||||
if (mapSizeFilter.selected == -1 || mapSizeFilter.selected >= mapSizeFilter.list.length)
|
||||
mapSizeFilter.selected = 0;
|
||||
}
|
||||
@ -63,11 +73,14 @@ function initMapSizeFilter()
|
||||
/**
|
||||
* Allow to filter by mapname. Uses g_MapNames.
|
||||
*/
|
||||
function initMapNameFilter()
|
||||
function initMapNameFilter(mapName)
|
||||
{
|
||||
var mapNameFilter = Engine.GetGUIObjectByName("mapNameFilter");
|
||||
mapNameFilter.list = [translateWithContext("map name", "Any")].concat(g_MapNames);
|
||||
mapNameFilter.list_data = [""].concat(g_MapNames.map(mapName => translate(mapName)));
|
||||
mapNameFilter.list = [translateWithContext("map name", "Any")].concat(g_MapNames.map(mapName => translate(mapName)));
|
||||
mapNameFilter.list_data = [""].concat(g_MapNames);
|
||||
|
||||
if (mapName)
|
||||
mapNameFilter.selected = mapNameFilter.list_data.indexOf(mapName);
|
||||
|
||||
if (mapNameFilter.selected == -1 || mapNameFilter.selected >= mapNameFilter.list.length)
|
||||
mapNameFilter.selected = 0;
|
||||
@ -76,12 +89,15 @@ function initMapNameFilter()
|
||||
/**
|
||||
* Allow to filter by population capacity.
|
||||
*/
|
||||
function initPopCapFilter()
|
||||
function initPopCapFilter(popCap)
|
||||
{
|
||||
var populationFilter = Engine.GetGUIObjectByName("populationFilter");
|
||||
populationFilter.list = [translateWithContext("population capacity", "Any")].concat(g_PopulationCapacities.Title);
|
||||
populationFilter.list_data = [""].concat(g_PopulationCapacities.Population);
|
||||
|
||||
if (popCap)
|
||||
populationFilter.selected = populationFilter.list_data.indexOf(popCap);
|
||||
|
||||
if (populationFilter.selected == -1 || populationFilter.selected >= populationFilter.list.length)
|
||||
populationFilter.selected = 0;
|
||||
}
|
||||
@ -89,7 +105,7 @@ function initPopCapFilter()
|
||||
/**
|
||||
* Allow to filter by game duration. Uses g_DurationFilterIntervals.
|
||||
*/
|
||||
function initDurationFilter()
|
||||
function initDurationFilter(duration)
|
||||
{
|
||||
var durationFilter = Engine.GetGUIObjectByName("durationFilter");
|
||||
durationFilter.list = g_DurationFilterIntervals.map((interval, index) => {
|
||||
@ -110,6 +126,9 @@ function initDurationFilter()
|
||||
});
|
||||
durationFilter.list_data = g_DurationFilterIntervals.map((interval, index) => index);
|
||||
|
||||
if (duration)
|
||||
durationFilter.selected = durationFilter.list_data.indexOf(duration);
|
||||
|
||||
if (durationFilter.selected == -1 || durationFilter.selected >= g_DurationFilterIntervals.length)
|
||||
durationFilter.selected = 0;
|
||||
}
|
||||
|
@ -36,12 +36,12 @@ var g_MapNames = [];
|
||||
/**
|
||||
* Directory name of the currently selected replay. Used to restore the selection after changing filters.
|
||||
*/
|
||||
var g_selectedReplayDirectory = "";
|
||||
var g_SelectedReplayDirectory = "";
|
||||
|
||||
/**
|
||||
* Initializes globals, loads replays and displays the list.
|
||||
*/
|
||||
function init()
|
||||
function init(data)
|
||||
{
|
||||
if (!g_Settings)
|
||||
{
|
||||
@ -49,7 +49,7 @@ function init()
|
||||
return;
|
||||
}
|
||||
|
||||
loadReplays();
|
||||
loadReplays(data && data.replaySelectionData);
|
||||
|
||||
if (!g_Replays)
|
||||
{
|
||||
@ -62,9 +62,10 @@ function init()
|
||||
|
||||
/**
|
||||
* Store the list of replays loaded in C++ in g_Replays.
|
||||
* Check timestamp and compatibility and extract g_Playernames, g_MapNames
|
||||
* Check timestamp and compatibility and extract g_Playernames, g_MapNames.
|
||||
* Restore selected filters and item.
|
||||
*/
|
||||
function loadReplays()
|
||||
function loadReplays(replaySelectionData)
|
||||
{
|
||||
g_Replays = Engine.GetReplays();
|
||||
|
||||
@ -105,7 +106,20 @@ function loadReplays()
|
||||
g_MapNames.sort();
|
||||
|
||||
// Reload filters (since they depend on g_Replays and its derivatives)
|
||||
initFilters();
|
||||
initFilters(replaySelectionData && replaySelectionData.filters);
|
||||
|
||||
// Restore user selection
|
||||
if (replaySelectionData)
|
||||
{
|
||||
if (replaySelectionData.directory)
|
||||
g_SelectedReplayDirectory = replaySelectionData.directory;
|
||||
|
||||
let replaySelection = Engine.GetGUIObjectByName("replaySelection");
|
||||
if (replaySelectionData.column)
|
||||
replaySelection.selected_column = replaySelectionData.column;
|
||||
if (replaySelectionData.columnOrder)
|
||||
replaySelection.selected_column_order = replaySelectionData.columnOrder;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -152,7 +166,7 @@ function displayReplayList()
|
||||
// Remember previously selected replay
|
||||
var replaySelection = Engine.GetGUIObjectByName("replaySelection");
|
||||
if (replaySelection.selected != -1)
|
||||
g_selectedReplayDirectory = g_ReplaysFiltered[replaySelection.selected].directory;
|
||||
g_SelectedReplayDirectory = g_ReplaysFiltered[replaySelection.selected].directory;
|
||||
|
||||
filterReplays();
|
||||
|
||||
@ -188,7 +202,7 @@ function displayReplayList()
|
||||
replaySelection.list_data = list.directories || [];
|
||||
|
||||
// Restore selection
|
||||
replaySelection.selected = replaySelection.list.findIndex(directory => directory == g_selectedReplayDirectory);
|
||||
replaySelection.selected = replaySelection.list.findIndex(directory => directory == g_SelectedReplayDirectory);
|
||||
|
||||
displayReplayDetails();
|
||||
}
|
||||
|
@ -61,9 +61,14 @@ var lastTickTime = new Date();
|
||||
|
||||
/**
|
||||
* Not constant as we add "gaia".
|
||||
**/
|
||||
*/
|
||||
var g_CivData = {};
|
||||
|
||||
/**
|
||||
* For restoring selection, order and filters when returning to the replay menu
|
||||
*/
|
||||
var g_ReplaySelectionData;
|
||||
|
||||
var g_PlayerAssignments = { "local": { "name": translate("You"), "player": 1 } };
|
||||
|
||||
/**
|
||||
@ -212,6 +217,7 @@ function init(initData, hotloadData)
|
||||
g_IsController = initData.isController;
|
||||
g_PlayerAssignments = initData.playerAssignments;
|
||||
g_MatchID = initData.attribs.matchID;
|
||||
g_ReplaySelectionData = initData.replaySelectionData;
|
||||
|
||||
// Cache the player data
|
||||
// (This may be updated at runtime by handleNetMessage)
|
||||
@ -473,6 +479,7 @@ function leaveGame(willRejoin)
|
||||
Engine.SaveReplayMetadata(JSON.stringify(summary));
|
||||
|
||||
summary.replayDirectory = Engine.GetCurrentReplayDirectory();
|
||||
summary.replaySelectionData = g_ReplaySelectionData;
|
||||
|
||||
Engine.EndGame();
|
||||
|
||||
|
@ -137,15 +137,16 @@ function startReplay()
|
||||
Engine.StartVisualReplay(g_GameData.replayDirectory);
|
||||
Engine.SwitchGuiPage("page_loading.xml", {
|
||||
"attribs": Engine.GetReplayAttributes(g_GameData.replayDirectory),
|
||||
"isNetworked" : false,
|
||||
"isNetworked": false,
|
||||
"playerAssignments": {
|
||||
"local" : {
|
||||
"local": {
|
||||
"name": translate("You"),
|
||||
"player": -1
|
||||
}
|
||||
},
|
||||
"savedGUIData": "",
|
||||
"isReplay" : true
|
||||
"isReplay": true,
|
||||
"replaySelectionData": g_GameData.replaySelectionData
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -187,7 +187,7 @@
|
||||
}
|
||||
else if (g_GameData.isReplay)
|
||||
{
|
||||
Engine.SwitchGuiPage("page_replaymenu.xml");
|
||||
Engine.SwitchGuiPage("page_replaymenu.xml", { "replaySelectionData": g_GameData.replaySelectionData });
|
||||
}
|
||||
else if (!Engine.HasXmppClient())
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user