mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
KeyValuePage: lanscape and portrait items per page (#13377)
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user