InputContainer: Fall cleanup ;).

Get rid of the doc & seqtext fields, as they are not actually used (nor
are they particularly useful, the event handler's name should be pretty
self-explanatory).

Also, tweak the key_events documentation to highlight the quirks of the
API, especially as far as array nesting is involved...

Random drive-by cleanup of the declarations of key_events & ges_events
to re-use the existing instance object (now that we know they're sane
;p) for tables with a single member (less GC pressure).
pull/9710/head
NiLuJe 1 year ago
parent 9b2201a438
commit b523c2e8b9

@ -463,9 +463,9 @@ function FileManager:setupLayout()
}
if Device:hasKeys() then
self.key_events.Home = { {"Home"}, doc = "go home" }
self.key_events.Home = { { "Home" } }
-- Override the menu.lua way of handling the back key
self.file_chooser.key_events.Back = { {Device.input.group.Back}, doc = "go back" }
self.file_chooser.key_events.Back = { { Device.input.group.Back } }
if not Device:hasFewKeys() then
-- Also remove the handler assigned to the "Back" key by menu.lua
self.file_chooser.key_events.Close = nil

@ -49,9 +49,7 @@ function FileManagerMenu:init()
self.registered_widgets = {}
if Device:hasKeys() then
self.key_events = {
ShowMenu = { { "Menu" }, doc = "show menu" },
}
self.key_events.ShowMenu = { { "Menu" } }
end
self.activation_menu = G_reader_settings:readSetting("activate_menu")
if self.activation_menu == nil then

@ -21,7 +21,7 @@ local ReaderBack = EventListener:extend{
function ReaderBack:init()
if Device:hasKeys() then
self.ui.key_events.Back = { {Device.input.group.Back}, doc = "Reader back" }
self.ui.key_events.Back = { { Device.input.group.Back } }
end
-- Regular function wrapping our method, to avoid re-creating
-- an anonymous function at each page turn

@ -38,11 +38,7 @@ local ReaderBookmark = InputContainer:extend{
function ReaderBookmark:init()
if Device:hasKeyboard() then
self.key_events = {
ShowBookmark = {
{ "B" },
doc = "show bookmarks" },
}
self.key_events.ShowBookmark = { { "B" } }
end
if G_reader_settings:hasNot("bookmarks_items_per_page") then

@ -20,9 +20,7 @@ function ReaderConfig:init()
self.configurable:loadDefaults(self.options)
if Device:hasKeys() then
self.key_events = {
ShowConfigMenu = { {{"Press","AA"}}, doc = "show config dialog" },
}
self.key_events.ShowConfigMenu = { { { "Press", "AA" } } }
end
self:initGesListener()
if G_reader_settings:has("activate_menu") then

@ -34,15 +34,17 @@ function ReaderFont:init()
if Device:hasKeyboard() then
-- add shortcut for keyboard
self.key_events = {
ShowFontMenu = { {"F"}, doc = "show font menu" },
ShowFontMenu = { { "F" } },
IncreaseSize = {
{ "Shift", Input.group.PgFwd },
doc = "increase font size",
event = "ChangeSize", args = 0.5 },
event = "ChangeSize",
args = 0.5
},
DecreaseSize = {
{ "Shift", Input.group.PgBack },
doc = "decrease font size",
event = "ChangeSize", args = -0.5 },
event = "ChangeSize",
args = -0.5
},
}
end
-- Build face_table for menu

@ -55,19 +55,19 @@ function ReaderHighlight:init()
if Device:hasDPad() then
-- Used for text selection with dpad/keys
local QUICK_INDICTOR_MOVE = true
self.key_events.StopHighlightIndicator = { {Device.input.group.Back}, doc = "Stop non-touch highlight", args = true } -- true: clear highlight selection
self.key_events.UpHighlightIndicator = { {"Up"}, doc = "move indicator up", event = "MoveHighlightIndicator", args = {0, -1} }
self.key_events.DownHighlightIndicator = { {"Down"}, doc = "move indicator down", event = "MoveHighlightIndicator", args = {0, 1} }
self.key_events.StopHighlightIndicator = { { Device.input.group.Back }, args = true } -- true: clear highlight selection
self.key_events.UpHighlightIndicator = { { "Up" }, event = "MoveHighlightIndicator", args = {0, -1} }
self.key_events.DownHighlightIndicator = { { "Down" }, event = "MoveHighlightIndicator", args = {0, 1} }
-- let FewKeys device can move indicator left
self.key_events.LeftHighlightIndicator = { {"Left"}, doc = "move indicator left", event = "MoveHighlightIndicator", args = {-1, 0} }
self.key_events.RightHighlightIndicator = { {"Right"}, doc = "move indicator right", event = "MoveHighlightIndicator", args = {1, 0} }
self.key_events.HighlightPress = { {"Press"}, doc = "highlight start or end" }
self.key_events.LeftHighlightIndicator = { { "Left" }, event = "MoveHighlightIndicator", args = {-1, 0} }
self.key_events.RightHighlightIndicator = { { "Right" }, event = "MoveHighlightIndicator", args = {1, 0} }
self.key_events.HighlightPress = { { "Press" } }
if Device:hasKeys() then
self.key_events.QuickUpHighlightIndicator = { {"Shift", "Up"}, doc = "quick move indicator up", event = "MoveHighlightIndicator", args = {0, -1, QUICK_INDICTOR_MOVE} }
self.key_events.QuickDownHighlightIndicator = { {"Shift", "Down"}, doc = "quick move indicator down", event = "MoveHighlightIndicator", args = {0, 1, QUICK_INDICTOR_MOVE} }
self.key_events.QuickLeftHighlightIndicator = { {"Shift", "Left"}, doc = "quick move indicator left", event = "MoveHighlightIndicator", args = {-1, 0, QUICK_INDICTOR_MOVE} }
self.key_events.QuickRightHighlightIndicator = { {"Shift", "Right"}, doc = "quick move indicator right", event = "MoveHighlightIndicator", args = {1, 0, QUICK_INDICTOR_MOVE} }
self.key_events.StartHighlightIndicator = { {"H"}, doc = "start non-touch highlight" }
self.key_events.QuickUpHighlightIndicator = { { "Shift", "Up" }, event = "MoveHighlightIndicator", args = {0, -1, QUICK_INDICTOR_MOVE} }
self.key_events.QuickDownHighlightIndicator = { { "Shift", "Down" }, event = "MoveHighlightIndicator", args = {0, 1, QUICK_INDICTOR_MOVE} }
self.key_events.QuickLeftHighlightIndicator = { { "Shift", "Left" }, event = "MoveHighlightIndicator", args = {-1, 0, QUICK_INDICTOR_MOVE} }
self.key_events.QuickRightHighlightIndicator = { { "Shift", "Right" }, event = "MoveHighlightIndicator", args = {1, 0, QUICK_INDICTOR_MOVE} }
self.key_events.StartHighlightIndicator = { { "H" } }
end
end
@ -233,8 +233,8 @@ function ReaderHighlight:init()
end
function ReaderHighlight:setupTouchZones()
-- deligate gesture listener to readerui
self.ges_events = {}
-- delegate gesture listener to readerui
self.ges_events = nil
self.onGesture = nil
if not Device:isTouchDevice() then return end

