2
0
mirror of https://github.com/koreader/koreader synced 2024-11-16 06:12:56 +00:00
koreader/frontend/ui/event.lua

44 lines
1.1 KiB
Lua
Raw Normal View History

2016-12-05 00:41:01 +00:00
--[[--
Events are messages that are passed through the widget tree.
2012-04-22 19:29:48 +00:00
Events need a "name" attribute as minimal data.
To see how event propagation works and how to make
2016-12-05 00:41:01 +00:00
widgets event-aware see the implementation in @{ui.widget.container.widgetcontainer}.
A detailed guide to events can be found in @{Events.md|the event programmer's guide}.
2016-12-05 00:41:01 +00:00
]]
--[[--
2016-12-11 03:08:31 +00:00
@field handler name for the handler method: `"on"..Event.name`
2016-12-05 00:41:01 +00:00
@field args array of arguments for the event
@table Event
2012-04-22 19:29:48 +00:00
]]
2013-10-18 20:38:07 +00:00
local Event = {}
2012-04-22 19:29:48 +00:00
2016-12-05 00:41:01 +00:00
--[[--
Creates a new event.
2016-12-05 00:41:01 +00:00
@string name
@tparam[opt] ... arguments for the event
@treturn Event
@usage
local Event = require("ui/event")
Event:new("GotoPage", 1)
]]
2012-04-22 19:29:48 +00:00
function Event:new(name, ...)
2014-03-13 13:52:43 +00:00
local o = {
handler = "on"..name,
-- Minor trickery to handle nils, c.f., http://lua-users.org/wiki/VarargTheSecondClassCitizen
--- @fixme: Move to table.pack() (which stores the count in the field `n`) here & table.unpack() in @{ui.widget.eventlistener|EventListener} once we build LuaJIT w/ 5.2 compat.
argc = select('#', ...),
2014-03-13 13:52:43 +00:00
args = {...}
}
setmetatable(o, self)
self.__index = self
return o
2012-04-22 19:29:48 +00:00
end
2013-10-18 20:38:07 +00:00
return Event