mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
MenuSorter: initial implementation
* Menus are now sanely configurable * Custom separator placement for clearer menus
This commit is contained in:
@@ -9,49 +9,53 @@ local _ = require("gettext")
|
||||
|
||||
local ReaderMenu = InputContainer:new{
|
||||
tab_item_table = nil,
|
||||
menu_items = {},
|
||||
registered_widgets = {},
|
||||
}
|
||||
|
||||
function ReaderMenu:init()
|
||||
self.tab_item_table = {
|
||||
navi = {
|
||||
icon = "resources/icons/appbar.page.corner.bookmark.png",
|
||||
},
|
||||
typeset = {
|
||||
icon = "resources/icons/appbar.page.text.png",
|
||||
},
|
||||
setting = {
|
||||
icon = "resources/icons/appbar.settings.png",
|
||||
},
|
||||
plugins = {
|
||||
icon = "resources/icons/appbar.tools.png",
|
||||
},
|
||||
search = {
|
||||
icon = "resources/icons/appbar.magnify.browse.png",
|
||||
},
|
||||
filemanager = {
|
||||
icon = "resources/icons/appbar.cabinet.files.png",
|
||||
remember = false,
|
||||
callback = function()
|
||||
self:onTapCloseMenu()
|
||||
self.ui:onClose()
|
||||
local FileManager = require("apps/filemanager/filemanager")
|
||||
local lastdir = nil
|
||||
local last_file = G_reader_settings:readSetting("lastfile")
|
||||
if last_file then
|
||||
lastdir = last_file:match("(.*)/")
|
||||
end
|
||||
if FileManager.instance then
|
||||
FileManager.instance:reinit(lastdir)
|
||||
else
|
||||
FileManager:showFiles(lastdir)
|
||||
end
|
||||
end,
|
||||
},
|
||||
main = {
|
||||
icon = "resources/icons/menu-icon.png",
|
||||
},
|
||||
self.menu_items["KOMenu:menu_buttons"] = {
|
||||
-- top menu
|
||||
}
|
||||
-- items in top menu
|
||||
self.menu_items["navi"] = {
|
||||
icon = "resources/icons/appbar.page.corner.bookmark.png",
|
||||
}
|
||||
self.menu_items["typeset"] = {
|
||||
icon = "resources/icons/appbar.page.text.png",
|
||||
}
|
||||
self.menu_items["setting"] = {
|
||||
icon = "resources/icons/appbar.settings.png",
|
||||
}
|
||||
self.menu_items["tools"] = {
|
||||
icon = "resources/icons/appbar.tools.png",
|
||||
}
|
||||
self.menu_items["search"] = {
|
||||
icon = "resources/icons/appbar.magnify.browse.png",
|
||||
}
|
||||
self.menu_items["filemanager"] = {
|
||||
icon = "resources/icons/appbar.cabinet.files.png",
|
||||
remember = false,
|
||||
callback = function()
|
||||
self:onTapCloseMenu()
|
||||
self.ui:onClose()
|
||||
local FileManager = require("apps/filemanager/filemanager")
|
||||
local lastdir = nil
|
||||
local last_file = G_reader_settings:readSetting("lastfile")
|
||||
if last_file then
|
||||
lastdir = last_file:match("(.*)/")
|
||||
end
|
||||
if FileManager.instance then
|
||||
FileManager.instance:reinit(lastdir)
|
||||
else
|
||||
FileManager:showFiles(lastdir)
|
||||
end
|
||||
end,
|
||||
}
|
||||
self.menu_items["main"] = {
|
||||
icon = "resources/icons/menu-icon.png",
|
||||
}
|
||||
|
||||
self.registered_widgets = {}
|
||||
|
||||
if Device:hasKeys() then
|
||||
@@ -93,16 +97,13 @@ function ReaderMenu:setUpdateItemTable()
|
||||
|
||||
-- settings tab
|
||||
-- insert common settings
|
||||
for i, common_setting in ipairs(require("ui/elements/common_settings_menu_table")) do
|
||||
table.insert(self.tab_item_table.setting, common_setting)
|
||||
for id, common_setting in pairs(require("ui/elements/common_settings_menu_table")) do
|
||||
self.menu_items[id] = common_setting
|
||||
end
|
||||
-- insert DjVu render mode submenu just before the last entry (show advanced)
|
||||
-- this is a bit of a hack
|
||||
if self.ui.document.is_djvu then
|
||||
table.insert(
|
||||
self.tab_item_table.setting,
|
||||
#self.tab_item_table.setting,
|
||||
self.view:getRenderModeMenuTable())
|
||||
self.menu_items["djvu_render_mode"] = self.view:getRenderModeMenuTable()
|
||||
end
|
||||
|
||||
if Device:isKobo() and Screensaver:isUsingBookCover() then
|
||||
@@ -112,7 +113,7 @@ function ReaderMenu:setUpdateItemTable()
|
||||
local proportional = function()
|
||||
return self.ui.doc_settings:readSetting("proportional_screensaver") or false
|
||||
end
|
||||
table.insert(self.tab_item_table.setting, {
|
||||
self.menu_items["screensaver"] {
|
||||
text = _("Screensaver"),
|
||||
sub_item_table = {
|
||||
{
|
||||
@@ -141,16 +142,16 @@ function ReaderMenu:setUpdateItemTable()
|
||||
end
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
end
|
||||
|
||||
-- main menu tab
|
||||
-- insert common info
|
||||
for i, common_setting in ipairs(require("ui/elements/common_info_menu_table")) do
|
||||
table.insert(self.tab_item_table.main, common_setting)
|
||||
for id, common_setting in pairs(require("ui/elements/common_info_menu_table")) do
|
||||
self.menu_items[id] = common_setting
|
||||
end
|
||||
|
||||
table.insert(self.tab_item_table.main, {
|
||||
self.menu_items["exit"] = {
|
||||
text = _("Exit"),
|
||||
callback = function()
|
||||
self:onTapCloseMenu()
|
||||
@@ -160,12 +161,88 @@ function ReaderMenu:setUpdateItemTable()
|
||||
FileManager.instance:onClose()
|
||||
end
|
||||
end,
|
||||
})
|
||||
}
|
||||
|
||||
local order = {
|
||||
["KOMenu:menu_buttons"] = {
|
||||
"navi",
|
||||
"typeset",
|
||||
"setting",
|
||||
"tools",
|
||||
"search",
|
||||
"filemanager",
|
||||
"main",
|
||||
},
|
||||
["navi"] = {
|
||||
"table_of_contents",
|
||||
"bookmarks",
|
||||
"go_to",
|
||||
"skim_to",
|
||||
"follow_links",
|
||||
},
|
||||
["typeset"] = {
|
||||
"page_overlap",
|
||||
"switch_zoom_mode",
|
||||
"set_render_style",
|
||||
"floating_punctuation",
|
||||
"highlight_options",
|
||||
"change_font",
|
||||
"hyphenation",
|
||||
},
|
||||
["setting"] = {
|
||||
"read_from_right_to_left",
|
||||
-- common settings
|
||||
-- those that don't exist will simply be skipped during menu gen
|
||||
"frontlight", -- if Device:hasFrontlight()
|
||||
"night_mode",
|
||||
"----------------------------",
|
||||
"network",
|
||||
"screen",
|
||||
"screensaver",
|
||||
"save_document",
|
||||
"----------------------------",
|
||||
"language",
|
||||
"----------------------------",
|
||||
"djvu_render_mode",
|
||||
"status_bar",
|
||||
"show_advanced_options",
|
||||
},
|
||||
["tools"] = {
|
||||
"calibre_wireless_connection",
|
||||
"evernote",
|
||||
"goodreads",
|
||||
"keep_alive",
|
||||
"statistics",
|
||||
"storage_stat",
|
||||
"speed_reading_module_perception_expander",
|
||||
"synchronize_time",
|
||||
"progress_sync",
|
||||
"zsync",
|
||||
},
|
||||
["search"] = {
|
||||
"dictionary_lookup",
|
||||
"wikipedia_lookup",
|
||||
"fulltext_search",
|
||||
},
|
||||
["filemanager"] = {},
|
||||
["main"] = {
|
||||
"history",
|
||||
"book_status",
|
||||
"----------------------------",
|
||||
"ota_update", -- if Device:isKindle() or Device:isKobo() or Device:isPocketBook() or Device:isAndroid()
|
||||
"version",
|
||||
"help",
|
||||
"----------------------------",
|
||||
"exit",
|
||||
},
|
||||
}
|
||||
|
||||
local MenuSorter = require("frontend/ui/menusorter")
|
||||
self.tab_item_table = MenuSorter:sort(self.menu_items, order)
|
||||
end
|
||||
|
||||
function ReaderMenu:onShowReaderMenu()
|
||||
if #self.tab_item_table.setting == 0 then
|
||||
if #self.menu_items.setting == 0 then
|
||||
self:setUpdateItemTable()
|
||||
end
|
||||
|
||||
@@ -180,15 +257,7 @@ function ReaderMenu:onShowReaderMenu()
|
||||
main_menu = TouchMenu:new{
|
||||
width = Screen:getWidth(),
|
||||
last_index = self.last_tab_index,
|
||||
tab_item_table = {
|
||||
self.tab_item_table.navi,
|
||||
self.tab_item_table.typeset,
|
||||
self.tab_item_table.setting,
|
||||
self.tab_item_table.plugins,
|
||||
self.tab_item_table.search,
|
||||
self.tab_item_table.filemanager,
|
||||
self.tab_item_table.main,
|
||||
},
|
||||
tab_item_table = self.tab_item_table,
|
||||
show_parent = menu_container,
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user