mirror of
https://github.com/koreader/koreader
synced 2024-11-18 03:25:46 +00:00
f4aca567ef
Re #10743 Note that this only makes faulty switches slightly less annoying: for a stuck switch, instead of a string of page turns, you'll get a single missed page turn on the tap that actually releases the stuck contact...
188 lines
7.6 KiB
Lua
188 lines
7.6 KiB
Lua
local Device = require("device")
|
|
local Event = require("ui/event")
|
|
local ReaderUI = require("apps/reader/readerui")
|
|
local UIManager = require("ui/uimanager")
|
|
local _ = require("gettext")
|
|
local T = require("ffi/util").template
|
|
|
|
local page_turns_tap_zones_sub_items = {} -- build the Tap zones submenu
|
|
local tap_zones = {
|
|
default = _("Default"),
|
|
left_right = _("Left/right"),
|
|
top_bottom = _("Top/bottom"),
|
|
}
|
|
local function genTapZonesMenu(tap_zones_type)
|
|
table.insert(page_turns_tap_zones_sub_items, {
|
|
text = tap_zones[tap_zones_type],
|
|
checked_func = function()
|
|
return G_reader_settings:readSetting("page_turns_tap_zones", "default") == tap_zones_type
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:saveSetting("page_turns_tap_zones", tap_zones_type)
|
|
ReaderUI.instance.view:setupTouchZones()
|
|
end,
|
|
})
|
|
end
|
|
genTapZonesMenu("default")
|
|
genTapZonesMenu("left_right")
|
|
genTapZonesMenu("top_bottom")
|
|
|
|
local default_size_b = math.floor(G_defaults:readSetting("DTAP_ZONE_BACKWARD").w * 100)
|
|
local default_size_f = math.floor(G_defaults:readSetting("DTAP_ZONE_FORWARD").w * 100)
|
|
local function getTapZonesSize()
|
|
local size_b, size_f
|
|
if G_reader_settings:has("page_turns_tap_zone_forward_size_ratio") then
|
|
size_f = math.floor(G_reader_settings:readSetting("page_turns_tap_zone_forward_size_ratio") * 100)
|
|
if G_reader_settings:has("page_turns_tap_zone_backward_size_ratio") then
|
|
size_b = math.floor(G_reader_settings:readSetting("page_turns_tap_zone_backward_size_ratio") * 100)
|
|
else
|
|
size_b = 100 - size_f
|
|
end
|
|
else
|
|
size_b = default_size_b
|
|
size_f = default_size_f
|
|
end
|
|
return size_b, size_f
|
|
end
|
|
table.insert(page_turns_tap_zones_sub_items, {
|
|
text_func = function()
|
|
return T(_("Backward / forward tap zone size: %1 % / %2 %"), getTapZonesSize())
|
|
end,
|
|
enabled_func = function()
|
|
return G_reader_settings:readSetting("page_turns_tap_zones", "default") ~= "default"
|
|
end,
|
|
keep_menu_open = true,
|
|
callback = function(touchmenu_instance)
|
|
local is_left_right = G_reader_settings:readSetting("page_turns_tap_zones") == "left_right"
|
|
local size_b, size_f = getTapZonesSize()
|
|
UIManager:show(require("ui/widget/doublespinwidget"):new{
|
|
title_text = is_left_right and _("Tap zone width") or _("Tap zone height"),
|
|
info_text = is_left_right and _("Percentage of screen width") or _("Percentage of screen height"),
|
|
left_text = _("Backward"),
|
|
left_value = size_b,
|
|
left_min = 0,
|
|
left_max = 100 - size_f,
|
|
left_default = default_size_b,
|
|
left_hold_step = 5,
|
|
right_text = _("Forward"),
|
|
right_value = size_f,
|
|
right_min = 0,
|
|
right_max = 100,
|
|
right_default = default_size_f,
|
|
right_hold_step = 5,
|
|
unit = "%",
|
|
callback = function(value_b, value_f)
|
|
if value_b + value_f > 100 then
|
|
value_b = 100 - value_f
|
|
end
|
|
G_reader_settings:saveSetting("page_turns_tap_zone_backward_size_ratio", value_b * (1/100))
|
|
G_reader_settings:saveSetting("page_turns_tap_zone_forward_size_ratio", value_f * (1/100))
|
|
ReaderUI.instance.view:setupTouchZones()
|
|
if touchmenu_instance then touchmenu_instance:updateItems() end
|
|
end,
|
|
})
|
|
end,
|
|
})
|
|
|
|
local PageTurns = {
|
|
text = _("Page turns"),
|
|
sub_item_table = {
|
|
{
|
|
text = _("With taps"),
|
|
checked_func = function()
|
|
return G_reader_settings:nilOrFalse("page_turns_disable_tap")
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:flipNilOrFalse("page_turns_disable_tap")
|
|
end,
|
|
},
|
|
{
|
|
text = _("With swipes"),
|
|
checked_func = function()
|
|
return G_reader_settings:nilOrFalse("page_turns_disable_swipe")
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:flipNilOrFalse("page_turns_disable_swipe")
|
|
end,
|
|
},
|
|
{
|
|
text_func = function()
|
|
local tap_zones_type = G_reader_settings:readSetting("page_turns_tap_zones", "default")
|
|
return T(_("Tap zones: %1"), tap_zones[tap_zones_type]:lower())
|
|
end,
|
|
enabled_func = function()
|
|
return G_reader_settings:nilOrFalse("page_turns_disable_tap")
|
|
end,
|
|
sub_item_table = page_turns_tap_zones_sub_items,
|
|
separator = true,
|
|
},
|
|
{
|
|
text_func = function()
|
|
local text = _("Invert page turn taps and swipes")
|
|
if G_reader_settings:isTrue("inverse_reading_order") then
|
|
text = text .. " ★"
|
|
end
|
|
return text
|
|
end,
|
|
checked_func = function()
|
|
return ReaderUI.instance.view.inverse_reading_order
|
|
end,
|
|
callback = function()
|
|
UIManager:broadcastEvent(Event:new("ToggleReadingOrder"))
|
|
end,
|
|
hold_callback = function(touchmenu_instance)
|
|
local inverse_reading_order = G_reader_settings:isTrue("inverse_reading_order")
|
|
local MultiConfirmBox = require("ui/widget/multiconfirmbox")
|
|
UIManager:show(MultiConfirmBox:new{
|
|
text = inverse_reading_order and _("The default (★) for newly opened books is right-to-left (RTL) page turning.\n\nWould you like to change it?")
|
|
or _("The default (★) for newly opened books is left-to-right (LTR) page turning.\n\nWould you like to change it?"),
|
|
choice1_text_func = function()
|
|
return inverse_reading_order and _("LTR") or _("LTR (★)")
|
|
end,
|
|
choice1_callback = function()
|
|
G_reader_settings:makeFalse("inverse_reading_order")
|
|
if touchmenu_instance then touchmenu_instance:updateItems() end
|
|
end,
|
|
choice2_text_func = function()
|
|
return inverse_reading_order and _("RTL (★)") or _("RTL")
|
|
end,
|
|
choice2_callback = function()
|
|
G_reader_settings:makeTrue("inverse_reading_order")
|
|
if touchmenu_instance then touchmenu_instance:updateItems() end
|
|
end,
|
|
})
|
|
end,
|
|
},
|
|
{
|
|
text = _("Also invert document-related dialogs"),
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("invert_ui_layout_mirroring")
|
|
end,
|
|
enabled_func = function()
|
|
return ReaderUI.instance.view.inverse_reading_order
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:flipNilOrFalse("invert_ui_layout_mirroring")
|
|
end,
|
|
help_text = _([[
|
|
When enabled the UI direction for the Table of Contents, Book Map, and Page Browser dialogs will follow the page turn direction instead of the default UI direction.]]),
|
|
separator = true,
|
|
}
|
|
}
|
|
}
|
|
|
|
if Device:canDoSwipeAnimation() then
|
|
table.insert(PageTurns.sub_item_table, {
|
|
text = _("Page turn animations"),
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("swipe_animations")
|
|
end,
|
|
callback = function()
|
|
UIManager:broadcastEvent(Event:new("TogglePageChangeAnimation"))
|
|
end,
|
|
separator = true,
|
|
})
|
|
end
|
|
|
|
return PageTurns
|