diff --git a/frontend/dispatcher.lua b/frontend/dispatcher.lua index ee38b89f2..e7f325c8d 100644 --- a/frontend/dispatcher.lua +++ b/frontend/dispatcher.lua @@ -302,7 +302,7 @@ function Dispatcher:init() Dispatcher.initialized = true end -function Dispatcher.addItem(caller, menu, location, settings, section) +function Dispatcher:addItem(menu, location, settings, section) for _, k in ipairs(dispatcher_menu_order) do if settingsList[k][section] == true and (settingsList[k].condition == nil or settingsList[k].condition) @@ -311,15 +311,15 @@ function Dispatcher.addItem(caller, menu, location, settings, section) table.insert(menu, { text = settingsList[k].title, checked_func = function() - return caller[location][settings] ~= nil and caller[location][settings][k] ~= nil + return location[settings] ~= nil and location[settings][k] ~= nil end, callback = function(touchmenu_instance) - if caller[location][settings] ~= nil - and caller[location][settings][k] + if location[settings] ~= nil + and location[settings][k] then - caller[location][settings][k] = nil + location[settings][k] = nil else - caller[location][settings][k] = true + location[settings][k] = true end if touchmenu_instance then touchmenu_instance:updateItems() end end, @@ -328,24 +328,24 @@ function Dispatcher.addItem(caller, menu, location, settings, section) elseif settingsList[k].category == "absolutenumber" then table.insert(menu, { text_func = function() - return T(settingsList[k].title, caller[location][settings][k] or "") + return T(settingsList[k].title, location[settings][k] or "") end, checked_func = function() - return caller[location][settings] ~= nil and caller[location][settings][k] ~= nil + return location[settings] ~= nil and location[settings][k] ~= nil end, callback = function(touchmenu_instance) local SpinWidget = require("ui/widget/spinwidget") local items = SpinWidget:new{ width = Screen:getWidth() * 0.6, - value = caller[location][settings][k] or settingsList[k].default or 0, + value = location[settings][k] or settingsList[k].default or 0, value_min = settingsList[k].min, value_step = 1, value_hold_step = 2, value_max = settingsList[k].max, default_value = 0, - title_text = T(settingsList[k].title, caller[location][settings][k] or ""), + title_text = T(settingsList[k].title, location[settings][k] or ""), callback = function(spin) - caller[location][settings][k] = spin.value + location[settings][k] = spin.value if touchmenu_instance then touchmenu_instance:updateItems() end @@ -354,7 +354,7 @@ function Dispatcher.addItem(caller, menu, location, settings, section) UIManager:show(items) end, hold_callback = function(touchmenu_instance) - caller[location][settings][k] = nil + location[settings][k] = nil if touchmenu_instance then touchmenu_instance:updateItems() end end, separator = settingsList[k].separator, @@ -362,26 +362,26 @@ function Dispatcher.addItem(caller, menu, location, settings, section) elseif settingsList[k].category == "incrementalnumber" then table.insert(menu, { text_func = function() - return T(settingsList[k].title, caller[location][settings][k] or "") + return T(settingsList[k].title, location[settings][k] or "") end, checked_func = function() - return caller[location][settings] ~= nil and caller[location][settings][k] ~= nil + return location[settings] ~= nil and location[settings][k] ~= nil end, callback = function(touchmenu_instance) local _ = require("gettext") local SpinWidget = require("ui/widget/spinwidget") local items = SpinWidget:new{ width = Screen:getWidth() * 0.6, - value = caller[location][settings][k] or 0, + value = location[settings][k] or 0, value_min = settingsList[k].min, value_step = 1, value_hold_step = 2, value_max = settingsList[k].max, default_value = 0, - title_text = T(settingsList[k].title, caller[location][settings][k] or ""), + title_text = T(settingsList[k].title, location[settings][k] or ""), info_text = _([[If called by a gesture the amount of the gesture will be used]]), callback = function(spin) - caller[location][settings][k] = spin.value + location[settings][k] = spin.value if touchmenu_instance then touchmenu_instance:updateItems() end @@ -390,7 +390,7 @@ function Dispatcher.addItem(caller, menu, location, settings, section) UIManager:show(items) end, hold_callback = function(touchmenu_instance) - caller[location][settings][k] = nil + location[settings][k] = nil if touchmenu_instance then touchmenu_instance:updateItems() end @@ -403,27 +403,27 @@ function Dispatcher.addItem(caller, menu, location, settings, section) table.insert(sub_item_table, { text = tostring(settingsList[k].toggle[i]), checked_func = function() - return caller[location][settings] ~= nil - and caller[location][settings][k] ~= nil - and caller[location][settings][k] == settingsList[k].args[i] + return location[settings] ~= nil + and location[settings][k] ~= nil + and location[settings][k] == settingsList[k].args[i] end, callback = function() - caller[location][settings][k] = settingsList[k].args[i] + location[settings][k] = settingsList[k].args[i] end, }) end table.insert(menu, { text_func = function() - return T(settingsList[k].title, caller[location][settings][k]) + return T(settingsList[k].title, location[settings][k]) end, checked_func = function() - return caller[location][settings] ~= nil - and caller[location][settings][k] ~= nil + return location[settings] ~= nil + and location[settings][k] ~= nil end, sub_item_table = sub_item_table, keep_menu_open = true, hold_callback = function(touchmenu_instance) - caller[location][settings][k] = nil + location[settings][k] = nil if touchmenu_instance then touchmenu_instance:updateItems() end @@ -438,27 +438,22 @@ end --[[-- Add a submenu to edit which items are dispatched arguments are: - 1) the caller - 2) the table representing the submenu (can be empty) - 3) the name of the parent of the settings table (must be a child of self) - 4) the name of the settings table + 1) the table representing the submenu (can be empty) + 2) the object (table) in which the settings table is found + 3) the name of the settings table example usage: - Dispatcher.addSubMenu(self, sub_items, "profiles", "profile1") - -Must be executed in the context of the caller to add items to the callers menu. -therefore declared as Dispatcher.addSubMenu(caller, menu, location, settings) -but should be called as Dispatcher.addSubMenu(self, menu, location, settings) + Dispatcher.addSubMenu(sub_items, self.data, "profile1") --]]-- -function Dispatcher.addSubMenu(caller, menu, location, settings) +function Dispatcher:addSubMenu(menu, location, settings) if not Dispatcher.initialized then Dispatcher:init() end table.insert(menu, { text = _("None"), separator = true, checked_func = function() - return next(caller[location][settings]) == nil + return next(location[settings]) == nil end, callback = function(touchmenu_instance) - caller[location][settings] = {} + location[settings] = {} if touchmenu_instance then touchmenu_instance:updateItems() end end, }) @@ -471,7 +466,7 @@ function Dispatcher.addSubMenu(caller, menu, location, settings) for _, section in ipairs(section_list) do local submenu = {} -- pass caller's context - Dispatcher.addItem(caller, submenu, location, settings, section[1]) + Dispatcher:addItem(submenu, location, settings, section[1]) table.insert(menu, { text = section[2], sub_item_table = submenu, @@ -479,26 +474,33 @@ function Dispatcher.addSubMenu(caller, menu, location, settings) end end -function Dispatcher:execute(settings, gesture) +--[[-- +Calls the events in a settings list +arguments are: + 1) a reference to the uimanager + 2) the settings table + 3) optionally a `gestures`object +--]]-- +function Dispatcher:execute(ui, settings, gesture) for k, v in pairs(settings) do if settingsList[k].conditions == nil or settingsList[k].conditions == true then if settingsList[k].category == "none" then - self.ui:handleEvent(Event:new(settingsList[k].event)) + ui:handleEvent(Event:new(settingsList[k].event)) end if settingsList[k].category == "absolutenumber" or settingsList[k].category == "string" then - self.ui:handleEvent(Event:new(settingsList[k].event, v)) + ui:handleEvent(Event:new(settingsList[k].event, v)) end -- the event can accept a gesture object or an argument if settingsList[k].category == "arg" then local arg = gesture or settingsList[k].arg - self.ui:handleEvent(Event:new(settingsList[k].event, arg)) + ui:handleEvent(Event:new(settingsList[k].event, arg)) end -- the event can accept a gesture object or a number if settingsList[k].category == "incrementalnumber" then local arg = gesture or v - self.ui:handleEvent(Event:new(settingsList[k].event, arg)) + ui:handleEvent(Event:new(settingsList[k].event, arg)) end end end diff --git a/plugins/profiles.koplugin/main.lua b/plugins/profiles.koplugin/main.lua index 00ec00a79..f3f6744f5 100644 --- a/plugins/profiles.koplugin/main.lua +++ b/plugins/profiles.koplugin/main.lua @@ -104,13 +104,13 @@ function Profiles:getSubMenuItems() end, } } - Dispatcher.addSubMenu(self, sub_items, "data", k) + Dispatcher:addSubMenu(sub_items, self.data, k) table.insert(sub_item_table, { text = k, hold_keep_menu_open = false, sub_item_table = sub_items, hold_callback = function() - Dispatcher.execute(self, self.data[k]) + Dispatcher:execute(self.ui, self.data[k]) end, }) end