@ -27,24 +27,23 @@ local ReaderLink = InputContainer:extend{
function ReaderLink:init()
if Device:hasKeys() then
self.key_events.SelectNextPageLink = {
{"Tab" },
doc = "select next page link",
event = "SelectNextPageLink",
}
self.key_events.SelectPrevPageLink = {
{"Shift", "Tab" },
{"Sym", "Tab" }, -- Right Shift + Tab
doc = "select previous page link",
event = "SelectPrevPageLink",
}
self.key_events.GotoSelectedPageLink = {
{ "Press" },
doc = "go to selected page link",
event = "GotoSelectedPageLink",
self.key_events = {
SelectNextPageLink = {
{ "Tab" },
event = "SelectNextPageLink",
},
SelectPrevPageLink = {
{ "Shift", "Tab" },
{ "Sym", "Tab" }, -- Shift or Sym + Tab
event = "SelectPrevPageLink",
},
GotoSelectedPageLink = {
{ "Press" },
event = "GotoSelectedPageLink",
},
-- "Back" is handled by ReaderBack, which will call our onGoBackLink()
-- when G_reader_settings:readSetting("back_in_reader") == "previous_location"
}
-- "Back" is handled by ReaderBack, which will call our onGoBackLink()
-- when G_reader_settings:readSetting("back_in_reader") == "previous_location"
end
if Device:isTouchDevice() then
self.ui:registerTouchZones({

@ -58,16 +58,16 @@ function ReaderMenu:init()
if Device:hasKeys() then
if Device:isTouchDevice() then
self.key_events.TapShowMenu = { { "Menu" }, doc = "show menu", }
self.key_events.TapShowMenu = { { "Menu" } }
if Device:hasFewKeys() then
self.key_events.TapShowMenu = { { { "Menu", "Right" } }, doc = "show menu", }
self.key_events.TapShowMenu = { { { "Menu", "Right" } } }
end
else
-- map menu key to only top menu because bottom menu is only
-- designed for touch devices
self.key_events.ShowMenu = { { "Menu" }, doc = "show menu", }
self.key_events.ShowMenu = { { "Menu" } }
if Device:hasFewKeys() then
self.key_events.ShowMenu = { { { "Menu", "Right" } }, doc = "show menu", }
self.key_events.ShowMenu = { { { "Menu", "Right" } } }
end
end
end
@ -83,8 +83,8 @@ function ReaderMenu:getPreviousFile()
end
function ReaderMenu:onReaderReady()
-- deligate gesture listener to readerui
self.ges_events = {}
-- delegate gesture listener to readerui
self.ges_events = nil
self.onGesture = nil
if not Device:isTouchDevice() then return end

@ -41,60 +41,79 @@ local ReaderPaging = InputContainer:extend{
}
function ReaderPaging:init()
self.key_events = {}
if Device:hasKeys() then
self.key_events.GotoNextPage = {
{ {"RPgFwd", "LPgFwd", "Right" } }, doc = "go to next page",
event = "GotoViewRel", args = 1,
{ { "RPgFwd", "LPgFwd", not Device:hasFewKeys() and "Right" } },
event = "GotoViewRel",
args = 1,
}
self.key_events.GotoPrevPage = {
{ { "RPgBack", "LPgBack", "Left" } }, doc = "go to previous page",
event = "GotoViewRel", args = -1,
{ { "RPgBack", "LPgBack", not Device:hasFewKeys() and "Left" } },
event = "GotoViewRel",
args = -1,
}
if Device:hasFewKeys() then
table.remove(self.key_events.GotoNextPage[1][1], 3) -- right
table.remove(self.key_events.GotoPrevPage[1][1], 3) -- left
end
self.key_events.GotoNextPos = {
{ {"Down" } }, doc = "go to next position",
event = "GotoPosRel", args = 1,
{ "Down" },
event = "GotoPosRel",
args = 1,
}
self.key_events.GotoPrevPos = {
{ { "Up" } }, doc = "go to previous position",
event = "GotoPosRel", args = -1,
{ "Up" },
event = "GotoPosRel",
args = -1,
}
end
if Device:hasKeyboard() then
self.key_events.GotoFirst = {
{"1"}, doc = "go to start", event = "GotoPercent", args = 0,
{ "1" },
event = "GotoPercent",
args = 0,
}
self.key_events.Goto11 = {
{"2"}, doc = "go to 11%", event = "GotoPercent", args = 11,
{ "2" },
event = "GotoPercent",
args = 11,
}
self.key_events.Goto22 = {
{"3"}, doc = "go to 22%", event = "GotoPercent", args = 22,
{ "3" },
event = "GotoPercent",
args = 22,
}
self.key_events.Goto33 = {
{"4"}, doc = "go to 33%", event = "GotoPercent", args = 33,
{ "4" },
event = "GotoPercent",
args = 33,
}
self.key_events.Goto44 = {
{"5"}, doc = "go to 44%", event = "GotoPercent", args = 44,
{ "5" },
event = "GotoPercent",
args = 44,
}
self.key_events.Goto55 = {
{"6"}, doc = "go to 55%", event = "GotoPercent", args = 55,
{ "6" },
event = "GotoPercent",
args = 55,
}
self.key_events.Goto66 = {
{"7"}, doc = "go to 66%", event = "GotoPercent", args = 66,
{ "7" },
event = "GotoPercent",
args = 66,
}
self.key_events.Goto77 = {
{"8"}, doc = "go to 77%", event = "GotoPercent", args = 77,
{ "8" },
event = "GotoPercent",
args = 77,
}
self.key_events.Goto88 = {
{"9"}, doc = "go to 88%", event = "GotoPercent", args = 88,
{ "9" },
event = "GotoPercent",
args = 88,
}
self.key_events.GotoLast = {
{"0"}, doc = "go to end", event = "GotoPercent", args = 100,
{ "0" },
event = "GotoPercent",
args = 100,
}
end
self.pan_interval = time.s(1 / self.pan_rate)
@ -106,7 +125,8 @@ function ReaderPaging:onReaderReady()
end
function ReaderPaging:setupTouchZones()
self.ges_events = {}
-- delegate gesture listener to readerui
self.ges_events = nil
self.onGesture = nil
if not Device:isTouchDevice() then return end

@ -17,17 +17,25 @@ function ReaderPanning:init()
self.key_events = {
-- these will all generate the same event, just with different arguments
MoveUp = {
{ "Up" }, doc = "move visible area up",
event = "Panning", args = {0, -1} },
{ "Up" },
event = "Panning",
args = {0, -1}
},
MoveDown = {
{ "Down" }, doc = "move visible area down",
event = "Panning", args = {0, 1} },
{ "Down" },
event = "Panning",
args = {0, 1}
},
MoveLeft = {
{ "Left" }, doc = "move visible area left",
event = "Panning", args = {-1, 0} },
{ "Left" },
event = "Panning",
args = {-1, 0}
},
MoveRight = {
{ "Right" }, doc = "move visible area right",
event = "Panning", args = {1, 0} },
{ "Right" },
event = "Panning",
args = {1, 0}
},
}
end
end

