initial refactor of ReaderGesture into Gestures plugin

reviewable/pr6467/r1
yparitcher 4 years ago
parent a6763465b4
commit 2a99b014a2

@ -29,7 +29,6 @@ local PluginLoader = require("pluginloader")
local ReadCollection = require("readcollection") local ReadCollection = require("readcollection")
local ReaderDeviceStatus = require("apps/reader/modules/readerdevicestatus") local ReaderDeviceStatus = require("apps/reader/modules/readerdevicestatus")
local ReaderDictionary = require("apps/reader/modules/readerdictionary") local ReaderDictionary = require("apps/reader/modules/readerdictionary")
local ReaderGesture = require("apps/reader/modules/readergesture")
local ReaderUI = require("apps/reader/readerui") local ReaderUI = require("apps/reader/readerui")
local ReaderWikipedia = require("apps/reader/modules/readerwikipedia") local ReaderWikipedia = require("apps/reader/modules/readerwikipedia")
local Screenshoter = require("ui/widget/screenshoter") local Screenshoter = require("ui/widget/screenshoter")
@ -482,10 +481,6 @@ function FileManager:init()
end end
end end
if Device:isTouchDevice() then
table.insert(self, ReaderGesture:new{ ui = self })
end
if Device:hasWifiToggle() then if Device:hasWifiToggle() then
local NetworkListener = require("ui/network/networklistener") local NetworkListener = require("ui/network/networklistener")
table.insert(self, NetworkListener:new{ ui = self }) table.insert(self, NetworkListener:new{ ui = self })

@ -30,7 +30,6 @@ local ReaderCropping = require("apps/reader/modules/readercropping")
local ReaderDeviceStatus = require("apps/reader/modules/readerdevicestatus") local ReaderDeviceStatus = require("apps/reader/modules/readerdevicestatus")
local ReaderDictionary = require("apps/reader/modules/readerdictionary") local ReaderDictionary = require("apps/reader/modules/readerdictionary")
local ReaderFont = require("apps/reader/modules/readerfont") local ReaderFont = require("apps/reader/modules/readerfont")
local ReaderGesture = require("apps/reader/modules/readergesture")
local ReaderGoto = require("apps/reader/modules/readergoto") local ReaderGoto = require("apps/reader/modules/readergoto")
local ReaderHinting = require("apps/reader/modules/readerhinting") local ReaderHinting = require("apps/reader/modules/readerhinting")
local ReaderHighlight = require("apps/reader/modules/readerhighlight") local ReaderHighlight = require("apps/reader/modules/readerhighlight")
@ -385,14 +384,6 @@ function ReaderUI:init()
"at", plugin_module.path) "at", plugin_module.path)
end end
end end
if Device:isTouchDevice() then
-- gesture manager
self:registerModule("gesture", ReaderGesture:new {
document = self.document,
view = self.view,
ui = self,
})
end
if Device:hasWifiToggle() then if Device:hasWifiToggle() then
local NetworkListener = require("ui/network/networklistener") local NetworkListener = require("ui/network/networklistener")

@ -0,0 +1,6 @@
local _ = require("gettext")
return {
name = 'gestures',
fullname = _("Gestures"),
description = _([[This plugin allows using gestures.]]),
}

