[UX] Add ToC/Bookmarks settings

- Menu widget: allow specifying the number of items per
  page and the item font size, so we can use other values
  than the default File browser ones
- Menu: fix setDirty when a border is used
- ToC: add item per page and font size settings, make
  Alternative ToC more visible (was previously
  available on long-press on Table of contents)
- Bookmarks: add item per page, font size, size reduction
- Progress bars (Skim widget and footer): allow selecting
  ToC depths from which ticks are made.
This commit is contained in:
poire-z
2021-02-04 17:43:52 +01:00
parent 316107a1cb
commit 3b89e32069
13 changed files with 353 additions and 83 deletions

View File

@@ -19,6 +19,7 @@ local T = require("ffi/util").template
local ReaderBookmark = InputContainer:new{
bm_menu_title = _("Bookmarks"),
bbm_menu_title = _("Bookmark browsing mode"),
bookmarks_items_per_page_default = 14,
bookmarks = nil,
}
@@ -30,6 +31,21 @@ function ReaderBookmark:init()
doc = "show bookmarks" },
}
end
if not G_reader_settings:readSetting("bookmarks_items_per_page") then
-- The Bookmarks items per page and items' font size can now be
-- configured. Previously, the ones set for the file browser
-- were used. Initialize them from these ones.
local items_per_page = G_reader_settings:readSetting("items_per_page")
or self.bookmarks_items_per_page_default
G_reader_settings:saveSetting("bookmarks_items_per_page", items_per_page)
local items_font_size = G_reader_settings:readSetting("items_font_size")
if items_font_size and items_font_size ~= Menu.getItemFontSize(items_per_page) then
-- Keep the user items font size if it's not the default for items_per_page
G_reader_settings:saveSetting("bookmarks_items_font_size", items_font_size)
end
end
self.ui.menu:registerToMainMenu(self)
end
@@ -59,6 +75,58 @@ function ReaderBookmark:addToMainMenu(menu_items)
end,
}
end
menu_items.bookmarks_items_per_page = {
text = _("Bookmarks per page"),
keep_menu_open = true,
callback = function()
local SpinWidget = require("ui/widget/spinwidget")
local curr_perpage = G_reader_settings:readSetting("bookmarks_items_per_page") or self.bookmarks_items_per_page_default
local items = SpinWidget:new{
width = math.floor(Screen:getWidth() * 0.6),
value = curr_perpage,
value_min = 6,
value_max = 24,
default_value = self.bookmarks_items_per_page_default,
title_text = _("Bookmarks per page"),
callback = function(spin)
G_reader_settings:saveSetting("bookmarks_items_per_page", spin.value)
end
}
UIManager:show(items)
end
}
menu_items.bookmarks_items_font_size = {
text = _("Bookmark font size"),
keep_menu_open = true,
callback = function()
local SpinWidget = require("ui/widget/spinwidget")
local curr_perpage = G_reader_settings:readSetting("bookmarks_items_per_page") or self.bookmarks_items_per_page_default
local default_font_size = Menu.getItemFontSize(curr_perpage)
local curr_font_size = G_reader_settings:readSetting("bookmarks_items_font_size") or default_font_size
local items_font = SpinWidget:new{
width = math.floor(Screen:getWidth() * 0.6),
value = curr_font_size,
value_min = 10,
value_max = 72,
default_value = default_font_size,
title_text = _("Bookmark font size"),
callback = function(spin)
G_reader_settings:saveSetting("bookmarks_items_font_size", spin.value)
end
}
UIManager:show(items_font)
end,
}
menu_items.bookmarks_items_show_more_text = {
text = _("Shrink bookmark font size to fit more text"),
keep_menu_open = true,
checked_func = function()
return G_reader_settings:isTrue("bookmarks_items_multilines_show_more_text")
end,
callback = function()
G_reader_settings:flipNilOrFalse("bookmarks_items_multilines_show_more_text")
end
}
end
function ReaderBookmark:enableBookmarkBrowsingMode()
@@ -271,6 +339,10 @@ function ReaderBookmark:onShowBookmark()
end
end
local items_per_page = G_reader_settings:readSetting("bookmarks_items_per_page") or self.bookmarks_items_per_page_default
local items_font_size = G_reader_settings:readSetting("bookmarks_items_font_size") or Menu.getItemFontSize(items_per_page)
local multilines_show_more_text = G_reader_settings:isTrue("bookmarks_items_multilines_show_more_text")
local bm_menu = Menu:new{
title = _("Bookmarks"),
item_table = self.bookmarks,
@@ -279,7 +351,9 @@ function ReaderBookmark:onShowBookmark()
width = Screen:getWidth(),
height = Screen:getHeight(),
cface = Font:getFace("x_smallinfofont"),
perpage = G_reader_settings:readSetting("items_per_page") or 14,
items_per_page = items_per_page,
items_font_size = items_font_size,
multilines_show_more_text = multilines_show_more_text,
line_color = require("ffi/blitbuffer").COLOR_WHITE,
on_close_ges = {
GestureRange:new{