@ -60,58 +60,78 @@ function ReaderRolling:init()
self.key_events = {}
if Device:hasKeys() then
self.key_events.GotoNextView = {
{ {"RPgFwd", "LPgFwd", "Right" } },
doc = "go to next view",
event = "GotoViewRel", args = 1,
{ { "RPgFwd", "LPgFwd", "Right" } },
event = "GotoViewRel",
args = 1,
}
self.key_events.GotoPrevView = {
{ { "RPgBack", "LPgBack", "Left" } },
doc = "go to previous view",
event = "GotoViewRel", args = -1,
event = "GotoViewRel",
args = -1,
}
end
if Device:hasDPad() then
self.key_events.MoveUp = {
{ "Up" },
doc = "move view up",
event = "Panning", args = {0, -1},
event = "Panning",
args = {0, -1},
}
self.key_events.MoveDown = {
{ "Down" },
doc = "move view down",
event = "Panning", args = {0, 1},
event = "Panning",
args = {0, 1},
}
end
if Device:hasKeyboard() then
self.key_events.GotoFirst = {
{"1"}, doc = "go to start", event = "GotoPercent", args = 0,
{ "1" },
event = "GotoPercent",
args = 0,
}
self.key_events.Goto11 = {
{"2"}, doc = "go to 11%", event = "GotoPercent", args = 11,
{ "2" },
event = "GotoPercent",
args = 11,
}
self.key_events.Goto22 = {
{"3"}, doc = "go to 22%", event = "GotoPercent", args = 22,
{ "3" },
event = "GotoPercent",
args = 22,
}
self.key_events.Goto33 = {
{"4"}, doc = "go to 33%", event = "GotoPercent", args = 33,
{ "4" },
event = "GotoPercent",
args = 33,
}
self.key_events.Goto44 = {
{"5"}, doc = "go to 44%", event = "GotoPercent", args = 44,
{ "5" },
event = "GotoPercent",
args = 44,
}
self.key_events.Goto55 = {
{"6"}, doc = "go to 55%", event = "GotoPercent", args = 55,
{ "6" },
event = "GotoPercent",
args = 55,
}
self.key_events.Goto66 = {
{"7"}, doc = "go to 66%", event = "GotoPercent", args = 66,
{ "7" },
event = "GotoPercent",
args = 66,
}
self.key_events.Goto77 = {
{"8"}, doc = "go to 77%", event = "GotoPercent", args = 77,
{ "8" },
event = "GotoPercent",
args = 77,
}
self.key_events.Goto88 = {
{"9"}, doc = "go to 88%", event = "GotoPercent", args = 88,
{ "9" },
event = "GotoPercent",
args = 88,
}
self.key_events.GotoLast = {
{"0"}, doc = "go to end", event = "GotoPercent", args = 100,
{ "0" },
event = "GotoPercent",
args = 100,
}
end
self.pan_interval = time.s(1 / self.pan_rate)
@ -311,7 +331,8 @@ function ReaderRolling:onReaderReady()
end
function ReaderRolling:setupTouchZones()
self.ges_events = {}
-- delegate gesture listener to readerui
self.ges_events = nil
self.onGesture = nil
if not Device:isTouchDevice() then return end

@ -12,13 +12,15 @@ function ReaderRotation:init()
self.key_events = {
-- these will all generate the same event, just with different arguments
RotateLeft = {
{"J"},
doc = "rotate left by 90 degrees",
event = "Rotate", args = -90 },
{ "J" },
event = "Rotate",
args = -90
},
RotateRight = {
{"K"},
doc = "rotate right by 90 degrees",
event = "Rotate", args = 90 },
{ "K" },
event = "Rotate",
args = 90
},
}
end
end

@ -51,9 +51,7 @@ function TweakInfoWidget:init()
}
end
if Device:hasKeys() then
self.key_events = {
Close = { {Device.input.group.Back}, doc = "cancel" }
}
self.key_events.Close = { { Device.input.group.Back } }
end
local content = VerticalGroup:new{

@ -36,11 +36,7 @@ local ReaderToc = InputContainer:extend{
function ReaderToc:init()
if Device:hasKeyboard() then
self.key_events = {
ShowToc = {
{ "T" },
doc = "show Table of Content menu" },
}
self.key_events.ShowToc = { { "T" } }
end
if G_reader_settings:hasNot("toc_items_per_page") then

@ -95,48 +95,48 @@ function ReaderZooming:init()
self.key_events = {
ZoomIn = {
{ "Shift", Input.group.PgFwd },
doc = "zoom in",
event = "Zoom", args = "in"
event = "Zoom",
args = "in",
},
ZoomOut = {
{ "Shift", Input.group.PgBack },
doc = "zoom out",
event = "Zoom", args = "out"
event = "Zoom",
args = "out",
},
ZoomToFitPage = {
{ "A" },
doc = "zoom to fit page",
event = "SetZoomMode", args = "page"
event = "SetZoomMode",
args = "page",
},
ZoomToFitContent = {
{ "Shift", "A" },
doc = "zoom to fit content",
event = "SetZoomMode", args = "content"
event = "SetZoomMode",
args = "content",
},
ZoomToFitPageWidth = {
{ "S" },
doc = "zoom to fit page width",
event = "SetZoomMode", args = "pagewidth"
event = "SetZoomMode",
args = "pagewidth",
},
ZoomToFitContentWidth = {
{ "Shift", "S" },
doc = "zoom to fit content width",
event = "SetZoomMode", args = "contentwidth"
event = "SetZoomMode",
args = "contentwidth",
},
ZoomToFitPageHeight = {
{ "D" },
doc = "zoom to fit page height",
event = "SetZoomMode", args = "pageheight"
event = "SetZoomMode",
args = "pageheight",
},
ZoomToFitContentHeight = {
{ "Shift", "D" },
doc = "zoom to fit content height",
event = "SetZoomMode", args = "contentheight"
event = "SetZoomMode",
args = "contentheight",
},
ZoomManual = {
{ "Shift", "M" },
doc = "manual zoom mode",
event = "SetZoomMode", args = "manual"
event = "SetZoomMode",
args = "manual",
},
}
end

@ -123,8 +123,8 @@ function ReaderUI:init()
SettingsMigration:migrateSettings(self.doc_settings)
if Device:hasKeys() then
self.key_events.Home = { {"Home"}, doc = "open file browser" }
self.key_events.Reload = { {"F5"}, doc = "reload document" }
self.key_events.Home = { { "Home" } }
self.key_events.Reload = { { "F5" } }
end
-- a view container (so it must be child #1!)

@ -51,8 +51,10 @@ least one key in this table must match.
E.g.:
Key:match({ "Alt", "K" }) -- match Alt-K
Key:match({ "Alt", { "K", "L" }}) -- match Alt-K _or_ Alt-L
Key:match({ "K" }) -- match K
Key:match({ { "K", "L" } }) -- match K _or_ L
Key:match({ "Alt", "K" }) -- match Alt+K
Key:match({ "Alt", { "K", "L" }}) -- match Alt+K _or_ Alt+L
]]
function Key:match(sequence)
local mod_keys = {} -- a hash table for checked modifiers

@ -51,14 +51,14 @@ function BBoxWidget:init()
}
else
self._confirm_stage = 1 -- 1 for left-top, 2 for right-bottom
self.key_events.MoveIndicatorUp = { { "Up" }, doc="Move indicator up", event="MoveIndicator", args = { 0, -1 } }
self.key_events.MoveIndicatorDown = { { "Down" }, doc="Move indicator down", event="MoveIndicator", args = { 0, 1 } }
self.key_events.MoveIndicatorLeft = { { "Left" }, doc="Move indicator left", event="MoveIndicator", args = { -1, 0 } }
self.key_events.MoveIndicatorRight = { { "Right" }, doc="Move indicator right", event="MoveIndicator", args = { 1, 0 } }
self.key_events.MoveIndicatorUp = { { "Up" }, event="MoveIndicator", args = { 0, -1 } }
self.key_events.MoveIndicatorDown = { { "Down" }, event="MoveIndicator", args = { 0, 1 } }
self.key_events.MoveIndicatorLeft = { { "Left" }, event="MoveIndicator", args = { -1, 0 } }
self.key_events.MoveIndicatorRight = { { "Right" }, event="MoveIndicator", args = { 1, 0 } }
end
if Device:hasKeys() then
self.key_events.Close = { {Device.input.group.Back}, doc = "close windows" }
self.key_events.Select = { {"Press"}, doc = "confirm adjust" }
self.key_events.Close = { { Device.input.group.Back } }
self.key_events.Select = { { "Press" } }
end
end

