mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
doc: Event and WidgetContainer
This commit is contained in:
@@ -1,14 +1,30 @@
|
||||
--[[
|
||||
--[[--
|
||||
Events are messages that are passed through the widget tree
|
||||
|
||||
Events need a "name" attribute as minimal data.
|
||||
|
||||
In order to see how event propagation works and how to make
|
||||
widgets event-aware see the implementation in WidgetContainer
|
||||
below.
|
||||
widgets event-aware see the implementation in @{ui.widget.container.widgetcontainer}.
|
||||
]]
|
||||
|
||||
--[[--
|
||||
@field handler name for the handler method
|
||||
@field args array of arguments for the event
|
||||
@table Event
|
||||
]]
|
||||
local Event = {}
|
||||
|
||||
--[[--
|
||||
Create a new event.
|
||||
|
||||
@string name
|
||||
@tparam[opt] ... arguments for the event
|
||||
@treturn Event
|
||||
|
||||
@usage
|
||||
local Event = require("ui/event")
|
||||
Event:new("GotoPage", 1)
|
||||
]]
|
||||
function Event:new(name, ...)
|
||||
local o = {
|
||||
handler = "on"..name,
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
--[[--
|
||||
WidgetContainer is a container for another Widget. Base class for all the widget containers.
|
||||
|
||||
It handles event propagation and paiting (with different alignments) for its children.
|
||||
]]
|
||||
|
||||
local Geom = require("ui/geometry")
|
||||
local Widget = require("ui/widget/widget")
|
||||
|
||||
@@ -5,9 +11,6 @@ if require("device"):isAndroid() then
|
||||
require("jit").off(true, true)
|
||||
end
|
||||
|
||||
--[[
|
||||
WidgetContainer is a container for another Widget
|
||||
--]]
|
||||
local WidgetContainer = Widget:new()
|
||||
|
||||
function WidgetContainer:init()
|
||||
@@ -37,9 +40,9 @@ function WidgetContainer:getSize()
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
delete all child widgets
|
||||
--]]
|
||||
--[[--
|
||||
Delete all child widgets
|
||||
]]
|
||||
function WidgetContainer:clear()
|
||||
while table.remove(self) do end
|
||||
end
|
||||
@@ -80,9 +83,15 @@ function WidgetContainer:propagateEvent(event)
|
||||
return false
|
||||
end
|
||||
|
||||
--[[
|
||||
Containers will pass events to children or react on them themselves
|
||||
--]]
|
||||
--[[--
|
||||
WidgetContainer will pass event to its children by calling their handleEvent
|
||||
methods. If no child responded to the event (by returning true), it will call its own
|
||||
handleEvent method.
|
||||
|
||||
@tparam ui.event.Event event
|
||||
@treturn bool true if event is consumed, othewise false. A consumed event will
|
||||
not be sent to other widgets.
|
||||
]]
|
||||
function WidgetContainer:handleEvent(event)
|
||||
if not self:propagateEvent(event) then
|
||||
-- call our own standard event handler
|
||||
|
||||
Reference in New Issue
Block a user