From d64ea5331b2312f81df464fb22dcef0191216d86 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sun, 31 Oct 2021 12:31:16 +1100 Subject: -frontend: Refactored menu event handling and fixed a number of issues. (#8777) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Moved common code for drawing about box, info viewer, and other text box menus to a base class; removed the last of the info viewer logic and the multi-line item hack from the base menu class. * Added previous/next group navigation for general inputs and plugin input selection menus. * Moved message catalog logic to lib/util, allowing osd and emu to use localised messages. * Made the base menu class use the UI manager’s feature for holding session state rather than a static map and mutex. * Improved menu event handling model, and fixed many issues, particularly with menus behaving badly when hidden/shown. * Added better support for menus that don’t participate in the usual menu stack, like the menuless sliders and the save/load state menus. * Made a number of menus refresh state when being shown after being hidden (fixes MT08121 among other issues). * Fixed indication of mounted slot option in the slot option details menu. * Improved appearance of background menus when emulation isn't running - draw all menus in the stack, and darken the background menus to make the edges of the active menu clearer. * Fixed locale issues in -listxml. -debugger: Made GUI debuggers more uniform. * Added new memory view features to Win32 debugger. * Fixed spelling of hexadecimal in Cocoa debugger and added decimal address option. * Fixed duplicate keyboard shortcut in Cocoa debugger (Shift-Cmd-D was both new device window and 64-bit float format). * Made keyboard shortcuts slightly more consistent across debuggers. -plugins: Moved input selection menu and sequence polling code to a common library. Fixed the issue that prevented keyboard inputs being mapped with -steadykey on. -docs: Started adding some documentation for MAME's internal UI, and updated the list of example front-ends. -Regenerated message catalog sources. For translators, the new strings are mostly: * The names of the inputs provided by the OS-dependent layer for things like fullscreen and video features. These show up in the user interface inputs menu. * The names for automatically generated views. These show up in the video options menu - test with a system with a lot of screens to see more variants. * The input macro plugin UI. * A few format strings for analog input assignments. * A few strings for the about box header. --- plugins/cheat/init.lua | 64 ++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 33 deletions(-) (limited to 'plugins/cheat') diff --git a/plugins/cheat/init.lua b/plugins/cheat/init.lua index e5fc2245922..e3bf6bac56b 100644 --- a/plugins/cheat/init.lua +++ b/plugins/cheat/init.lua @@ -597,58 +597,56 @@ function cheat.startplugin() local hotkeymenu = false local hotkeylist = {} + local commonui + local poller local function menu_populate() local menu = {} if hotkeymenu then local ioport = manager.machine.ioport local input = manager.machine.input + menu[1] = {_("Select cheat to set hotkey"), "", "off"} - menu[2] = {string.format(_("Press %s to clear hotkey"), input:seq_name(ioport:type_seq(ioport:token_to_input_type("UI_CLEAR")))), "", "off"} + menu[2] = {string.format(_("Press %s to clear hotkey"), manager.ui:get_general_input_setting(ioport:token_to_input_type("UI_CLEAR"))), "", "off"} menu[3] = {"---", "", "off"} hotkeylist = {} local function hkcbfunc(cheat, event) - if event == "clear" then - cheat.hotkeys = nil - return - end - - local poller = input:switch_sequence_poller() - manager.machine:popmessage(_("Press button for hotkey or wait to leave unchanged")) - manager.machine.video:frame_update() - poller:start() - local time = os.clock() - local clearmsg = true - while (not poller:poll()) and (poller.modified or (os.clock() < time + 1)) do - if poller.modified then - if not poller.valid then - manager.machine:popmessage(_("Invalid sequence entered")) - clearmsg = false - break + if poller then + if poller:poll() then + if poller.sequence then + cheat.hotkeys = { pressed = false, keys = poller.sequence } end - manager.machine:popmessage(input:seq_name(poller.sequence)) - manager.machine.video:frame_update() + poller = nil + return true end + elseif event == "clear" then + cheat.hotkeys = nil + return true + elseif event == "select" then + if not commonui then + commonui = require('commonui') + end + poller = commonui.switch_polling_helper() + return true end - if poller.modified and poller.valid then - cheat.hotkeys = { pressed = false, keys = poller.sequence } - end - if clearmsg then - manager.machine:popmessage() - end - manager.machine.video:frame_update() + return false end for num, cheat in ipairs(cheats) do if cheat.script then - menu[#menu + 1] = {cheat.desc, cheat.hotkeys and input:seq_name(cheat.hotkeys.keys) or _("None"), ""} + local setting = cheat.hotkeys and input:seq_name(cheat.hotkeys.keys) or _("None") + menu[#menu + 1] = {cheat.desc, setting, ""} hotkeylist[#hotkeylist + 1] = function(event) return hkcbfunc(cheat, event) end end end menu[#menu + 1] = {"---", "", ""} menu[#menu + 1] = {_("Done"), "", ""} - return menu + if poller then + return poller:overlay(menu) + else + return menu + end end for num, cheat in ipairs(cheats) do menu[num] = {} @@ -703,7 +701,10 @@ function cheat.startplugin() local function menu_callback(index, event) manager.machine:popmessage() if hotkeymenu then - if event == "select" or event == "clear" then + if event == "cancel" then + hotkeymenu = false + return true + else index = index - 3 if index >= 1 and index <= #hotkeylist then hotkeylist[index](event) @@ -712,9 +713,6 @@ function cheat.startplugin() hotkeymenu = false return true end - elseif event == "cancel" then - hotkeymenu = false - return true end return false end -- cgit v1.2.3