@ -548,43 +548,45 @@ function BookMapWidget:init()
if Device:hasKeys() then
self.key_events = {
Close = { {Input.group.Back}, doc = "close page" },
ScrollRowUp = {{"Up"}, doc = "scroll up"},
ScrollRowDown = {{"Down"}, doc = "scrol down"},
ScrollPageUp = {{Input.group.PgBack}, doc = "prev page"},
ScrollPageDown = {{Input.group.PgFwd}, doc = "next page"},
Close = { { Input.group.Back } },
ScrollRowUp = { { "Up" } },
ScrollRowDown = { { "Down" } },
ScrollPageUp = { { Input.group.PgBack } },
ScrollPageDown = { { Input.group.PgFwd } },
}
end
if Device:isTouchDevice() then
self.ges_events.Swipe = {
GestureRange:new{
ges = "swipe",
range = self.dimen,
}
}
self.ges_events.MultiSwipe = {
GestureRange:new{
ges = "multiswipe",
range = self.dimen,
}
}
self.ges_events.Tap = {
GestureRange:new{
ges = "tap",
range = self.dimen,
}
}
self.ges_events.Pinch = {
GestureRange:new{
ges = "pinch",
range = self.dimen,
}
}
self.ges_events.Spread = {
GestureRange:new{
ges = "spread",
range = self.dimen,
}
self.ges_events = {
Swipe = {
GestureRange:new{
ges = "swipe",
range = self.dimen,
}
},
MultiSwipe = {
GestureRange:new{
ges = "multiswipe",
range = self.dimen,
}
},
Tap = {
GestureRange:new{
ges = "tap",
range = self.dimen,
}
},
Pinch = {
GestureRange:new{
ges = "pinch",
range = self.dimen,
}
},
Spread = {
GestureRange:new{
ges = "spread",
range = self.dimen,
}
},
}
-- No need for any long-press handler: page slots may be small and we can't
-- really target a precise page slot with our fat finger above it...

@ -98,7 +98,7 @@ function BookStatusWidget:init()
}
if Device:hasKeys() then
self.key_events.Close = { { Device.input.group.Back }, doc = "close dialog" }
self.key_events.Close = { { Device.input.group.Back } }
end
if Device:isTouchDevice() then
self.ges_events.Swipe = {

@ -190,14 +190,12 @@ function Button:init()
ges = "tap",
range = self.dimen,
},
doc = "Tap Button",
},
HoldSelectButton = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold Button",
},
-- Safe-guard for when used inside a MovableContainer
HoldReleaseSelectButton = {

@ -62,9 +62,7 @@ local ButtonDialog = InputContainer:extend{
function ButtonDialog:init()
if Device:hasKeys() then
local close_keys = Device:hasFewKeys() and { "Back", "Left" } or Device.input.group.Back
self.key_events = {
Close = { { close_keys }, doc = "close button dialog" }
}
self.key_events.Close = { { close_keys } }
end
if Device:isTouchDevice() then
self.ges_events.TapClose = {

@ -45,9 +45,7 @@ function ButtonDialogTitle:init()
if self.dismissable then
if Device:hasKeys() then
local close_keys = Device:hasFewKeys() and { "Back", "Left" } or Device.input.group.Back
self.key_events = {
Close = { { close_keys }, doc = "close button dialog" }
}
self.key_events.Close = { { close_keys } }
end
if Device:isTouchDevice() then
self.ges_events.TapClose = {

@ -103,14 +103,12 @@ function CheckButton:initCheckButton(checked)
ges = "tap",
range = self.dimen,
},
doc = "Tap Button",
},
HoldCheckButton = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold Button",
},
-- Safe-guard for when used inside a MovableContainer
HoldReleaseCheckButton = {
@ -118,7 +116,6 @@ function CheckButton:initCheckButton(checked)
ges = "hold_release",
range = self.dimen,
},
doc = "Hold Release Button",
}
}
end

@ -57,7 +57,6 @@ function CloseButton:init()
-- drawn. so use callback to get range at runtime.
range = function() return self.dimen end,
},
doc = "Tap on close button",
}
self.ges_events.HoldClose = {
@ -65,7 +64,6 @@ function CloseButton:init()
ges = "hold_release",
range = function() return self.dimen end,
},
doc = "Hold on close button",
}
end

@ -60,14 +60,12 @@ function OptionTextItem:init()
ges = "tap",
range = self.dimen,
},
doc = "Select Option Item",
},
HoldSelect = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold Option Item",
},
}
end
@ -134,14 +132,12 @@ function OptionIconItem:init()
ges = "tap",
range = self.dimen,
},
doc = "Select Option Item",
},
HoldSelect = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold Option Item",
},
}
@ -898,7 +894,7 @@ function ConfigDialog:init()
if Device:hasKeys() then
-- set up keyboard events
local close_keys = Device:hasFewKeys() and { "Back", "Left" } or Device.input.group.Back
self.key_events.Close = { { close_keys }, doc = "close config menu" }
self.key_events.Close = { { close_keys } }
end
end

