From ae1564f973b03d4d7f3e04bbd309044c0961df52 Mon Sep 17 00:00:00 2001 From: Dan Reeves Date: Fri, 24 Feb 2023 15:18:16 +0000 Subject: [PATCH] Inject Mod Options button into Esc menu --- .../mods/dmf/modules/core/localization.lua | 7 ++- .../dmf/modules/ui/options/mod_options.lua | 52 +++++++++++++++++++ 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/dmf/scripts/mods/dmf/modules/core/localization.lua b/dmf/scripts/mods/dmf/modules/core/localization.lua index 27283b5..00b8a46 100644 --- a/dmf/scripts/mods/dmf/modules/core/localization.lua +++ b/dmf/scripts/mods/dmf/modules/core/localization.lua @@ -91,13 +91,12 @@ end -- ##### DMF internal functions and variables ######################################################################### -- #################################################################################################################### --- Handles the return of global localize text_ids -dmf:hook(_G, "Localize", function (func, text_id, ...) +dmf:hook(LocalizationManager, "localize", function (func, self, text_id, ...) local text_translations = text_id and _global_localization_database[text_id] local message = get_translated_or_english_message(nil, text_translations, ...) - return message or func(text_id, ...) + return message or func(self, text_id, ...) end) -- #################################################################################################################### @@ -128,7 +127,7 @@ dmf.quick_localize = function (mod, text_id) if mod_localization_table then local text_translations = mod_localization_table[text_id] - + if text_translations then return text_translations[_language_id] or text_translations["en"] end diff --git a/dmf/scripts/mods/dmf/modules/ui/options/mod_options.lua b/dmf/scripts/mods/dmf/modules/ui/options/mod_options.lua index 9511fa0..b32e9a5 100644 --- a/dmf/scripts/mods/dmf/modules/ui/options/mod_options.lua +++ b/dmf/scripts/mods/dmf/modules/ui/options/mod_options.lua @@ -350,10 +350,62 @@ local function create_option_template(self, widget_data, category_name, index_of end end +-- Insert a new item into a table before any items that pass the item_tester function +local function insert_before(tbl, item_tester, new_item) + local copy = {} + for _, item in ipairs(tbl) do + if item_tester(item) then + table.insert(copy, new_item) + end + table.insert(copy, item) + end + return copy +end + + -- #################################################################################################################### -- ##### Hooks ######################################################################################################## -- #################################################################################################################### +-- Add Mods Options title to global localization table +-- so that the SystemView options menu can localize it +dmf:add_global_localize_strings({ + -- TODO: copied from dmf/localization/dmf.lua, figure out a better way + mods_options = { + en = "Mod Options", + es = "Configuración de mods", + ru = "Настройки модов", + } +}) + +local dmf_option_definition = { + text = "mods_options", + type = "button", + icon = "content/ui/materials/icons/system/escape/settings", + trigger_function = function() + local context = { + can_exit = true, + } + local view_name = "dmf_options_view" + Managers.ui:open_view(view_name, nil, nil, nil, nil, context) + end, +} + +local function is_options_button(item) + return item.text == "loc_options_view_display_name" +end + +-- Inject DMF Options button into the Esc menu +dmf:hook_require("scripts/ui/views/system_view/system_view_content_list", function(instance) + -- Don't re-inject if it's already there + if table.find_by_key(instance.default, "text", dmf_option_definition.text) then + return + end + + instance.default = insert_before(instance.default, is_options_button, dmf_option_definition) + instance.StateMainMenu = insert_before(instance.StateMainMenu, is_options_button, dmf_option_definition) +end) + -- #################################################################################################################### -- ##### DMF internal functions and variables ######################################################################### -- ####################################################################################################################