From 2a99b014a27234864b9319c3d42b6684b06dd116 Mon Sep 17 00:00:00 2001 From: yparitcher Date: Wed, 15 Jul 2020 18:24:31 -0400 Subject: [PATCH] initial refactor of ReaderGesture into Gestures plugin --- frontend/apps/filemanager/filemanager.lua | 5 - frontend/apps/reader/readerui.lua | 9 -- plugins/gestures.koplugin/_meta.lua | 6 ++ .../gestures.koplugin/main.lua | 92 ++++++++++--------- 4 files changed, 56 insertions(+), 56 deletions(-) create mode 100644 plugins/gestures.koplugin/_meta.lua rename frontend/apps/reader/modules/readergesture.lua => plugins/gestures.koplugin/main.lua (96%) diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index 900d99cc8..b2b4e4f7b 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -29,7 +29,6 @@ local PluginLoader = require("pluginloader") local ReadCollection = require("readcollection") local ReaderDeviceStatus = require("apps/reader/modules/readerdevicestatus") local ReaderDictionary = require("apps/reader/modules/readerdictionary") -local ReaderGesture = require("apps/reader/modules/readergesture") local ReaderUI = require("apps/reader/readerui") local ReaderWikipedia = require("apps/reader/modules/readerwikipedia") local Screenshoter = require("ui/widget/screenshoter") @@ -482,10 +481,6 @@ function FileManager:init() end end - if Device:isTouchDevice() then - table.insert(self, ReaderGesture:new{ ui = self }) - end - if Device:hasWifiToggle() then local NetworkListener = require("ui/network/networklistener") table.insert(self, NetworkListener:new{ ui = self }) diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index f49c78991..6ee85fa40 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -30,7 +30,6 @@ local ReaderCropping = require("apps/reader/modules/readercropping") local ReaderDeviceStatus = require("apps/reader/modules/readerdevicestatus") local ReaderDictionary = require("apps/reader/modules/readerdictionary") local ReaderFont = require("apps/reader/modules/readerfont") -local ReaderGesture = require("apps/reader/modules/readergesture") local ReaderGoto = require("apps/reader/modules/readergoto") local ReaderHinting = require("apps/reader/modules/readerhinting") local ReaderHighlight = require("apps/reader/modules/readerhighlight") @@ -385,14 +384,6 @@ function ReaderUI:init() "at", plugin_module.path) 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 local NetworkListener = require("ui/network/networklistener") diff --git a/plugins/gestures.koplugin/_meta.lua b/plugins/gestures.koplugin/_meta.lua new file mode 100644 index 000000000..a0cd9bc77 --- /dev/null +++ b/plugins/gestures.koplugin/_meta.lua @@ -0,0 +1,6 @@ +local _ = require("gettext") +return { + name = 'gestures', + fullname = _("Gestures"), + description = _([[This plugin allows using gestures.]]), +} diff --git a/frontend/apps/reader/modules/readergesture.lua b/plugins/gestures.koplugin/main.lua similarity index 96% rename from frontend/apps/reader/modules/readergesture.lua rename to plugins/gestures.koplugin/main.lua index 7f3f08b43..d1d6cb032 100644 --- a/frontend/apps/reader/modules/readergesture.lua +++ b/plugins/gestures.koplugin/main.lua @@ -15,7 +15,16 @@ local T = require("ffi/util").template local _ = require("gettext") 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 = { 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.]]) -function ReaderGesture:init() - if not Device:isTouchDevice() then return end +function Gestures:init() self.ignore_hold_corners = G_reader_settings:readSetting("ignore_hold_corners") self.multiswipes_enabled = G_reader_settings:readSetting("multiswipes_enabled") self.is_docless = self.ui == nil or self.ui.document == nil @@ -285,7 +293,7 @@ function ReaderGesture:init() self:initGesture() end -function ReaderGesture:initGesture() +function Gestures:initGesture() local gesture_manager = G_reader_settings:readSetting(self.ges_mode) for gesture, action in pairs(self.default_gesture) do if not gesture_manager[gesture] then @@ -298,7 +306,7 @@ function ReaderGesture:initGesture() G_reader_settings:saveSetting(self.ges_mode, gesture_manager) end -function ReaderGesture:genMultiswipeSubmenu() +function Gestures:genMultiswipeSubmenu() return { text = _("Multiswipe"), sub_item_table = self:buildMultiswipeMenu(), @@ -307,7 +315,7 @@ function ReaderGesture:genMultiswipeSubmenu() } end -function ReaderGesture:addToMainMenu(menu_items) +function Gestures:addToMainMenu(menu_items) local gesture_manager = G_reader_settings:readSetting(self.ges_mode) local actionTextFunc = function(gesture, gesture_name) @@ -465,7 +473,7 @@ function ReaderGesture:addToMainMenu(menu_items) function multiswipe_recorder:onMultiswipe(arg, ges) 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 UIManager:show(multiswipe_recorder) @@ -742,7 +750,7 @@ Default value: %1]]), GestureDetector.SWIPE_INTERVAL/1000), end end -function ReaderGesture:buildMenu(ges, default) +function Gestures:buildMenu(ges, default) local gesture_manager = G_reader_settings:readSetting(self.ges_mode) local menu = { {"nothing", true }, @@ -869,7 +877,7 @@ function ReaderGesture:buildMenu(ges, default) return return_menu end -function ReaderGesture:buildMultiswipeMenu() +function Gestures:buildMultiswipeMenu() local gesture_manager = G_reader_settings:readSetting(self.ges_mode) local menu = {} multiswipes = {} @@ -956,7 +964,7 @@ function ReaderGesture:buildMultiswipeMenu() return menu 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) return { text = text, @@ -982,15 +990,15 @@ local multiswipe_to_arrow = { southeast = "⬊", southwest = "⬋", } -function ReaderGesture:friendlyMultiswipeName(multiswipe) +function Gestures:friendlyMultiswipeName(multiswipe) return multiswipe:gsub("%S+", multiswipe_to_arrow) end -function ReaderGesture:safeMultiswipeName(multiswipe) +function Gestures:safeMultiswipeName(multiswipe) return multiswipe:gsub(" ", "_") end -function ReaderGesture:setupGesture(ges, action) +function Gestures:setupGesture(ges, action) local ges_type local zone local overrides @@ -1304,7 +1312,7 @@ function ReaderGesture:setupGesture(ges, action) 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({ { id = ges, @@ -1315,24 +1323,7 @@ function ReaderGesture:registerGesture(ges, action, ges_type, zone, overrides, d if direction and not direction[gest.direction] then return end 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) - end + return self:multiswipeAction(gest.multiswipe_directions, gest) end return self:gestureAction(action, gest) @@ -1342,7 +1333,7 @@ function ReaderGesture:registerGesture(ges, action, ges_type, zone, overrides, d }) end -function ReaderGesture:gestureAction(action, ges) +function Gestures:gestureAction(action, ges) if action == "ignore" or (ges.ges == "hold" and self.ignore_hold_corners) then return @@ -1510,17 +1501,34 @@ function ReaderGesture:gestureAction(action, ges) return true end -function ReaderGesture:multiswipeAction(multiswipe_directions, ges) - if not self.multiswipes_enabled then return end - local gesture_manager = G_reader_settings:readSetting(self.ges_mode) - local multiswipe_gesture_name = "multiswipe_"..self:safeMultiswipeName(multiswipe_directions) - local action = gesture_manager[multiswipe_gesture_name] - if action and action ~= "nothing" then - return self:gestureAction(action, 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 + local gesture_manager = G_reader_settings:readSetting(self.ges_mode) + local multiswipe_gesture_name = "multiswipe_"..self:safeMultiswipeName(multiswipe_directions) + local action = gesture_manager[multiswipe_gesture_name] + if action and action ~= "nothing" then + return self:gestureAction(action, ges) + end end end -function ReaderGesture:onIgnoreHoldCorners(ignore_hold_corners) +function Gestures:onIgnoreHoldCorners(ignore_hold_corners) if ignore_hold_corners == nil then G_reader_settings:flipNilOrFalse("ignore_hold_corners") else @@ -1530,4 +1538,4 @@ function ReaderGesture:onIgnoreHoldCorners(ignore_hold_corners) return true end -return ReaderGesture +return Gestures