diff --git a/binaries/data/mods/public/gui/common/color.js b/binaries/data/mods/public/gui/common/color.js index aa9473a4f1..a6e8ef79bb 100644 --- a/binaries/data/mods/public/gui/common/color.js +++ b/binaries/data/mods/public/gui/common/color.js @@ -144,3 +144,17 @@ function colorizeHotkey(text, hotkey) "[/color]" }); } + +/** + * The autocomplete hotkey is hardcoded in SDLK_TAB of CInput.cpp, + * as we don't want hotkeys interfering with typing text. + */ +function colorizeAutocompleteHotkey() +{ + return sprintf(translate("Press %(hotkey)s to autocomplete playernames."), { + "hotkey": + "[color=\"" + g_HotkeyColor + "\"]" + + "\\[" + translateWithContext("hotkey", "Tab") + "]" + + "[/color]" + }); +} diff --git a/binaries/data/mods/public/gui/common/functions_utility_loadsave.js b/binaries/data/mods/public/gui/common/functions_utility_loadsave.js index 67d548a007..cad6e099d6 100644 --- a/binaries/data/mods/public/gui/common/functions_utility_loadsave.js +++ b/binaries/data/mods/public/gui/common/functions_utility_loadsave.js @@ -75,3 +75,17 @@ function reallyDeleteGame(gameID) // Run init again to refresh saved game list init(); } + +function deleteTooltip() +{ + let deleteTooltip = colorizeHotkey( + translate("Delete the selected entry using %(hotkey)s."), + "session.savedgames.delete"); + + if (deleteTooltip) + deleteTooltip += colorizeHotkey( + "\n" + translate("Hold %(hotkey)s to delete without confirmation."), + "session.savedgames.noconfirmation"); + + return deleteTooltip; +} diff --git a/binaries/data/mods/public/gui/gamesetup/gamesetup.js b/binaries/data/mods/public/gui/gamesetup/gamesetup.js index fce3cd886a..3f103da510 100644 --- a/binaries/data/mods/public/gui/gamesetup/gamesetup.js +++ b/binaries/data/mods/public/gui/gamesetup/gamesetup.js @@ -294,6 +294,8 @@ function initGUIObjects() resizeMoreOptionsWindow(); + Engine.GetGUIObjectByName("chatInput").tooltip = colorizeAutocompleteHotkey(); + if (g_IsNetworked) Engine.GetGUIObjectByName("chatInput").focus(); diff --git a/binaries/data/mods/public/gui/lobby/lobby.js b/binaries/data/mods/public/gui/lobby/lobby.js index d61dc50781..ef3fe3b02f 100644 --- a/binaries/data/mods/public/gui/lobby/lobby.js +++ b/binaries/data/mods/public/gui/lobby/lobby.js @@ -224,6 +224,8 @@ function init(attribs) Engine.LobbyClearPresenceUpdates(); updatePlayerList(); updateSubject(Engine.LobbyGetRoomSubject()); + + Engine.GetGUIObjectByName("chatInput").tooltip = colorizeAutocompleteHotkey(); } function returnToMainMenu() diff --git a/binaries/data/mods/public/gui/replaymenu/replay_menu.js b/binaries/data/mods/public/gui/replaymenu/replay_menu.js index a41f80192a..5a46e33c04 100644 --- a/binaries/data/mods/public/gui/replaymenu/replay_menu.js +++ b/binaries/data/mods/public/gui/replaymenu/replay_menu.js @@ -67,6 +67,7 @@ function init(data) return; } + initHotkeyTooltips(); displayReplayList(); } @@ -185,6 +186,15 @@ function sanitizeGameAttributes(attribs) }); } +function initHotkeyTooltips() +{ + Engine.GetGUIObjectByName("playersFilter").tooltip = + translate("Filter replays by typing one or more, partial or complete playernames.") + + " " + colorizeAutocompleteHotkey(); + + Engine.GetGUIObjectByName("deleteReplayButton").tooltip = deleteTooltip(); +} + /** * Filter g_Replays, fill the GUI list with that data and show the description of the current replay. */ diff --git a/binaries/data/mods/public/gui/replaymenu/replay_menu.xml b/binaries/data/mods/public/gui/replaymenu/replay_menu.xml index 95c9ad63e4..9b2366e350 100644 --- a/binaries/data/mods/public/gui/replaymenu/replay_menu.xml +++ b/binaries/data/mods/public/gui/replaymenu/replay_menu.xml @@ -12,7 +12,7 @@