[UX] Treat inverse_reading_order as a proper setting (#5284)

This is supported by ReaderPaging and ReaderRolling, but the menu entry was only shown in ReaderPaging.

Hold now sets the global default.

Fixes <https://github.com/koreader/koreader/issues/4983>.
Fixes <https://github.com/koreader/koreader/issues/4089>.
pull/5285/head
Frans de Jonge 5 years ago committed by GitHub
parent 469a277126
commit ac16c8d547
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,13 +1,14 @@
local InputContainer = require("ui/widget/container/inputcontainer") local ConfirmBox = require("ui/widget/confirmbox")
local Geom = require("ui/geometry")
local Input = require("device").input
local Device = require("device") local Device = require("device")
local Screen = Device.screen
local Event = require("ui/event") 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 Math = require("optmath")
local UIManager = require("ui/uimanager")
local logger = require("logger") local logger = require("logger")
local _ = require("gettext") local _ = require("gettext")
local Input = Device.input
local Screen = Device.screen
local function copyPageState(page_state) local function copyPageState(page_state)
@ -33,7 +34,7 @@ local ReaderPaging = InputContainer:new{
show_overlap_enable = nil, show_overlap_enable = nil,
overlap = Screen:scaleBySize(DOVERLAPPIXELS), overlap = Screen:scaleBySize(DOVERLAPPIXELS),
inverse_reading_order = false, inverse_reading_order = nil,
page_flipping_mode = false, page_flipping_mode = false,
bookmark_flipping_mode = false, bookmark_flipping_mode = false,
flip_steps = {0,1,2,5,10,20,50,100} flip_steps = {0,1,2,5,10,20,50,100}
@ -178,7 +179,12 @@ function ReaderPaging:onReadSettings(config)
end end
self.flipping_zoom_mode = config:readSetting("flipping_zoom_mode") or "page" self.flipping_zoom_mode = config:readSetting("flipping_zoom_mode") or "page"
self.flipping_scroll_mode = config:readSetting("flipping_scroll_mode") or false 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 end
function ReaderPaging:onSaveSettings() function ReaderPaging:onSaveSettings()
@ -233,13 +239,25 @@ function ReaderPaging:addToMainMenu(menu_items)
end, end,
sub_item_table = page_overlap_menu, sub_item_table = page_overlap_menu,
} }
menu_items.read_from_right_to_left = { menu_items.invert_page_turn_gestures = {
text = _("Read from right to left"), text = _("Invert page turn taps and swipes"),
checked_func = function() return self.inverse_reading_order end, checked_func = function() return self.inverse_reading_order end,
callback = function() callback = function()
self.inverse_reading_order = not self.inverse_reading_order self.inverse_reading_order = not self.inverse_reading_order
self:setupTapTouchZones() self:setupTapTouchZones()
end, 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 end

@ -38,7 +38,7 @@ local ReaderRolling = InputContainer:new{
old_doc_height = nil, old_doc_height = nil,
old_page = nil, old_page = nil,
current_pos = 0, current_pos = 0,
inverse_reading_order = false, inverse_reading_order = nil,
-- only used for page view mode -- only used for page view mode
current_page= nil, current_page= nil,
xpointer = nil, xpointer = nil,
@ -188,7 +188,12 @@ function ReaderRolling:onReadSettings(config)
if self.show_overlap_enable == nil then if self.show_overlap_enable == nil then
self.show_overlap_enable = DSHOWOVERLAP self.show_overlap_enable = DSHOWOVERLAP
end 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 -- This self.visible_pages may not be the current nb of visible pages
-- as crengine may decide to not ensure that in some conditions. -- as crengine may decide to not ensure that in some conditions.
@ -343,6 +348,27 @@ function ReaderRolling:getLastProgress()
end end
function ReaderRolling:addToMainMenu(menu_items) 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 --- @fixme repeated code with page overlap menu for readerpaging
-- needs to keep only one copy of the logic as for the DRY principle. -- 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. -- The difference between the two menus is only the enabled func.

@ -37,7 +37,6 @@ local order = {
"highlight_options", "highlight_options",
}, },
setting = { setting = {
"read_from_right_to_left",
-- common settings -- common settings
-- those that don't exist will simply be skipped during menu gen -- those that don't exist will simply be skipped during menu gen
"frontlight", -- if Device:hasFrontlight() "frontlight", -- if Device:hasFrontlight()
@ -70,6 +69,7 @@ local order = {
"enable_back_history", "enable_back_history",
"android_volume_keys", "android_volume_keys",
"----------------------------", "----------------------------",
"invert_page_turn_gestures",
"invert_page_turn_buttons", "invert_page_turn_buttons",
}, },
network = { network = {

Loading…
Cancel
Save