@ -72,7 +72,7 @@ function ConfirmBox:init()
}
end
if Device:hasKeys() then
self.key_events.Close = { {Device.input.group.Back}, doc = "cancel" }
self.key_events.Close = { { Device.input.group.Back } }
end
end
local text_widget = TextBoxWidget:new{

@ -1,23 +1,33 @@
--[[--
An InputContainer is a WidgetContainer that handles user input events including multi touches
and key presses.
An InputContainer is a WidgetContainer that handles user input events including multi touches and key presses.
See @{InputContainer:registerTouchZones} for examples of how to listen for multi touch input.
This example illustrates how to listen for a key press input event:
This example illustrates how to listen for a key press input event via the `key_events` hashmap:
PanBy20 = {
{ "Shift", Input.group.Cursor },
seqtext = "Shift+Cursor",
doc = "pan by 20px",
event = "Pan", args = 20, is_inactive = true,
},
PanNormal = {
{ Input.group.Cursor },
seqtext = "Cursor",
doc = "pan by 10 px", event = "Pan", args = 10,
key_events = {
PanBy20 = {
{ "Shift", Input.group.Cursor }, -- Shift + (any member of) Cursor
event = "Pan",
args = 20,
is_inactive = true,
},
PanNormal = {
{ Input.group.Cursor }, -- Any member of Cursor (itself an array)
event = "Pan",
args = 10,
},
Exit = {
{ "Alt", "F4" }, -- Alt + F4
{ "Ctrl", "Q" }, -- Ctrl + Q
},
Home = {
{ { "Home", "H" } }, -- Any of Home or H (note the extra nesting!)
},
End = {
{ "End" }, -- NOTE: For a *single* key, we can forgo the nesting (c.f., match @ device/key).
},
},
Quit = { {"Home"} },
It is recommended to reference configurable sequences from another table
and to store that table as a configuration setting.
@ -214,6 +224,7 @@ function InputContainer:onKeyPress(key)
for name, seq in pairs(self.key_events) do
if not seq.is_inactive then
for _, oneseq in ipairs(seq) do
-- NOTE: key is a device/key object, this isn't string.match!
if key:match(oneseq) then
local eventname = seq.event or name
return self:handleEvent(Event:new(eventname, seq.args, key))

@ -74,14 +74,15 @@ function MovableContainer:init()
-- which is somehow nice and gives a kind of magnetic move that
-- stick the widget to some invisible rulers.
-- (Touch is needed for accurate pan)
self.ges_events = {}
self.ges_events.MovableTouch = not ignore.touch and { GestureRange:new{ ges = "touch", range = range } } or nil
self.ges_events.MovableSwipe = not ignore.swipe and { GestureRange:new{ ges = "swipe", range = range } } or nil
self.ges_events.MovableHold = not ignore.hold and { GestureRange:new{ ges = "hold", range = range } } or nil
self.ges_events.MovableHoldPan = not ignore.hold_pan and { GestureRange:new{ ges = "hold_pan", range = range } } or nil
self.ges_events.MovableHoldRelease = not ignore.hold_release and { GestureRange:new{ ges = "hold_release", range = range } } or nil
self.ges_events.MovablePan = not ignore.pan and { GestureRange:new{ ges = "pan", range = range } } or nil
self.ges_events.MovablePanRelease = not ignore.pan_release and { GestureRange:new{ ges = "pan_release", range = range } } or nil
self.ges_events = {
MovableTouch = not ignore.touch and { GestureRange:new{ ges = "touch", range = range } } or nil,
MovableSwipe = not ignore.swipe and { GestureRange:new{ ges = "swipe", range = range } } or nil,
MovableHold = not ignore.hold and { GestureRange:new{ ges = "hold", range = range } } or nil,
MovableHoldPan = not ignore.hold_pan and { GestureRange:new{ ges = "hold_pan", range = range } } or nil,
MovableHoldRelease = not ignore.hold_release and { GestureRange:new{ ges = "hold_release", range = range } } or nil,
MovablePan = not ignore.pan and { GestureRange:new{ ges = "pan", range = range } } or nil,
MovablePanRelease = not ignore.pan_release and { GestureRange:new{ ges = "pan_release", range = range } } or nil,
}
end
end

@ -79,14 +79,15 @@ function ScrollableContainer:init()
-- Pan happens if he doesn't hold at start, but holds at end
-- Swipe happens if he doesn't hold at any moment
-- (Touch is needed for accurate pan)
self.ges_events = {}
self.ges_events.ScrollableTouch = not ignore.touch and { GestureRange:new{ ges = "touch", range = range } } or nil
self.ges_events.ScrollableSwipe = not ignore.swipe and { GestureRange:new{ ges = "swipe", range = range } } or nil
self.ges_events.ScrollableHold = not ignore.hold and { GestureRange:new{ ges = "hold", range = range } } or nil
self.ges_events.ScrollableHoldPan = not ignore.hold_pan and { GestureRange:new{ ges = "hold_pan", range = range } } or nil
self.ges_events.ScrollableHoldRelease = not ignore.hold_release and { GestureRange:new{ ges = "hold_release", range = range } } or nil
self.ges_events.ScrollablePan = not ignore.pan and { GestureRange:new{ ges = "pan", range = range } } or nil
self.ges_events.ScrollablePanRelease = not ignore.pan_release and { GestureRange:new{ ges = "pan_release", range = range } } or nil
self.ges_events = {
ScrollableTouch = not ignore.touch and { GestureRange:new{ ges = "touch", range = range } } or nil,
ScrollableSwipe = not ignore.swipe and { GestureRange:new{ ges = "swipe", range = range } } or nil,
ScrollableHold = not ignore.hold and { GestureRange:new{ ges = "hold", range = range } } or nil,
ScrollableHoldPan = not ignore.hold_pan and { GestureRange:new{ ges = "hold_pan", range = range } } or nil,
ScrollableHoldRelease = not ignore.hold_release and { GestureRange:new{ ges = "hold_release", range = range } } or nil,
ScrollablePan = not ignore.pan and { GestureRange:new{ ges = "pan", range = range } } or nil,
ScrollablePanRelease = not ignore.pan_release and { GestureRange:new{ ges = "pan_release", range = range } } or nil,
}
end
end

@ -117,18 +117,16 @@ function DateTimeWidget:init()
end
self.width = self.width or math.floor(math.min(self.screen_width, self.screen_height) * width_scale_factor)
if Device:hasKeys() then
self.key_events.Close = { {Device.input.group.Back}, doc = "close date widget" }
self.key_events.Close = { { Device.input.group.Back } }
end
if Device:isTouchDevice() then
self.ges_events = {
TapClose = {
GestureRange:new{
ges = "tap",
range = Geom:new{
w = self.screen_width,
h = self.screen_height,
}
},
self.ges_events.TapClose = {
GestureRange:new{
ges = "tap",
range = Geom:new{
w = self.screen_width,
h = self.screen_height,
}
},
}
end

@ -96,9 +96,9 @@ function DictQuickLookup:init()
self.image_alt_face = Font:getFace("cfont", font_size_alt)
if Device:hasKeys() then
self.key_events = {
ReadPrevResult = {{Input.group.PgBack}, doc = "read prev result"},
ReadNextResult = {{Input.group.PgFwd}, doc = "read next result"},
Close = { {Input.group.Back}, doc = "close quick lookup" }
ReadPrevResult = { { Input.group.PgBack } },
ReadNextResult = { { Input.group.PgFwd } },
Close = { { Input.group.Back } },
}
end
if Device:isTouchDevice() then

@ -67,18 +67,16 @@ function DoubleSpinWidget:init()
self.width = math.floor(math.min(self.screen_width, self.screen_height) * self.width_factor)
end
if Device:hasKeys() then
self.key_events.Close = { {Device.input.group.Back}, doc = "close doublespin widget" }
self.key_events.Close = { { Device.input.group.Back } }
end
if Device:isTouchDevice() then
self.ges_events = {
TapClose = {
GestureRange:new{
ges = "tap",
range = Geom:new{
w = self.screen_width,
h = self.screen_height,
}
},
self.ges_events.TapClose = {
GestureRange:new{
ges = "tap",
range = Geom:new{
w = self.screen_width,
h = self.screen_height,
}
},
}
end

@ -46,26 +46,26 @@ local function populateEventMappings()
if Device:hasDPad() then
local event_keys = {}
-- these will all generate the same event, just with different arguments
table.insert(event_keys, {"FocusUp", { {"Up"}, doc = "move focus up", event = "FocusMove", args = {0, -1} } })
table.insert(event_keys, {"FocusRight", { {"Right"}, doc = "move focus right", event = "FocusMove", args = {1, 0} } })
table.insert(event_keys, {"FocusDown", { {"Down"}, doc = "move focus down", event = "FocusMove", args = {0, 1} } })
table.insert(event_keys, {"Press", { {"Press"}, doc = "tap the widget", event="Press" }})
table.insert(event_keys, { "FocusUp", { { "Up" }, event = "FocusMove", args = {0, -1} } })
table.insert(event_keys, { "FocusRight", { { "Right" }, event = "FocusMove", args = {1, 0} } })
table.insert(event_keys, { "FocusDown", { { "Down" }, event = "FocusMove", args = {0, 1} } })
table.insert(event_keys, { "Press", { { "Press" }, event = "Press" } })
local FEW_KEYS_END_INDEX = #event_keys -- Few keys device: only setup up, down, right and press
table.insert(event_keys, {"FocusLeft", { {"Left"}, doc = "move focus left", event = "FocusMove", args = {-1, 0} } })
table.insert(event_keys, { "FocusLeft", { { "Left" }, event = "FocusMove", args = {-1, 0} } })
local NORMAL_KEYS_END_INDEX = #event_keys
-- Advanced Feature: following event handlers can be enabled via settings.reader.lua
-- Key combinations (Sym, Alt+Up, Tab, Shift+Tab and so on) are not used but shown as examples here
table.insert(event_keys, {"Hold", { {"Sym", "AA"}, doc = "tap and hold the widget", event="Hold" } })
-- Key combinations (Sym+AA, Alt+Up, Tab, Shift+Tab and so on) are not used but shown as examples here
table.insert(event_keys, { "Hold", { { "Sym", "AA" }, event = "Hold" } })
-- half rows/columns move, it is helpful for slow device like Kindle DX to move quickly
table.insert(event_keys, {"HalfFocusUp", { {"Alt", "Up"}, doc = "move focus half columns up", event = "FocusHalfMove", args = {"up"} } })
table.insert(event_keys, {"HalfFocusRight", { {"Alt", "Right"}, doc = "move focus half rows right", event = "FocusHalfMove", args = {"right"} } })
table.insert(event_keys, {"HalfFocusDown", { {"Alt", "Down"}, doc = "move focus half columns down", event = "FocusHalfMove", args = {"down"} } })
table.insert(event_keys, {"HalfFocusLeft", { {"Alt", "Left"}, doc = "move focus half rows left", event = "FocusHalfMove", args = {"left"} } })
table.insert(event_keys, { "HalfFocusUp", { { "Alt", "Up" }, event = "FocusHalfMove", args = {"up"} } })
table.insert(event_keys, { "HalfFocusRight", { { "Alt", "Right" }, event = "FocusHalfMove", args = {"right"} } })
table.insert(event_keys, { "HalfFocusDown", { { "Alt", "Down" }, event = "FocusHalfMove", args = {"down"} } })
table.insert(event_keys, { "HalfFocusLeft", { { "Alt", "Left" }, event = "FocusHalfMove", args = {"left"} } })
-- for PC navigation behavior support
table.insert(event_keys, {"FocusNext", { {"Tab"}, doc = "move focus to next widget", event="FocusNext"} })
table.insert(event_keys, {"FocusPrevious", { {"Shift", "Tab"}, doc = "move focus to previous widget", event="FocusPrevious"} })
table.insert(event_keys, { "FocusNext", { { "Tab" }, event = "FocusNext" } })
table.insert(event_keys, { "FocusPrevious", { { "Shift", "Tab" }, event = "FocusPrevious" } })
for i = 1, FEW_KEYS_END_INDEX do
local key_name = event_keys[i][1]

@ -188,8 +188,8 @@ function FootnoteWidget:init()
end
if Device:hasKeys() then
self.key_events = {
Close = { {Device.input.group.Back}, doc = "cancel" },
Follow = { {"Press"}, doc = "follow link" },
Close = { { Device.input.group.Back } },
Follow = { { "Press" } },
}
end

@ -80,7 +80,7 @@ function FrontLightWidget:init()
-- Input
if Device:hasKeys() then
self.key_events.Close = { {Device.input.group.Back}, doc = "close frontlight" }
self.key_events.Close = { { Device.input.group.Back } }
end
if Device:isTouchDevice() then
self.ges_events = {

@ -27,12 +27,10 @@ local HtmlBoxWidget = InputContainer:extend{
function HtmlBoxWidget:init()
if Device:isTouchDevice() then
self.ges_events = {
TapText = {
GestureRange:new{
ges = "tap",
range = function() return self.dimen end,
},
self.ges_events.TapText = {
GestureRange:new{
ges = "tap",
range = function() return self.dimen end,
},
}
end

@ -81,21 +81,18 @@ function IconButton:initGesListener()
ges = "tap",
range = self.dimen,
},
doc = "Tap IconButton",
},
HoldIconButton = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold IconButton",
},
HoldReleaseIconButton = {
GestureRange:new{
ges = "hold_release",
range = self.dimen,
},
doc = "Hold Release IconButton",
}
}
end

@ -84,16 +84,16 @@ function ImageViewer:init()
if type(self.image) == "table" then
-- if self.image is a table, then use hardware keys to change image
self.key_events = {
Close = { {Device.input.group.Back}, doc = "close viewer" },
ShowPrevImage = { {Device.input.group.PgBack}, doc = "Previous image" },
ShowNextImage = { {Device.input.group.PgFwd}, doc = "Next image" },
Close = { { Device.input.group.Back } },
ShowPrevImage = { { Device.input.group.PgBack } },
ShowNextImage = { { Device.input.group.PgFwd } },
}
else
-- otherwise, use hardware keys to zoom in/out
self.key_events = {
Close = { {Device.input.group.Back}, doc = "close viewer" },
ZoomIn = { {Device.input.group.PgBack}, doc = "Zoom In" },
ZoomOut = { {Device.input.group.PgFwd}, doc = "Zoom out" },
Close = { { Device.input.group.Back } },
ZoomIn = { { Device.input.group.PgBack } },
ZoomOut = { { Device.input.group.PgFwd } },
}
end
end

@ -79,10 +79,7 @@ local InfoMessage = InputContainer:extend{
function InfoMessage:init()
if self.dismissable then
if Device:hasKeys() then
self.key_events = {
AnyKeyPressed = { { Input.group.Any },
seqtext = "any key", doc = "close dialog" }
}
self.key_events.AnyKeyPressed = { { Input.group.Any } }
end
if Device:isTouchDevice() then
self.ges_events.TapClose = {

@ -433,17 +433,15 @@ function InputDialog:init()
frame
}
if Device:isTouchDevice() then -- is used to hide the keyboard with a tap outside of inputbox
self.ges_events = {
Tap = {
GestureRange:new{
ges = "tap",
range = self[1].dimen, -- screen above the keyboard
},
self.ges_events.Tap = {
GestureRange:new{
ges = "tap",
range = self[1].dimen, -- screen above the keyboard
},
}
end
if Device:hasKeys() then
self.key_events.CloseDialog = { {Device.input.group.Back}, doc = "close dialog" }
self.key_events.CloseDialog = { { Device.input.group.Back } }
end
if self._added_widgets then
for _, widget in ipairs(self._added_widgets) do

@ -168,7 +168,7 @@ function KeyboardLayoutDialog:init()
self.movable,
}
if Device:hasKeys() then
self.key_events.CloseDialog = { {Device.input.group.Back}, doc = "close dialog" }
self.key_events.CloseDialog = { { Device.input.group.Back } }
end
end

@ -302,9 +302,9 @@ function KeyValuePage:init()
end
if Device:hasKeys() then
self.key_events.Close = {{Input.group.Back}, doc = "close page" }
self.key_events.NextPage = {{Input.group.PgFwd}, doc = "next page"}
self.key_events.PrevPage = {{Input.group.PgBack}, doc = "prev page"}
self.key_events.Close = { { Input.group.Back } }
self.key_events.NextPage = { { Input.group.PgFwd } }
self.key_events.PrevPage = { { Input.group.PgBack } }
end
if Device:isTouchDevice() then
self.ges_events.Swipe = {

@ -128,14 +128,12 @@ function MenuItem:init()
ges = "tap",
range = self.dimen,
},
doc = "Select Menu Item",
},
HoldSelect = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold Menu Item",
},
}
@ -923,16 +921,12 @@ function Menu:init()
if Device:hasKeys() then
-- set up keyboard events
self.key_events.Close = { {Input.group.Back}, doc = "close menu" }
self.key_events.Close = { { Input.group.Back } }
if Device:hasFewKeys() then
self.key_events.Close = { {"Left"}, doc = "close menu" }
self.key_events.Close = { { "Left" } }
end
self.key_events.NextPage = {
{Input.group.PgFwd}, doc = "goto next page of the menu"
}
self.key_events.PrevPage = {
{Input.group.PgBack}, doc = "goto previous page of the menu"
}
self.key_events.NextPage = { { Input.group.PgFwd } }
self.key_events.PrevPage = { { Input.group.PgBack } }
end
if Device:hasDPad() then
@ -940,11 +934,9 @@ function Menu:init()
self.key_events.FocusRight = nil
-- shortcut icon is not needed for touch device
if self.is_enable_shortcut then
self.key_events.SelectByShortCut = { {self.item_shortcuts} }
self.key_events.SelectByShortCut = { { self.item_shortcuts } }
end
self.key_events.Right = {
{"Right"}, doc = "hold menu item"
}
self.key_events.Right = { { "Right" } }
end
if #self.item_table > 0 then

@ -71,7 +71,7 @@ function MultiConfirmBox:init()
}
end
if Device:hasKeys() then
self.key_events.Close = { {Device.input.group.Back}, doc = "cancel" }
self.key_events.Close = { { Device.input.group.Back } }
end
end
local content = HorizontalGroup:new{

@ -204,12 +204,10 @@ function NetworkItem:init()
}
if Device:isTouchDevice() then
self.ges_events = {
TapSelect = {
GestureRange:new{
ges = "tap",
range = self.dimen,
}
self.ges_events.TapSelect = {
GestureRange:new{
ges = "tap",
range = self.dimen,
}
}
end

@ -71,10 +71,7 @@ function Notification:init()
if not self.toast then
-- If not toast, closing is handled in here
if Device:hasKeys() then
self.key_events = {
AnyKeyPressed = { { Input.group.Any },
seqtext = "any key", doc = "close dialog" }
}
self.key_events.AnyKeyPressed = { { Input.group.Any } }
end
if Device:isTouchDevice() then
self.ges_events.TapClose = {

@ -52,49 +52,51 @@ function PageBrowserWidget:init()
if Device:hasKeys() then
self.key_events = {
Close = { {Device.input.group.Back}, doc = "close page" },
ScrollRowUp = {{"Up"}, doc = "scroll up"},
ScrollRowDown = {{"Down"}, doc = "scrol down"},
ScrollPageUp = {{Input.group.PgBack}, doc = "prev page"},
ScrollPageDown = {{Input.group.PgFwd}, doc = "next page"},
Close = { { Device.input.group.Back } },
ScrollRowUp = { { "Up" } },
ScrollRowDown = { { "Down" } },
ScrollPageUp = { { Input.group.PgBack } },
ScrollPageDown = { { Input.group.PgFwd } },
}
end
if Device:isTouchDevice() then
self.ges_events.Swipe = {
GestureRange:new{
ges = "swipe",
range = self.dimen,
}
}
self.ges_events.MultiSwipe = {
GestureRange:new{
ges = "multiswipe",
range = self.dimen,
}
}
self.ges_events.Tap = {
GestureRange:new{
ges = "tap",
range = self.dimen,
}
}
self.ges_events.Hold = {
GestureRange:new{
ges = "hold",
range = self.dimen,
}
}
self.ges_events.Pinch = {
GestureRange:new{
ges = "pinch",
range = self.dimen,
}
}
self.ges_events.Spread = {
GestureRange:new{
ges = "spread",
range = self.dimen,
}
self.ges_events = {
Swipe = {
GestureRange:new{
ges = "swipe",
range = self.dimen,
}
},
MultiSwipe = {
GestureRange:new{
ges = "multiswipe",
range = self.dimen,
}
},
Tap = {
GestureRange:new{
ges = "tap",
range = self.dimen,
}
},
Hold = {
GestureRange:new{
ges = "hold",
range = self.dimen,
}
},
Pinch = {
GestureRange:new{
ges = "pinch",
range = self.dimen,
}
},
Spread = {
GestureRange:new{
ges = "spread",
range = self.dimen,
}
},
}
end

@ -83,9 +83,7 @@ function PhysicalKeyboard:init()
for _,row in ipairs(Device.keyboard_layout) do
util.arrayAppend(all_keys, row)
end
self.key_events = {
KeyPress = { { all_keys }, }
}
self.key_events.KeyPress = { { all_keys } }
self.dimen = Geom:new{ x = 0, y = 0, w = 0, h = 0 }

@ -43,10 +43,7 @@ local QRMessage = InputContainer:extend{
function QRMessage:init()
if Device:hasKeys() then
self.key_events = {
AnyKeyPressed = { { Input.group.Any },
seqtext = "any key", doc = "close dialog" }
}
self.key_events.AnyKeyPressed = { { Input.group.Any } }
end
if Device:isTouchDevice() then
self.ges_events.TapClose = {

@ -49,19 +49,17 @@ function RadioButtonWidget:init()
self.width = math.floor(math.min(self.screen_width, self.screen_height) * self.width_factor)
end
if Device:hasKeys() then
self.key_events.Close = { {Device.input.group.Back}, doc = "close widget" }
self.key_events.Close = { { Device.input.group.Back } }
end
self.ges_events = {
TapClose = {
GestureRange:new{
ges = "tap",
range = Geom:new{
w = self.screen_width,
h = self.screen_height,
}
},
self.ges_events.TapClose = {
GestureRange:new{
ges = "tap",
range = Geom:new{
w = self.screen_width,
h = self.screen_height,
}
},
}
}
self:update()
end

@ -18,12 +18,9 @@ local ScreenSaverWidget = InputContainer:extend{
function ScreenSaverWidget:init()
if Device:hasKeys() then
self.key_events = {
AnyKeyPressed = { { Device.input.group.Any }, seqtext = "any key", doc = "close widget" },
}
self.key_events.AnyKeyPressed = { { Device.input.group.Any } }
end
if Device:isTouchDevice() then
self.ges_events = {}
if G_reader_settings:readSetting("screensaver_delay") == "gesture" then
self:setupGestureEvents()
end
@ -34,7 +31,7 @@ function ScreenSaverWidget:init()
w = Screen:getWidth(),
h = Screen:getHeight(),
}
self.ges_events["Tap"] = { GestureRange:new{ ges = "tap", range = range } }
self.ges_events.Tap = { GestureRange:new{ ges = "tap", range = range } }
end
end
self:update()

@ -79,8 +79,8 @@ function ScrollHtmlWidget:init()
if Device:hasKeys() then
self.key_events = {
ScrollDown = {{Input.group.PgFwd}, doc = "scroll down"},
ScrollUp = {{Input.group.PgBack}, doc = "scroll up"},
ScrollDown = { { Input.group.PgFwd } },
ScrollUp = { { Input.group.PgBack } },
}
end
end

@ -118,8 +118,8 @@ function ScrollTextWidget:init()
end
if Device:hasKeys() then
self.key_events = {
ScrollDown = {{Input.group.PgFwd}, doc = "scroll down"},
ScrollUp = {{Input.group.PgBack}, doc = "scroll up"},
ScrollDown = { { Input.group.PgFwd } },
ScrollUp = { { Input.group.PgBack } },
}
end
end

@ -27,21 +27,19 @@ function SkimToWidget:init()
local screen_height = Screen:getHeight()
if Device:hasKeys() then
self.key_events.Close = { {Device.input.group.Back}, doc = "close skimto page" }
self.key_events.Close = { { Device.input.group.Back } }
end
if Device:isTouchDevice() then
self.ges_events = {
TapProgress = {
GestureRange:new{
ges = "tap",
range = Geom:new{
x = 0, y = 0,
w = screen_width,
h = screen_height,
}
},
self.ges_events.TapProgress = {
GestureRange:new{
ges = "tap",
range = Geom:new{
x = 0, y = 0,
w = screen_width,
h = screen_height,
}
},
}
}
end
self.buttons_layout = {}

@ -141,9 +141,9 @@ function SortWidget:init()
h = self.height or Screen:getHeight(),
}
if Device:hasKeys() then
self.key_events.Close = { { Device.input.group.Back }, doc = "close dialog" }
self.key_events.NextPage = { { Device.input.group.PgFwd}, doc = "next page"}
self.key_events.PrevPage = { { Device.input.group.PgBack}, doc = "prev page"}
self.key_events.Close = { { Device.input.group.Back } }
self.key_events.NextPage = { { Device.input.group.PgFwd } }
self.key_events.PrevPage = { { Device.input.group.PgBack } }
end
if Device:isTouchDevice() then
self.ges_events.Swipe = {

@ -65,20 +65,18 @@ function SpinWidget:init()
self.width = math.floor(math.min(self.screen_width, self.screen_height) * self.width_factor)
end
if Device:hasKeys() then
self.key_events.Close = { {Device.input.group.Back}, doc = "close spin widget" }
self.key_events.Close = { { Device.input.group.Back } }
end
if Device:isTouchDevice() then
self.ges_events = {
TapClose = {
GestureRange:new{
ges = "tap",
range = Geom:new{
w = self.screen_width,
h = self.screen_height,
}
},
self.ges_events.TapClose = {
GestureRange:new{
ges = "tap",
range = Geom:new{
w = self.screen_width,
h = self.screen_height,
}
},
}
}
end
if self.unit and self.unit ~= "" then

@ -162,12 +162,10 @@ function TextBoxWidget:init()
self.dimen = Geom:new(self:getSize())
if Device:isTouchDevice() then
self.ges_events = {
TapImage = {
GestureRange:new{
ges = "tap",
range = function() return self.dimen end,
},
self.ges_events.TapImage = {
GestureRange:new{
ges = "tap",
range = function() return self.dimen end,
},
}
end

@ -82,9 +82,7 @@ function TextViewer:init()
self._old_virtual_line_num = 1
if Device:hasKeys() then
self.key_events = {
Close = { {Device.input.group.Back}, doc = "close text viewer" }
}
self.key_events.Close = { { Device.input.group.Back } }
end
if Device:isTouchDevice() then

@ -118,14 +118,12 @@ function ToggleSwitch:init()
ges = "tap",
range = self.dimen,
},
doc = "Toggle switch",
},
HoldSelect = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold switch",
},
}
end

@ -55,14 +55,12 @@ function TouchMenuItem:init()
ges = "tap",
range = self.dimen,
},
doc = "Select Menu Item",
},
HoldSelect = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold Menu Item",
},
}
@ -496,12 +494,12 @@ function TouchMenu:init()
}
}
self.key_events.Back = { {Input.group.Back}, doc = "back to upper menu or close touchmenu" }
self.key_events.Back = { { Input.group.Back } }
if Device:hasFewKeys() then
self.key_events.Back = { {"Left"}, doc = "back to upper menu or close touchmenu" }
self.key_events.Back = { { "Left" } }
end
self.key_events.NextPage = { {Input.group.PgFwd}, doc = "next page" }
self.key_events.PrevPage = { {Input.group.PgBack}, doc = "previous page" }
self.key_events.NextPage = { { Input.group.PgFwd } }
self.key_events.PrevPage = { { Input.group.PgBack } }
local icons = {}
for _, v in ipairs(self.tab_item_table) do

@ -41,20 +41,19 @@ function TrapWidget:init()
h = Screen:getHeight(),
}
if Device:hasKeys() then
self.key_events = {
AnyKeyPressed = { { Input.group.Any },
seqtext = "any key", doc = "dismiss" }
}
self.key_events.AnyKeyPressed = { { Input.group.Any } }
end
if Device:isTouchDevice() then
self.ges_events.TapDismiss = {
GestureRange:new{ ges = "tap", range = full_screen, }
}
self.ges_events.HoldDismiss = {
GestureRange:new{ ges = "hold", range = full_screen, }
}
self.ges_events.SwipeDismiss = {
GestureRange:new{ ges = "swipe", range = full_screen, }
self.ges_events = {
TapDismiss = {
GestureRange:new{ ges = "tap", range = full_screen, }
},
HoldDismiss = {
GestureRange:new{ ges = "hold", range = full_screen, }
},
SwipeDismiss = {
GestureRange:new{ ges = "swipe", range = full_screen, }
},
}
end
if self.text then

@ -666,17 +666,15 @@ function VirtualKeyPopup:init()
}
keyboard_frame.dimen = keyboard_frame:getSize()
self.ges_events = {
TapClose = {
GestureRange:new{
ges = "tap",
}
},
self.ges_events.TapClose = {
GestureRange:new{
ges = "tap",
}
}
self.tap_interval_override = time.ms(G_reader_settings:readSetting("ges_tap_interval_on_keyboard_ms", 0))
if Device:hasKeys() then
self.key_events.Close = { {Device.input.group.Back}, doc = "close keyboard" }
self.key_events.Close = { { Device.input.group.Back } }
end
local offset_x = 2*keyboard_frame.bordersize + keyboard_frame.padding + parent_key.keyboard.key_padding
@ -801,7 +799,7 @@ function VirtualKeyboard:init()
self:initLayer(self.keyboard_layer)
self.tap_interval_override = time.ms(G_reader_settings:readSetting("ges_tap_interval_on_keyboard_ms", 0))
if Device:hasKeys() then
self.key_events.Close = { {"Back"}, doc = "close keyboard" }
self.key_events.Close = { { "Back" } }
end
if keyboard.wrapInputBox then
self.uwrap_func = keyboard.wrapInputBox(self.inputbox) or self.uwrap_func

@ -141,14 +141,12 @@ function ListMenuItem:init()
ges = "tap",
range = self.dimen,
},
doc = "Select Menu Item",
},
HoldSelect = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold Menu Item",
},
}

@ -391,14 +391,12 @@ function MosaicMenuItem:init()
ges = "tap",
range = self.dimen,
},
doc = "Select Menu Item",
},
HoldSelect = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold Menu Item",
},
}

