Ticket #4413: 4413_load.patch

File 4413_load.patch, 6.7 KB (added by Vladislav Belov, 7 years ago)

Adds olist and removes a path

  • binaries/data/mods/public/gui/common/functions_utility_loadsave.js

     
    33    return b.metadata.time - a.metadata.time;
    44}
    55
    6 function generateLabel(metadata, engineInfo)
     6function generateDateString(metadata, engineInfo)
    77{
    88    let dateTimeString = Engine.FormatMillisecondsIntoDateString(metadata.time*1000, translate("yyyy-MM-dd HH:mm:ss"));
    99    let dateString = sprintf(translate("\\[%(date)s]"), { "date": dateTimeString });
     
    1616            dateString = "[color=\"orange\"]" + dateString + "[/color]";
    1717    }
    1818
     19    return dateString;
     20}
     21
     22function generateLabel(metadata, engineInfo)
     23{
    1924    return sprintf(
    2025        metadata.description ?
    2126            translate("%(dateString)s %(map)s - %(description)s") :
    2227            translate("%(dateString)s %(map)s"),
    2328        {
    24             "dateString": dateString,
     29            "dateString": generateDateString(metadata, engineInfo),
    2530            "map": metadata.initAttributes.map,
    2631            "description": metadata.description || ""
    2732        }
  • binaries/data/mods/public/gui/savedgames/load.js

     
    88function init()
    99{
    1010    let gameSelection = Engine.GetGUIObjectByName("gameSelection");
    11     let savedGames = Engine.GetSavedGames().sort(sortDecreasingDate);
     11    let savedGames = Engine.GetSavedGames();
    1212    gameSelection.enabled = !!savedGames.length;
    1313    if (!savedGames.length)
    1414    {
    15         gameSelection.list = [translate("No saved games found")];
     15        Engine.GetGUIObjectByName("gameSelectionFeedback").hidden = false;
    1616        gameSelection.selected = -1;
    1717        return;
    1818    }
    1919
     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
     32function displayList()
     33{
     34    let gameSelection = Engine.GetGUIObjectByName("gameSelection");
     35
    2036    // Get current game version and loaded mods
    2137    let engineInfo = Engine.GetEngineInfo();
    2238
    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;
    2469
    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    });
    2781
     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
    2894    if (gameSelection.selected == -1)
    2995        gameSelection.selected = 0;
    30     else if (gameSelection.selected >= savedGames.length) // happens when deleting the last saved game
    31         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;
    3298    else
    33         selectionChanged();
    34 
    35     Engine.GetGUIObjectByName("deleteGameButton").tooltip = deleteTooltip();
     99        gameSelection.selected = g_SavedGamesMetadata.findIndex(metadata => metadata.id == selectedGameId);
    36100}
    37101
    38102function selectionChanged()
  • binaries/data/mods/public/gui/savedgames/load.xml

     
    2121        </object>
    2222
    2323        <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            >
    2535                <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>
    2654            </object>
    2755
     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
    2860            <object type="button" size="0%+25 100%-60 33%+10 100%-32" style="StoneButton" hotkey="cancel">
    2961                <translatableAttribute id="caption">Cancel</translatableAttribute>
    3062                <action on="Press">Engine.PopGuiPage();</action>