Ticket #3742: restore_selection_v2.4.patch

File restore_selection_v2.4.patch, 11.4 KB (added by Imarok, 8 years ago)

more checks for existing properties, use variables for GUI objects, rename replayMenuData to replaySelectionData, remove "selected" from every property, use && and again whitespace

  • binaries/data/mods/public/gui/replaymenu/replay_actions.js

     
    11/**
     2 * Creates the data for restoring selection, order and filters when returning to the replay menu
     3 */
     4function createReplaySelectionData(selectedDirectory)
     5{
     6    let replaySelection = Engine.GetGUIObjectByName("replaySelection");
     7    let dateTimeFilter = Engine.GetGUIObjectByName("dateTimeFilter");
     8    let mapNameFilter = Engine.GetGUIObjectByName("mapNameFilter");
     9    let mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter");
     10    let populationFilter = Engine.GetGUIObjectByName("populationFilter");
     11    let durationFilter = Engine.GetGUIObjectByName("durationFilter");
     12    return {
     13        "directory": selectedDirectory,
     14        "column": replaySelection.selected_column,
     15        "columnOrder": replaySelection.selected_column_order,
     16        "filters": {
     17            "date": dateTimeFilter.list_data[dateTimeFilter.selected],
     18            "playernames": Engine.GetGUIObjectByName("playersFilter").caption,
     19            "mapName": mapNameFilter.list_data[mapNameFilter.selected],
     20            "mapSize": mapSizeFilter.list_data[mapSizeFilter.selected],
     21            "popCap": populationFilter.list_data[populationFilter.selected],
     22            "duration": durationFilter.list_data[durationFilter.selected]
     23        }
     24    }
     25}
     26/**
    227 * Starts the selected visual replay, or shows an error message in case of incompatibility.
    328 */
    429function startReplay()
     
    2550    Engine.StartVisualReplay(replayDirectory);
    2651    Engine.SwitchGuiPage("page_loading.xml", {
    2752        "attribs": Engine.GetReplayAttributes(replayDirectory),
    28         "isNetworked" : false,
     53        "isNetworked": false,
    2954        "playerAssignments": {
    3055            "local":{
    3156                "name": translate("You"),
     
    3358            }
    3459        },
    3560        "savedGUIData": "",
    36         "isReplay" : true
     61        "isReplay": true,
     62        "replaySelectionData": createReplaySelectionData(replayDirectory)
    3763    });
    3864}
    3965
     
    80106    summary.isReplay = true;
    81107    summary.gameResult = translate("Scores at the end of the game.");
    82108    summary.replayDirectory = g_ReplaysFiltered[selected].directory;
     109    summary.replaySelectionData = createReplaySelectionData(g_ReplaysFiltered[selected].directory);
    83110    Engine.SwitchGuiPage("page_summary.xml", summary);
    84111}
    85112
  • binaries/data/mods/public/gui/replaymenu/replay_filters.js

     
    2121 * Reloads the selectable values in the filters. The filters depend on g_Settings and g_Replays
    2222 * (including its derivatives g_MapSizes, g_MapNames).
    2323 */
    24 function initFilters()
     24function initFilters(filters)
    2525{
    26     initDateFilter();
    27     initMapNameFilter();
    28     initMapSizeFilter();
    29     initPopCapFilter();
    30     initDurationFilter();
     26    if (filters && filters.playernames)
     27        Engine.GetGUIObjectByName("playersFilter").caption = filters.playernames;
     28
     29    initDateFilter(filters && filters.date);
     30    initMapSizeFilter(filters && filters.mapSize);
     31    initMapNameFilter(filters && filters.mapName);
     32    initPopCapFilter(filters && filters.popCap);
     33    initDurationFilter(filters && filters.duration);
    3134}
    3235
    3336/**
    3437 * Allow to filter by month. Uses g_Replays.
    3538 */
    36 function initDateFilter()
     39function initDateFilter(date)
    3740{
    3841    var months = g_Replays.map(replay => getReplayMonth(replay));
    3942    months = months.filter((month, index) => months.indexOf(month) == index).sort();
    40     months.unshift(translateWithContext("datetime", "Any"));
    4143
    4244    var dateTimeFilter = Engine.GetGUIObjectByName("dateTimeFilter");
    43     dateTimeFilter.list = months;
    44     dateTimeFilter.list_data = months;
     45    dateTimeFilter.list = [translateWithContext("datetime", "Any")].concat(months);
     46    dateTimeFilter.list_data = [""].concat(months);
    4547
     48    if (date)
     49        dateTimeFilter.selected = dateTimeFilter.list_data.indexOf(date);
     50
    4651    if (dateTimeFilter.selected == -1 || dateTimeFilter.selected >= dateTimeFilter.list.length)
    4752        dateTimeFilter.selected = 0;
    4853}
     
    5055/**
    5156 * Allow to filter by mapsize. Uses g_MapSizes.
    5257 */
    53 function initMapSizeFilter()
     58function initMapSizeFilter(mapSize)
    5459{
    5560    var mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter");
    5661    mapSizeFilter.list = [translateWithContext("map size", "Any")].concat(g_MapSizes.Name);
    5762    mapSizeFilter.list_data = [-1].concat(g_MapSizes.Tiles);
    5863
     64    if (mapSize)
     65        mapSizeFilter.selected = mapSizeFilter.list_data.indexOf(mapSize);
     66
    5967    if (mapSizeFilter.selected == -1 || mapSizeFilter.selected >= mapSizeFilter.list.length)
    6068        mapSizeFilter.selected = 0;
    6169}
     
    6371/**
    6472 * Allow to filter by mapname. Uses g_MapNames.
    6573 */
    66 function initMapNameFilter()
     74function initMapNameFilter(mapName)
    6775{
    6876    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)));
     77    mapNameFilter.list = [translateWithContext("map name", "Any")].concat(g_MapNames.map(mapName => translate(mapName)));
     78    mapNameFilter.list_data = [""].concat(g_MapNames);
    7179
     80    if (mapName)
     81        mapNameFilter.selected = mapNameFilter.list_data.indexOf(mapName);
     82
    7283    if (mapNameFilter.selected == -1 || mapNameFilter.selected >= mapNameFilter.list.length)
    7384        mapNameFilter.selected = 0;
    7485}
     
    7687/**
    7788 * Allow to filter by population capacity.
    7889 */
    79 function initPopCapFilter()
     90function initPopCapFilter(popCap)
    8091{
    8192    var populationFilter = Engine.GetGUIObjectByName("populationFilter");
    8293    populationFilter.list = [translateWithContext("population capacity", "Any")].concat(g_PopulationCapacities.Title);
    8394    populationFilter.list_data = [""].concat(g_PopulationCapacities.Population);
    8495
     96    if (popCap)
     97        populationFilter.selected = populationFilter.list_data.indexOf(popCap);
     98
    8599    if (populationFilter.selected == -1 || populationFilter.selected >= populationFilter.list.length)
    86100        populationFilter.selected = 0;
    87101}
     
    89103/**
    90104 * Allow to filter by game duration. Uses g_DurationFilterIntervals.
    91105 */
    92 function initDurationFilter()
     106function initDurationFilter(duration)
    93107{
    94108    var durationFilter = Engine.GetGUIObjectByName("durationFilter");
    95109    durationFilter.list = g_DurationFilterIntervals.map((interval, index) => {
     
    110124    });
    111125    durationFilter.list_data = g_DurationFilterIntervals.map((interval, index) => index);
    112126
     127    if (duration)
     128        durationFilter.selected = durationFilter.list_data.indexOf(duration);
     129
    113130    if (durationFilter.selected == -1 || durationFilter.selected >= g_DurationFilterIntervals.length)
    114131        durationFilter.selected = 0;
    115132}
  • binaries/data/mods/public/gui/replaymenu/replay_menu.js

     
    3636/**
    3737 * Directory name of the currently selected replay. Used to restore the selection after changing filters.
    3838 */
    39 var g_selectedReplayDirectory = "";
     39var g_SelectedReplayDirectory = "";
    4040
    4141/**
    4242 * Initializes globals, loads replays and displays the list.
    4343 */
    44 function init()
     44function init(data)
    4545{
    4646    if (!g_Settings)
    4747    {
     
    4949        return;
    5050    }
    5151
    52     loadReplays();
     52    loadReplays(data && data.replaySelectionData);
    5353
    5454    if (!g_Replays)
    5555    {
     
    6464 * Store the list of replays loaded in C++ in g_Replays.
    6565 * Check timestamp and compatibility and extract g_Playernames, g_MapNames
    6666 */
    67 function loadReplays()
     67function loadReplays(replaySelectionData)
    6868{
    6969    g_Replays = Engine.GetReplays();
    7070
     
    105105    g_MapNames.sort();
    106106
    107107    // Reload filters (since they depend on g_Replays and its derivatives)
    108     initFilters();
     108    initFilters(replaySelectionData && replaySelectionData.filters);
     109
     110    if (replaySelectionData)
     111    {
     112        if(replaySelectionData.directory)
     113            g_SelectedReplayDirectory = replaySelectionData.directory;
     114
     115        let replaySelection = Engine.GetGUIObjectByName("replaySelection");
     116        if (replaySelectionData.column)
     117            replaySelection.selected_column = replaySelectionData.column;
     118        if (replaySelectionData.columnOrder)
     119            replaySelection.selected_column_order = replaySelectionData.columnOrder;
     120    }
    109121}
    110122
    111123/**
     
    152164    // Remember previously selected replay
    153165    var replaySelection = Engine.GetGUIObjectByName("replaySelection");
    154166    if (replaySelection.selected != -1)
    155         g_selectedReplayDirectory = g_ReplaysFiltered[replaySelection.selected].directory;
     167        g_SelectedReplayDirectory = g_ReplaysFiltered[replaySelection.selected].directory;
    156168
    157169    filterReplays();
    158170
     
    188200    replaySelection.list_data = list.directories || [];
    189201
    190202    // Restore selection
    191     replaySelection.selected = replaySelection.list.findIndex(directory => directory == g_selectedReplayDirectory);
     203    replaySelection.selected = replaySelection.list.findIndex(directory => directory == g_SelectedReplayDirectory);
    192204
    193205    displayReplayDetails();
    194206}
  • binaries/data/mods/public/gui/session/session.js

     
    6161
    6262/**
    6363 * Not constant as we add "gaia".
    64  **/
     64 */
    6565var g_CivData = {};
    6666
     67/**
     68 * For restoring selection, order and filters when returning to the replay menu
     69 */
     70var g_ReplaySelectionData;
     71
    6772var g_PlayerAssignments = { "local": { "name": translate("You"), "player": 1 } };
    6873
    6974/**
     
    213218        g_PlayerAssignments = initData.playerAssignments;
    214219        g_MatchID = initData.attribs.matchID;
    215220
     221        g_ReplaySelectionData = initData.replaySelectionData;
     222
    216223        // Cache the player data
    217224        // (This may be updated at runtime by handleNetMessage)
    218225        g_Players = getPlayerData(g_PlayerAssignments);
     
    473480        Engine.SaveReplayMetadata(JSON.stringify(summary));
    474481
    475482    summary.replayDirectory = Engine.GetCurrentReplayDirectory();
     483    summary.replaySelectionData = g_ReplaySelectionData;
    476484
    477485    Engine.EndGame();
    478486
  • binaries/data/mods/public/gui/summary/summary.js

     
    137137    Engine.StartVisualReplay(g_GameData.replayDirectory);
    138138    Engine.SwitchGuiPage("page_loading.xml", {
    139139        "attribs": Engine.GetReplayAttributes(g_GameData.replayDirectory),
    140         "isNetworked" : false,
     140        "isNetworked": false,
    141141        "playerAssignments": {
    142             "local" : {
     142            "local": {
    143143                "name": translate("You"),
    144144                "player": -1
    145145            }
    146146        },
    147147        "savedGUIData": "",
    148         "isReplay" : true
     148        "isReplay": true,
     149        "replaySelectionData": g_GameData.replaySelectionData
    149150    });
    150151}
    151152
  • binaries/data/mods/public/gui/summary/summary.xml

     
    187187                }
    188188                else if (g_GameData.isReplay)
    189189                {
    190                     Engine.SwitchGuiPage("page_replaymenu.xml");
     190                    Engine.SwitchGuiPage("page_replaymenu.xml", { "replaySelectionData": g_GameData.replaySelectionData });
    191191                }
    192192                else if (!Engine.HasXmppClient())
    193193                {