@ -15,7 +15,16 @@ local T = require("ffi/util").template
local _ = require("gettext") local _ = require("gettext")
local logger = require("logger") local logger = require("logger")
local ReaderGesture = InputContainer:new{} if not Device:isTouchDevice() then
return { disabled = true, }
end
local Gestures = InputContainer:new{
name = "gestures",
gestures_file = DataStorage:getSettingsDir() .. "/gestures.lua",
gestures = nil,
data = nil,
}
local action_strings = { local action_strings = {
nothing = _("Nothing"), nothing = _("Nothing"),
@ -167,8 +176,7 @@ Multiswipes allow you to perform complex gestures built up out of multiple swipe
These advanced gestures consist of either straight swipes or diagonal swipes. To ensure accuracy, they can't be mixed.]]) These advanced gestures consist of either straight swipes or diagonal swipes. To ensure accuracy, they can't be mixed.]])
function ReaderGesture:init() function Gestures:init()
if not Device:isTouchDevice() then return end
self.ignore_hold_corners = G_reader_settings:readSetting("ignore_hold_corners") self.ignore_hold_corners = G_reader_settings:readSetting("ignore_hold_corners")
self.multiswipes_enabled = G_reader_settings:readSetting("multiswipes_enabled") self.multiswipes_enabled = G_reader_settings:readSetting("multiswipes_enabled")
self.is_docless = self.ui == nil or self.ui.document == nil self.is_docless = self.ui == nil or self.ui.document == nil
@ -285,7 +293,7 @@ function ReaderGesture:init()
self:initGesture() self:initGesture()
end end
function ReaderGesture:initGesture() function Gestures:initGesture()
local gesture_manager = G_reader_settings:readSetting(self.ges_mode) local gesture_manager = G_reader_settings:readSetting(self.ges_mode)
for gesture, action in pairs(self.default_gesture) do for gesture, action in pairs(self.default_gesture) do
if not gesture_manager[gesture] then if not gesture_manager[gesture] then
@ -298,7 +306,7 @@ function ReaderGesture:initGesture()
G_reader_settings:saveSetting(self.ges_mode, gesture_manager) G_reader_settings:saveSetting(self.ges_mode, gesture_manager)
end end
function ReaderGesture:genMultiswipeSubmenu() function Gestures:genMultiswipeSubmenu()
return { return {
text = _("Multiswipe"), text = _("Multiswipe"),
sub_item_table = self:buildMultiswipeMenu(), sub_item_table = self:buildMultiswipeMenu(),
@ -307,7 +315,7 @@ function ReaderGesture:genMultiswipeSubmenu()
} }
end end
function ReaderGesture:addToMainMenu(menu_items) function Gestures:addToMainMenu(menu_items)
local gesture_manager = G_reader_settings:readSetting(self.ges_mode) local gesture_manager = G_reader_settings:readSetting(self.ges_mode)
local actionTextFunc = function(gesture, gesture_name) local actionTextFunc = function(gesture, gesture_name)
@ -465,7 +473,7 @@ function ReaderGesture:addToMainMenu(menu_items)
function multiswipe_recorder:onMultiswipe(arg, ges) function multiswipe_recorder:onMultiswipe(arg, ges)
multiswipe_recorder._raw_multiswipe = ges.multiswipe_directions multiswipe_recorder._raw_multiswipe = ges.multiswipe_directions
multiswipe_recorder:setInputText(ReaderGesture:friendlyMultiswipeName(multiswipe_recorder._raw_multiswipe)) multiswipe_recorder:setInputText(Gestures:friendlyMultiswipeName(multiswipe_recorder._raw_multiswipe))
end end
UIManager:show(multiswipe_recorder) UIManager:show(multiswipe_recorder)
@ -742,7 +750,7 @@ Default value: %1]]), GestureDetector.SWIPE_INTERVAL/1000),
end end
end end
function ReaderGesture:buildMenu(ges, default) function Gestures:buildMenu(ges, default)
local gesture_manager = G_reader_settings:readSetting(self.ges_mode) local gesture_manager = G_reader_settings:readSetting(self.ges_mode)
local menu = { local menu = {
{"nothing", true }, {"nothing", true },
@ -869,7 +877,7 @@ function ReaderGesture:buildMenu(ges, default)
return return_menu return return_menu
end end
function ReaderGesture:buildMultiswipeMenu() function Gestures:buildMultiswipeMenu()
local gesture_manager = G_reader_settings:readSetting(self.ges_mode) local gesture_manager = G_reader_settings:readSetting(self.ges_mode)
local menu = {} local menu = {}
multiswipes = {} multiswipes = {}
@ -956,7 +964,7 @@ function ReaderGesture:buildMultiswipeMenu()
return menu return menu
end end
function ReaderGesture:createSubMenu(text, action, ges, separator) function Gestures:createSubMenu(text, action, ges, separator)
local gesture_manager = G_reader_settings:readSetting(self.ges_mode) local gesture_manager = G_reader_settings:readSetting(self.ges_mode)
return { return {
text = text, text = text,
@ -982,15 +990,15 @@ local multiswipe_to_arrow = {
southeast = "", southeast = "",
southwest = "", southwest = "",
} }
function ReaderGesture:friendlyMultiswipeName(multiswipe) function Gestures:friendlyMultiswipeName(multiswipe)
return multiswipe:gsub("%S+", multiswipe_to_arrow) return multiswipe:gsub("%S+", multiswipe_to_arrow)
end end
function ReaderGesture:safeMultiswipeName(multiswipe) function Gestures:safeMultiswipeName(multiswipe)
return multiswipe:gsub(" ", "_") return multiswipe:gsub(" ", "_")
end end
function ReaderGesture:setupGesture(ges, action) function Gestures:setupGesture(ges, action)
local ges_type local ges_type
local zone local zone
local overrides local overrides
@ -1304,7 +1312,7 @@ function ReaderGesture:setupGesture(ges, action)
end end
end end
function ReaderGesture:registerGesture(ges, action, ges_type, zone, overrides, direction, distance) function Gestures:registerGesture(ges, action, ges_type, zone, overrides, direction, distance)
self.ui:registerTouchZones({ self.ui:registerTouchZones({
{ {
id = ges, id = ges,
@ -1315,25 +1323,8 @@ function ReaderGesture:registerGesture(ges, action, ges_type, zone, overrides, d
if direction and not direction[gest.direction] then return end if direction and not direction[gest.direction] then return end
if ges == "multiswipe" then if ges == "multiswipe" then
if self.multiswipes_enabled == nil then
UIManager:show(ConfirmBox:new{
text = _("You have just performed your first multiswipe gesture.") .."\n\n".. multiswipes_info_text,
ok_text = _("Turn on"),
ok_callback = function()
G_reader_settings:saveSetting("multiswipes_enabled", true)
self.multiswipes_enabled = true
end,
cancel_text = _("Turn off"),
cancel_callback = function()
G_reader_settings:saveSetting("multiswipes_enabled", false)
self.multiswipes_enabled = false
end,
})
return
else
return self:multiswipeAction(gest.multiswipe_directions, gest) return self:multiswipeAction(gest.multiswipe_directions, gest)
end end
end
return self:gestureAction(action, gest) return self:gestureAction(action, gest)
end, end,
@ -1342,7 +1333,7 @@ function ReaderGesture:registerGesture(ges, action, ges_type, zone, overrides, d
}) })
end end
function ReaderGesture:gestureAction(action, ges) function Gestures:gestureAction(action, ges)
if action == "ignore" if action == "ignore"
or (ges.ges == "hold" and self.ignore_hold_corners) then or (ges.ges == "hold" and self.ignore_hold_corners) then
return return
@ -1510,7 +1501,23 @@ function ReaderGesture:gestureAction(action, ges)
return true return true
end end
function ReaderGesture:multiswipeAction(multiswipe_directions, ges) function Gestures:multiswipeAction(multiswipe_directions, ges)
if self.multiswipes_enabled == nil then
UIManager:show(ConfirmBox:new{
text = _("You have just performed your first multiswipe gesture.") .."\n\n".. multiswipes_info_text,
ok_text = _("Turn on"),
ok_callback = function()
G_reader_settings:saveSetting("multiswipes_enabled", true)
self.multiswipes_enabled = true
end,
cancel_text = _("Turn off"),
cancel_callback = function()
G_reader_settings:saveSetting("multiswipes_enabled", false)
self.multiswipes_enabled = false
end,
})
return
else
if not self.multiswipes_enabled then return end if not self.multiswipes_enabled then return end
local gesture_manager = G_reader_settings:readSetting(self.ges_mode) local gesture_manager = G_reader_settings:readSetting(self.ges_mode)
local multiswipe_gesture_name = "multiswipe_"..self:safeMultiswipeName(multiswipe_directions) local multiswipe_gesture_name = "multiswipe_"..self:safeMultiswipeName(multiswipe_directions)
@ -1519,8 +1526,9 @@ function ReaderGesture:multiswipeAction(multiswipe_directions, ges)
return self:gestureAction(action, ges) return self:gestureAction(action, ges)
end end
end end
end
function ReaderGesture:onIgnoreHoldCorners(ignore_hold_corners) function Gestures:onIgnoreHoldCorners(ignore_hold_corners)
if ignore_hold_corners == nil then if ignore_hold_corners == nil then
G_reader_settings:flipNilOrFalse("ignore_hold_corners") G_reader_settings:flipNilOrFalse("ignore_hold_corners")
else else
@ -1530,4 +1538,4 @@ function ReaderGesture:onIgnoreHoldCorners(ignore_hold_corners)
return true return true
end end
return ReaderGesture return Gestures
Loading…
Cancel
Save