File browser: Settings submenu reordering (#8000)

reviewable/pr8019/r1
hius07 3 years ago committed by GitHub
parent d9cc3af220
commit 2ab31a9a36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -136,12 +136,6 @@ function FileManagerMenu:onOpenLastDoc()
end end
function FileManagerMenu:setUpdateItemTable() function FileManagerMenu:setUpdateItemTable()
for _, widget in pairs(self.registered_widgets) do
local ok, err = pcall(widget.addToMainMenu, widget, self.menu_items)
if not ok then
logger.err("failed to register widget", widget.name, err)
end
end
-- setting tab -- setting tab
self.menu_items.filebrowser_settings = { self.menu_items.filebrowser_settings = {
@ -159,131 +153,186 @@ function FileManagerMenu:setUpdateItemTable()
separator = true, separator = true,
}, },
{ {
text = _("Items per page"), text = _("Classic mode settings"),
help_text = _([[This sets the number of items per page in: sub_item_table = {
{
text = _("Items per page"),
help_text = _([[This sets the number of items per page in:
- File browser, history and favorites in 'classic' display mode - File browser, history and favorites in 'classic' display mode
- Search results and folder shortcuts - Search results and folder shortcuts
- File and directory selection - File and folder selection
- Calibre and OPDS browsers/search results]]), - Calibre and OPDS browsers/search results]]),
keep_menu_open = true, callback = function()
callback = function() local SpinWidget = require("ui/widget/spinwidget")
local SpinWidget = require("ui/widget/spinwidget") local Menu = require("ui/widget/menu")
local Menu = require("ui/widget/menu") local default_perpage = Menu.items_per_page_default
local default_perpage = Menu.items_per_page_default local curr_perpage = G_reader_settings:readSetting("items_per_page") or default_perpage
local curr_perpage = G_reader_settings:readSetting("items_per_page") or default_perpage local items = SpinWidget:new{
local items = SpinWidget:new{ width = math.floor(Screen:getWidth() * 0.6),
width = math.floor(Screen:getWidth() * 0.6), value = curr_perpage,
value = curr_perpage, value_min = 6,
value_min = 6, value_max = 24,
value_max = 24, default_value = default_perpage,
default_value = default_perpage, title_text = _("Items per page"),
title_text = _("Items per page"), keep_shown_on_apply = true,
keep_shown_on_apply = true, callback = function(spin)
callback = function(spin) G_reader_settings:saveSetting("items_per_page", spin.value)
G_reader_settings:saveSetting("items_per_page", spin.value) self.ui:onRefresh()
end
}
UIManager:show(items)
end,
},
{
text = _("Item font size"),
callback = function()
local SpinWidget = require("ui/widget/spinwidget")
local Menu = require("ui/widget/menu")
local curr_perpage = G_reader_settings:readSetting("items_per_page") or Menu.items_per_page_default
local default_font_size = Menu.getItemFontSize(curr_perpage)
local curr_font_size = G_reader_settings:readSetting("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,
keep_shown_on_apply = true,
title_text = _("Item font size"),
callback = function(spin)
if spin.value == default_font_size then
-- We can't know if the user has set a size or hit "Use default", but
-- assume that if it is the default font size, he will prefer to have
-- our default font size if he later updates per-page
G_reader_settings:delSetting("items_font_size")
else
G_reader_settings:saveSetting("items_font_size", spin.value)
end
self.ui:onRefresh()
end
}
UIManager:show(items_font)
end,
},
{
text = _("Shrink item font size to fit more text"),
checked_func = function()
return G_reader_settings:isTrue("items_multilines_show_more_text")
end,
callback = function()
G_reader_settings:flipNilOrFalse("items_multilines_show_more_text")
self.ui:onRefresh() self.ui:onRefresh()
end end,
} separator = true,
UIManager:show(items) },
end, {
}, text = _("Show opened files in bold"),
{ checked_func = function()
text = _("Item font size"), return G_reader_settings:readSetting("show_file_in_bold") == "opened"
keep_menu_open = true, end,
callback = function() callback = function()
local SpinWidget = require("ui/widget/spinwidget") if G_reader_settings:readSetting("show_file_in_bold") == "opened" then
local Menu = require("ui/widget/menu") G_reader_settings:saveSetting("show_file_in_bold", false)
local curr_perpage = G_reader_settings:readSetting("items_per_page") or Menu.items_per_page_default
local default_font_size = Menu.getItemFontSize(curr_perpage)
local curr_font_size = G_reader_settings:readSetting("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,
keep_shown_on_apply = true,
title_text = _("Item font size"),
callback = function(spin)
if spin.value == default_font_size then
-- We can't know if the user has set a size or hit "Use default", but
-- assume that if it is the default font size, he will prefer to have
-- our default font size if he later updates per-page
G_reader_settings:delSetting("items_font_size")
else else
G_reader_settings:saveSetting("items_font_size", spin.value) G_reader_settings:saveSetting("show_file_in_bold", "opened")
end end
self.ui:onRefresh() self.ui:onRefresh()
end end,
} },
UIManager:show(items_font) {
end, text = _("Show new (not yet opened) files in bold"),
}, checked_func = function()
{ return G_reader_settings:hasNot("show_file_in_bold")
text = _("Shrink item font size to fit more text"), end,
keep_menu_open = true, callback = function()
checked_func = function() if G_reader_settings:hasNot("show_file_in_bold") then
return G_reader_settings:isTrue("items_multilines_show_more_text") G_reader_settings:saveSetting("show_file_in_bold", false)
end, else
callback = function() G_reader_settings:delSetting("show_file_in_bold")
G_reader_settings:flipNilOrFalse("items_multilines_show_more_text") end
self.ui:onRefresh() self.ui:onRefresh()
end, end,
},
},
}, },
{ {
text_func = function() text = _("History settings"),
local current_state = _("Show new files in bold")
if G_reader_settings:readSetting("show_file_in_bold") == "opened" then
current_state = _("Show opened files in bold")
elseif G_reader_settings:isFalse("show_file_in_bold") then
current_state = _("Show files in bold") -- with checkmark unchecked
end
-- Inform that this settings applies only to classic file chooser
current_state = T(_("(Classic file browser) %1"), current_state)
return current_state
end,
checked_func = function() return not G_reader_settings:isFalse("show_file_in_bold") end,
sub_item_table = { sub_item_table = {
{ {
text = _("Don't show files in bold"), text = _("Clear history of deleted files"),
checked_func = function() return G_reader_settings:isFalse("show_file_in_bold") end,
callback = function() callback = function()
G_reader_settings:saveSetting("show_file_in_bold", false) UIManager:show(ConfirmBox:new{
self.ui:onRefresh() text = _("Clear history of deleted files?"),
ok_text = _("Clear"),
ok_callback = function()
require("readhistory"):clearMissing()
end,
})
end, end,
}, },
{ {
text = _("Show opened files in bold"), text = _("Auto-remove deleted or purged items from history"),
checked_func = function() return G_reader_settings:readSetting("show_file_in_bold") == "opened" end, checked_func = function()
return G_reader_settings:isTrue("autoremove_deleted_items_from_history")
end,
callback = function() callback = function()
G_reader_settings:saveSetting("show_file_in_bold", "opened") G_reader_settings:flipNilOrFalse("autoremove_deleted_items_from_history")
self.ui:onRefresh()
end, end,
separator = true,
}, },
{ {
text = _("Show new (not yet opened) files in bold"), text = _("Show filename in Open last/previous menu items"),
checked_func = function() checked_func = function()
return not G_reader_settings:isFalse("show_file_in_bold") and G_reader_settings:readSetting("show_file_in_bold") ~= "opened" return G_reader_settings:isTrue("open_last_menu_show_filename")
end, end,
callback = function() callback = function()
G_reader_settings:delSetting("show_file_in_bold") G_reader_settings:flipNilOrFalse("open_last_menu_show_filename")
self.ui:onRefresh()
end, end,
}, },
}, },
separator = true,
}, },
{ {
text = _("Shorten home folder"), text = _("Home folder settings"),
checked_func = function() sub_item_table = {
return G_reader_settings:nilOrTrue("shorten_home_dir") {
end, text = _("Set home folder"),
callback = function() callback = function()
G_reader_settings:flipNilOrTrue("shorten_home_dir") local text
local FileManager = require("apps/filemanager/filemanager") local home_dir = G_reader_settings:readSetting("home_dir")
if FileManager.instance then FileManager.instance:reinit() end if home_dir then
end, text = T(_("Home folder is set to:\n%1"), home_dir)
help_text = _([[ else
text = _("Home folder is not set.")
home_dir = Device.home_dir
end
UIManager:show(ConfirmBox:new{
text = text .. "\nChoose new folder to set as home?",
ok_text = _("Choose folder"),
ok_callback = function()
local path_chooser = require("ui/widget/pathchooser"):new{
select_file = false,
show_files = false,
path = home_dir,
onConfirm = function(new_path)
G_reader_settings:saveSetting("home_dir", new_path)
end
}
UIManager:show(path_chooser)
end,
})
end,
},
{
text = _("Shorten home folder"),
checked_func = function()
return G_reader_settings:nilOrTrue("shorten_home_dir")
end,
callback = function()
G_reader_settings:flipNilOrTrue("shorten_home_dir")
local FileManager = require("apps/filemanager/filemanager")
if FileManager.instance then FileManager.instance:reinit() end
end,
help_text = _([[
"Shorten home folder" will display the home folder itself as "Home" instead of its full path. "Shorten home folder" will display the home folder itself as "Home" instead of its full path.
Assuming the home folder is: Assuming the home folder is:
@ -292,16 +341,21 @@ A subfolder will be shortened from:
`/mnt/onboard/.books/Manga/Cells at Work` `/mnt/onboard/.books/Manga/Cells at Work`
To: To:
`Manga/Cells at Work`.]]), `Manga/Cells at Work`.]]),
}, },
{ {
text = _("Show filename in Open last/previous menu items"), text = _("Lock home folder"),
checked_func = function() return G_reader_settings:isTrue("open_last_menu_show_filename") end, enabled_func = function()
callback = function() G_reader_settings:flipNilOrFalse("open_last_menu_show_filename") end, return G_reader_settings:has("home_dir")
}, end,
{ checked_func = function()
text = _("Auto-remove deleted or purged items from history"), return G_reader_settings:isTrue("lock_home_folder")
checked_func = function() return G_reader_settings:isTrue("autoremove_deleted_items_from_history") end, end,
callback = function() G_reader_settings:flipNilOrFalse("autoremove_deleted_items_from_history") end, callback = function()
G_reader_settings:flipNilOrFalse("lock_home_folder")
self.ui:onRefresh()
end,
},
},
separator = true, separator = true,
}, },
{ {
@ -340,6 +394,14 @@ To:
}, },
} }
} }
for _, widget in pairs(self.registered_widgets) do
local ok, err = pcall(widget.addToMainMenu, widget, self.menu_items)
if not ok then
logger.err("failed to register widget", widget.name, err)
end
end
self.menu_items.sort_by = self.ui:getSortingMenuTable() self.menu_items.sort_by = self.ui:getSortingMenuTable()
self.menu_items.reverse_sorting = { self.menu_items.reverse_sorting = {
text = _("Reverse sorting"), text = _("Reverse sorting"),

@ -264,7 +264,10 @@ function FileChooser:genItemTableFromPath(path)
table.sort(dirs, sorting) table.sort(dirs, sorting)
table.sort(files, sorting) table.sort(files, sorting)
end end
if path ~= "/" then table.insert(dirs, 1, {name = ".."}) end if path ~= "/" and not (G_reader_settings:isTrue("lock_home_folder") and
path == G_reader_settings:readSetting("home_dir")) then
table.insert(dirs, 1, {name = ".."})
end
if self.show_current_dir_for_hold then table.insert(dirs, 1, {name = "."}) end if self.show_current_dir_for_hold then table.insert(dirs, 1, {name = "."}) end
local item_table = {} local item_table = {}
@ -394,7 +397,10 @@ function FileChooser:changeToPath(path, focused_path)
end end
function FileChooser:onFolderUp() function FileChooser:onFolderUp()
self:changeToPath(string.format("%s/..", self.path), self.path) if not (G_reader_settings:isTrue("lock_home_folder") and
self.path == G_reader_settings:readSetting("home_dir")) then
self:changeToPath(string.format("%s/..", self.path), self.path)
end
end end
function FileChooser:changePageToPath(path) function FileChooser:changePageToPath(path)

@ -178,7 +178,6 @@ function CoverBrowser:addToMainMenu(menu_items)
callback = function() callback = function()
self:setupHistoryDisplayMode("list_image_filename") self:setupHistoryDisplayMode("list_image_filename")
end, end,
separator = true,
}, },
}, },
}, },
@ -226,152 +225,155 @@ function CoverBrowser:addToMainMenu(menu_items)
callback = function() callback = function()
self:setupCollectionDisplayMode("list_image_filename") self:setupCollectionDisplayMode("list_image_filename")
end, end,
separator = true,
}, },
}, },
separator = true,
}, },
-- Misc settings },
}
-- add Mosaic / Detailed list mode settings to File browser Settings submenu
-- next to Classic mode settings
if menu_items.filebrowser_settings == nil then return end
table.insert (menu_items.filebrowser_settings.sub_item_table, 4, {
text = _("Mosaic and detailed list settings"),
separator = true,
sub_item_table = {
{ {
text = _("Mosaic and detailed list settings"), text = _("Items per page"),
help_text = _([[This sets the number of files and folders per page in display modes other than classic.]]),
-- Best to not "keep_menu_open = true", to see how this apply on the full view
callback = function()
local SpinWidget = require("ui/widget/spinwidget")
-- "files_per_page" should have been saved with an adequate value
-- the first time Detailed list was shown. Fallback to a start
-- value of 10 if it hasn't.
local curr_items = BookInfoManager:getSetting("files_per_page") or 10
local items = SpinWidget:new{
width = math.floor(Screen:getWidth() * 0.6),
value = curr_items,
value_min = 4,
value_max = 20,
default_value = 10,
keep_shown_on_apply = true,
title_text = _("Items per page"),
callback = function(spin)
BookInfoManager:saveSetting("files_per_page", spin.value)
self.ui:onRefresh()
end
}
UIManager:show(items)
end,
},
{
text = _("Display hints"),
sub_item_table = { sub_item_table = {
{ {
text = _("Display hints"), text = _("Show hint for books with description"),
sub_item_table = { checked_func = function() return not BookInfoManager:getSetting("no_hint_description") end,
{ callback = function()
text = _("Show hint for books with description"), if BookInfoManager:getSetting("no_hint_description") then
checked_func = function() return not BookInfoManager:getSetting("no_hint_description") end, BookInfoManager:saveSetting("no_hint_description", false)
callback = function() else
if BookInfoManager:getSetting("no_hint_description") then BookInfoManager:saveSetting("no_hint_description", true)
BookInfoManager:saveSetting("no_hint_description", false) end
else self:refreshFileManagerInstance()
BookInfoManager:saveSetting("no_hint_description", true) end,
end
self:refreshFileManagerInstance()
end,
},
{
text = _("Show hint for opened books in history"),
checked_func = function() return BookInfoManager:getSetting("history_hint_opened") end,
callback = function()
if BookInfoManager:getSetting("history_hint_opened") then
BookInfoManager:saveSetting("history_hint_opened", false)
else
BookInfoManager:saveSetting("history_hint_opened", true)
end
self:refreshFileManagerInstance()
end,
},
{
text = _("Show hint for opened books in favorites"),
checked_func = function() return BookInfoManager:getSetting("collections_hint_opened") end,
callback = function()
if BookInfoManager:getSetting("collections_hint_opened") then
BookInfoManager:saveSetting("collections_hint_opened", false)
else
BookInfoManager:saveSetting("collections_hint_opened", true)
end
self:refreshFileManagerInstance()
end,
}
}
}, },
{ {
text = _("Series"), text = _("Show hint for opened books in history"),
sub_item_table = { checked_func = function() return BookInfoManager:getSetting("history_hint_opened") end,
{ callback = function()
text = _("Append series metadata to authors"), if BookInfoManager:getSetting("history_hint_opened") then
checked_func = function() return series_mode == "append_series_to_authors" end, BookInfoManager:saveSetting("history_hint_opened", false)
callback = function() else
if series_mode == "append_series_to_authors" then BookInfoManager:saveSetting("history_hint_opened", true)
series_mode = nil end
else self:refreshFileManagerInstance()
series_mode = "append_series_to_authors" end,
end
BookInfoManager:saveSetting("series_mode", series_mode)
self:refreshFileManagerInstance()
end,
},
{
text = _("Append series metadata to title"),
checked_func = function() return series_mode == "append_series_to_title" end,
callback = function()
if series_mode == "append_series_to_title" then
series_mode = nil
else
series_mode = "append_series_to_title"
end
BookInfoManager:saveSetting("series_mode", series_mode)
self:refreshFileManagerInstance()
end,
},
{
text = _("Show series metadata in separate line"),
checked_func = function() return series_mode == "series_in_separate_line" end,
callback = function()
if series_mode == "series_in_separate_line" then
series_mode = nil
else
series_mode = "series_in_separate_line"
end
BookInfoManager:saveSetting("series_mode", series_mode)
self:refreshFileManagerInstance()
end,
},
},
separator = true
}, },
{ {
text = _("(Detailed list) Files per page"), text = _("Show hint for opened books in favorites"),
help_text = _([[This sets the number of files and directories per page in non-'classic' display modes.]]), checked_func = function() return BookInfoManager:getSetting("collections_hint_opened") end,
-- Best to not "keep_menu_open = true", to see how this apply on the full view
callback = function() callback = function()
local SpinWidget = require("ui/widget/spinwidget") if BookInfoManager:getSetting("collections_hint_opened") then
-- "files_per_page" should have been saved with an adequate value BookInfoManager:saveSetting("collections_hint_opened", false)
-- the first time Detailed list was shown. Fallback to a start else
-- value of 10 if it hasn't. BookInfoManager:saveSetting("collections_hint_opened", true)
local curr_items = BookInfoManager:getSetting("files_per_page") or 10 end
local items = SpinWidget:new{ self:refreshFileManagerInstance()
width = math.floor(Screen:getWidth() * 0.6), end,
value = curr_items, }
value_min = 4, }
value_max = 20, },
keep_shown_on_apply = true, {
title_text = _("Files per page"), text = _("Series"),
callback = function(spin) sub_item_table = {
BookInfoManager:saveSetting("files_per_page", spin.value) {
self.ui:onRefresh() text = _("Append series metadata to authors"),
end checked_func = function() return series_mode == "append_series_to_authors" end,
} callback = function()
UIManager:show(items) if series_mode == "append_series_to_authors" then
series_mode = nil
else
series_mode = "append_series_to_authors"
end
BookInfoManager:saveSetting("series_mode", series_mode)
self:refreshFileManagerInstance()
end, end,
}, },
{ {
text = _("Show number of pages read instead of progress %"), text = _("Append series metadata to title"),
checked_func = function() return BookInfoManager:getSetting("show_pages_read_as_progress") end, checked_func = function() return series_mode == "append_series_to_title" end,
callback = function() callback = function()
if BookInfoManager:getSetting("show_pages_read_as_progress") then if series_mode == "append_series_to_title" then
BookInfoManager:saveSetting("show_pages_read_as_progress", false) series_mode = nil
else else
BookInfoManager:saveSetting("show_pages_read_as_progress", true) series_mode = "append_series_to_title"
end end
BookInfoManager:saveSetting("series_mode", series_mode)
self:refreshFileManagerInstance() self:refreshFileManagerInstance()
end, end,
}, },
{ {
text = _("Show number of pages left to read"), text = _("Show series metadata in separate line"),
checked_func = function() return BookInfoManager:getSetting("show_pages_left_in_progress") end, checked_func = function() return series_mode == "series_in_separate_line" end,
callback = function() callback = function()
if BookInfoManager:getSetting("show_pages_left_in_progress") then if series_mode == "series_in_separate_line" then
BookInfoManager:saveSetting("show_pages_left_in_progress", false) series_mode = nil
else else
BookInfoManager:saveSetting("show_pages_left_in_progress", true) series_mode = "series_in_separate_line"
end end
BookInfoManager:saveSetting("series_mode", series_mode)
self:refreshFileManagerInstance() self:refreshFileManagerInstance()
end, end,
separator = true
}, },
}, },
separator = true
},
{
text = _("Show number of pages read instead of progress %"),
checked_func = function() return BookInfoManager:getSetting("show_pages_read_as_progress") end,
callback = function()
if BookInfoManager:getSetting("show_pages_read_as_progress") then
BookInfoManager:saveSetting("show_pages_read_as_progress", false)
else
BookInfoManager:saveSetting("show_pages_read_as_progress", true)
end
self:refreshFileManagerInstance()
end,
},
{
text = _("Show number of pages left to read"),
checked_func = function() return BookInfoManager:getSetting("show_pages_left_in_progress") end,
callback = function()
if BookInfoManager:getSetting("show_pages_left_in_progress") then
BookInfoManager:saveSetting("show_pages_left_in_progress", false)
else
BookInfoManager:saveSetting("show_pages_left_in_progress", true)
end
self:refreshFileManagerInstance()
end,
separator = true,
}, },
{ {
text = _("Book info cache management"), text = _("Book info cache management"),
@ -447,7 +449,7 @@ function CoverBrowser:addToMainMenu(menu_items)
}, },
}, },
}, },
} })
end end
function CoverBrowser:refreshFileManagerInstance(cleanup, post_init) function CoverBrowser:refreshFileManagerInstance(cleanup, post_init)

Loading…
Cancel
Save