diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index 4917b209a..448a8aae4 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -1,13 +1,14 @@ -local InputContainer = require("ui/widget/container/inputcontainer") -local Geom = require("ui/geometry") -local Input = require("device").input +local ConfirmBox = require("ui/widget/confirmbox") local Device = require("device") -local Screen = Device.screen local Event = require("ui/event") -local UIManager = require("ui/uimanager") +local Geom = require("ui/geometry") +local InputContainer = require("ui/widget/container/inputcontainer") local Math = require("optmath") +local UIManager = require("ui/uimanager") local logger = require("logger") local _ = require("gettext") +local Input = Device.input +local Screen = Device.screen local function copyPageState(page_state) @@ -33,7 +34,7 @@ local ReaderPaging = InputContainer:new{ show_overlap_enable = nil, overlap = Screen:scaleBySize(DOVERLAPPIXELS), - inverse_reading_order = false, + inverse_reading_order = nil, page_flipping_mode = false, bookmark_flipping_mode = false, flip_steps = {0,1,2,5,10,20,50,100} @@ -178,7 +179,12 @@ function ReaderPaging:onReadSettings(config) end self.flipping_zoom_mode = config:readSetting("flipping_zoom_mode") or "page" self.flipping_scroll_mode = config:readSetting("flipping_scroll_mode") or false - self.inverse_reading_order = config:readSetting("inverse_reading_order") or false + self.inverse_reading_order = config:readSetting("inverse_reading_order") + if self.inverse_reading_order == nil and G_reader_settings:has("inverse_reading_order") then + self.inverse_reading_order = G_reader_settings:isTrue("inverse_reading_order") + else + self.inverse_reading_order = false + end end function ReaderPaging:onSaveSettings() @@ -233,13 +239,25 @@ function ReaderPaging:addToMainMenu(menu_items) end, sub_item_table = page_overlap_menu, } - menu_items.read_from_right_to_left = { - text = _("Read from right to left"), + menu_items.invert_page_turn_gestures = { + text = _("Invert page turn taps and swipes"), checked_func = function() return self.inverse_reading_order end, callback = function() self.inverse_reading_order = not self.inverse_reading_order self:setupTapTouchZones() end, + hold_callback = function(touchmenu_instance) + UIManager:show(ConfirmBox:new{ + text = self.inverse_reading_order and _("Enable right to left reading by default?") + or _("Disable right to left reading by default?"), + ok_text = self.inverse_reading_order and _("Enable") + or _("Disable"), + ok_callback = function() + G_reader_settings:saveSetting("inverse_reading_order", self.inverse_reading_order) + if touchmenu_instance then touchmenu_instance:updateItems() end + end, + }) + end, } end diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index e3193a9af..b3a17d8c0 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -38,7 +38,7 @@ local ReaderRolling = InputContainer:new{ old_doc_height = nil, old_page = nil, current_pos = 0, - inverse_reading_order = false, + inverse_reading_order = nil, -- only used for page view mode current_page= nil, xpointer = nil, @@ -188,7 +188,12 @@ function ReaderRolling:onReadSettings(config) if self.show_overlap_enable == nil then self.show_overlap_enable = DSHOWOVERLAP end - self.inverse_reading_order = config:readSetting("inverse_reading_order") or false + self.inverse_reading_order = config:readSetting("inverse_reading_order") + if self.inverse_reading_order == nil and G_reader_settings:has("inverse_reading_order") then + self.inverse_reading_order = G_reader_settings:isTrue("inverse_reading_order") + else + self.inverse_reading_order = false + end -- This self.visible_pages may not be the current nb of visible pages -- as crengine may decide to not ensure that in some conditions. @@ -343,6 +348,27 @@ function ReaderRolling:getLastProgress() end function ReaderRolling:addToMainMenu(menu_items) + --- @fixme Repeated code with ReaderPaging read from left to right. + menu_items.invert_page_turn_gestures = { + text = _("Invert page turn taps and swipes"), + checked_func = function() return self.inverse_reading_order end, + callback = function() + self.inverse_reading_order = not self.inverse_reading_order + self:setupTouchZones() + end, + hold_callback = function(touchmenu_instance) + UIManager:show(ConfirmBox:new{ + text = self.inverse_reading_order and _("Enable right to left reading by default?") + or _("Disable right to left reading by default?"), + ok_text = self.inverse_reading_order and _("Enable") + or _("Disable"), + ok_callback = function() + G_reader_settings:saveSetting("inverse_reading_order", self.inverse_reading_order) + if touchmenu_instance then touchmenu_instance:updateItems() end + end, + }) + end, + } --- @fixme repeated code with page overlap menu for readerpaging -- needs to keep only one copy of the logic as for the DRY principle. -- The difference between the two menus is only the enabled func. diff --git a/frontend/ui/elements/reader_menu_order.lua b/frontend/ui/elements/reader_menu_order.lua index bd0208fd2..78339f956 100644 --- a/frontend/ui/elements/reader_menu_order.lua +++ b/frontend/ui/elements/reader_menu_order.lua @@ -37,7 +37,6 @@ local order = { "highlight_options", }, setting = { - "read_from_right_to_left", -- common settings -- those that don't exist will simply be skipped during menu gen "frontlight", -- if Device:hasFrontlight() @@ -70,6 +69,7 @@ local order = { "enable_back_history", "android_volume_keys", "----------------------------", + "invert_page_turn_gestures", "invert_page_turn_buttons", }, network = {