You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koreader/doc/Events.md

46 lines
1.2 KiB
Markdown

Events
======
8 years ago
## Overview ##
All widgets is a subclass of @{ui.widget.eventlistener}, therefore inherit
the @{ui.widget.eventlistener:handleEvent|handleEvent} method. To send an event
to a widget, you can simply invoke the handleEvent method like the following:
```lua
widget_foo:handleEvent(Event:new("Timeout"))
```
## Builtin events ##
### Reader events ###
8 years ago
* UpdatePos: emitted by typesetting related modules to notify other modules to
recalculate the view based on the new typesetting.
* PosUpdate: emitted by readerrolling module to signal a change in pos.
## Event propagation ##
Most of the UI components is a subclass of
@{ui.widget.container.widgetcontainer|WidgetContainer}. A WidgetContainer is an array that
stores a list of children widgets.
When @{ui.widget.container.widgetcontainer:handleEvent|WidgetContainer:handleEvent} is called with a new
event, it will run roughly the following code:
```lua
-- First propagate event to its children
for _, widget in ipairs(self) do
if widget:handleEvent(event) then
-- stop propagating when an event handler returns true
return true
end
end
-- If not consumed by children, try consume by itself
return self["on"..event.name](self, unpack(event.args))
```