KeyValuePage: lanscape and portrait items per page (#13377)
Some checks are pending
macos / macOS 13 x86-64 🔨15.2 🎯10.15 (push) Waiting to run
macos / macOS 14 ARM64 🔨15.4 🎯11.0 (push) Waiting to run

This commit is contained in:
hius07
2025-03-09 07:45:43 +02:00
committed by GitHub
parent a06be7636a
commit 9f61c230a3
2 changed files with 54 additions and 24 deletions

View File

@@ -2,6 +2,7 @@ local BD = require("ui/bidi")
local CenterContainer = require("ui/widget/container/centercontainer")
local ConfirmBox = require("ui/widget/confirmbox")
local Device = require("device")
local DoubleSpinWidget = require("ui/widget/doublespinwidget")
local InputContainer = require("ui/widget/container/inputcontainer")
local KeyValuePage = require("ui/widget/keyvaluepage")
local PluginLoader = require("pluginloader")
@@ -394,9 +395,8 @@ To:
},
{
text_func = function()
local default_value = KeyValuePage.getDefaultItemsPerPage()
local current_value = G_reader_settings:readSetting("keyvalues_per_page") or default_value
return T(_("Info lists items per page: %1"), current_value)
local nb_items_landscape, nb_items_portrait = KeyValuePage.getCurrentItemsPerPage()
return T(_("Info lists items per page: %1 / %2"), nb_items_portrait, nb_items_landscape)
end,
help_text = _([[This sets the number of items per page in:
- Book information
@@ -405,25 +405,38 @@ To:
- A few other plugins]]),
keep_menu_open = true,
callback = function(touchmenu_instance)
local default_value = KeyValuePage.getDefaultItemsPerPage()
local current_value = G_reader_settings:readSetting("keyvalues_per_page") or default_value
local widget = SpinWidget:new{
value = current_value,
value_min = 10,
value_max = 30,
default_value = default_value,
local nb_items_landscape_default, nb_items_portrait_default = KeyValuePage.getDefaultItemsPerPage()
local nb_items_landscape, nb_items_portrait =
KeyValuePage.getCurrentItemsPerPage(nb_items_landscape_default, nb_items_portrait_default)
local widget = DoubleSpinWidget:new{
title_text = _("Info lists items per page"),
callback = function(spin)
if spin.value == default_value then
-- We can't know if the user has set a value or hit "Use default", but
-- assume that if it is the default, he will prefer to stay with our
-- default if he later changes screen DPI
width_factor = 0.6,
left_text = _("Portrait"),
left_value = nb_items_portrait,
left_min = 10,
left_max = 30,
left_default = nb_items_portrait_default,
right_text = _("Landscape"),
right_value = nb_items_landscape,
right_min = 10,
right_max = 30,
right_default = nb_items_landscape_default,
callback = function(left_value, right_value)
-- We can't know if the user has set a value or hit "Use default", but
-- assume that if it is the default, he will prefer to stay with our
-- default if he later changes screen DPI
if left_value == nb_items_portrait_default then
G_reader_settings:delSetting("keyvalues_per_page")
else
G_reader_settings:saveSetting("keyvalues_per_page", spin.value)
G_reader_settings:saveSetting("keyvalues_per_page", left_value)
end
if right_value == nb_items_landscape_default then
G_reader_settings:delSetting("keyvalues_per_page_landscape")
else
G_reader_settings:saveSetting("keyvalues_per_page_landscape", right_value)
end
touchmenu_instance:updateItems()
end
end,
}
UIManager:show(widget)
end,

View File

@@ -297,15 +297,17 @@ local KeyValuePage = FocusManager:extend{
}
function KeyValuePage:init()
local screen_w = Screen:getWidth()
local screen_h = Screen:getHeight()
self.show_parent = self.show_parent or self
self.kv_pairs = self.kv_pairs or {}
self.dimen = Geom:new{
x = 0,
y = 0,
w = self.width or Screen:getWidth(),
h = self.height or Screen:getHeight(),
w = self.width or screen_w,
h = self.height or screen_h,
}
if self.dimen.w == Screen:getWidth() and self.dimen.h == Screen:getHeight() then
if self.dimen.w == screen_w and self.dimen.h == screen_h then
self.covers_fullscreen = true -- hint for UIManager:_repaint()
end
@@ -466,7 +468,8 @@ function KeyValuePage:init()
- 2*Size.line.thick
-- account for possibly 2 separator lines added
self.items_per_page = G_reader_settings:readSetting("keyvalues_per_page") or self.getDefaultItemsPerPage()
local nb_items_landscape, nb_items_portrait = KeyValuePage.getCurrentItemsPerPage()
self.items_per_page = screen_h < screen_w and nb_items_landscape or nb_items_portrait
if self.single_page and self.items_per_page < #self.kv_pairs then
self.items_per_page = #self.kv_pairs
end
@@ -520,10 +523,24 @@ end
function KeyValuePage.getDefaultItemsPerPage()
-- Get a default according to Screen DPI (roughly following
-- the former implementation building logic)
local screen_w = Screen:getWidth()
local screen_h = Screen:getHeight()
if screen_w > screen_h then
screen_w, screen_h = screen_h, screen_w
end
local default_item_height = Size.item.height_default * 1.5 -- we were adding 1/2 as margin
local nb_items = math.floor(Screen:getHeight() / default_item_height)
nb_items = nb_items - 3 -- account for title and footer heights
return nb_items
local nb_items_landscape = math.floor(screen_w / default_item_height) - 3 -- account for title and footer heights
local nb_items_portrait = math.floor(screen_h / default_item_height) - 3
return nb_items_landscape, nb_items_portrait
end
function KeyValuePage.getCurrentItemsPerPage(nb_items_landscape_default, nb_items_portrait_default)
if nb_items_landscape_default == nil then
nb_items_landscape_default, nb_items_portrait_default = KeyValuePage.getDefaultItemsPerPage()
end
local nb_items_landscape = G_reader_settings:readSetting("keyvalues_per_page_landscape") or nb_items_landscape_default
local nb_items_portrait = G_reader_settings:readSetting("keyvalues_per_page") or nb_items_portrait_default
return nb_items_landscape, nb_items_portrait
end
function KeyValuePage:nextPage()