@ -369,7 +369,6 @@ function Gestures:multiswipeRecorder(touchmenu_instance)
w = Screen:getWidth(),
h = Screen:getHeight(),
},
doc = "Multiswipe in gesture creator"
}
}

@ -396,9 +396,9 @@ function CalendarView:init()
end
if Device:hasKeys() then
self.key_events.Close = {{Input.group.Back}, doc = "close page" }
self.key_events.NextMonth = {{Input.group.PgFwd}, doc = "next page"}
self.key_events.PrevMonth = {{Input.group.PgBack}, doc = "prev page"}
self.key_events.Close = { { Input.group.Back } }
self.key_events.NextMonth = { { Input.group.PgFwd } }
self.key_events.PrevMonth = { { Input.group.PgBack } }
end
if Device:isTouchDevice() then
self.ges_events.Swipe = {

@ -59,11 +59,8 @@ function ReaderProgress:init()
return "ui", self.dimen
end)
if Device:hasKeys() then
self.key_events = {
--don't get locked in on non touch devices
AnyKeyPressed = { { Device.input.group.Any },
seqtext = "any key", doc = "close dialog" }
}
-- don't get locked in on non touch devices
self.key_events.AnyKeyPressed = { { Device.input.group.Any } }
end
if Device:isTouchDevice() then
self.ges_events.Swipe = {

@ -154,7 +154,7 @@ local MenuDialog = FocusManager:extend{
function MenuDialog:init()
self.layout = {}
if Device:hasKeys() then
self.key_events.Close = { { Device.input.group.Back }, doc = "close dialog" }
self.key_events.Close = { { Device.input.group.Back } }
end
if Device:isTouchDevice() then
self.ges_events.Tap = {
@ -412,7 +412,7 @@ local word_info_dialog_width
function WordInfoDialog:init()
if self.dismissable then
if Device:hasKeys() then
self.key_events.Close = { { Device.input.group.Back }, doc = "close dialog" }
self.key_events.Close = { { Device.input.group.Back } }
end
if Device:isTouchDevice() then
self.ges_events.Tap = {
@ -1022,9 +1022,9 @@ function VocabularyBuilderWidget:init()
h = self.height or Screen:getHeight(),
}
if Device:hasKeys() then
self.key_events.Close = { { Device.input.group.Back }, doc = "close dialog" }
self.key_events.NextPage = { { Device.input.group.PgFwd}, doc = "next page"}
self.key_events.PrevPage = { { Device.input.group.PgBack}, doc = "prev page"}
self.key_events.Close = { { Device.input.group.Back } }
self.key_events.NextPage = { { Device.input.group.PgFwd } }
self.key_events.PrevPage = { { Device.input.group.PgBack } }
end
if Device:isTouchDevice() then
self.ges_events.Swipe = {

@ -216,8 +216,8 @@ describe("FocusManager module", function()
it("alternative key", function()
local focusmanager = FocusManager:new{}
focusmanager.extra_key_events = {
Hold = { {"Sym", "AA"}, doc = "tap and hold the widget", event="Hold" },
HalfFocusUp = { {"Alt", "Up"}, doc = "move focus half columns up", event = "FocusHalfMove", args = {"up"} },
Hold = { { "Sym", "AA" }, event="Hold" },
HalfFocusUp = { { "Alt", "Up" }, event = "FocusHalfMove", args = {"up"} },
}
local m = Input.modifiers
m.Sym = true

@ -39,12 +39,10 @@ local TouchProbe = InputContainer:extend{
}
function TouchProbe:init()
self.ges_events = {
TapProbe = {
GestureRange:new{
ges = "tap",
}
},
self.ges_events.TapProbe = {
GestureRange:new{
ges = "tap",
}
}
self.image_widget = ImageWidget:new{
file = "tools/kobo-touch-probe.png",

@ -129,7 +129,7 @@ Background = InputContainer:new{
key_events = {
OpenDialog = { { "Press" } },
OpenConfirmBox = { { "Del" } },
QuitApplication = { { {"Home","Back"} } }
QuitApplication = { { { "Home", "Back" } } },
},
-- contains a gray rectangular desktop
FrameContainer:new{

Loading…
Cancel
Save