2
0
mirror of https://github.com/koreader/koreader synced 2024-10-31 21:20:20 +00:00
koreader/frontend/apps/reader/modules/readermenu.lua

240 lines
7.7 KiB
Lua
Raw Normal View History

2013-10-18 20:38:07 +00:00
local InputContainer = require("ui/widget/container/inputcontainer")
local CenterContainer = require("ui/widget/container/centercontainer")
local GestureRange = require("ui/gesturerange")
2013-10-18 20:38:07 +00:00
local UIManager = require("ui/uimanager")
local Device = require("device")
2013-10-18 20:38:07 +00:00
local Geom = require("ui/geometry")
local Event = require("ui/event")
local Screen = require("device").screen
local DEBUG = require("dbg")
2013-10-18 20:38:07 +00:00
local _ = require("gettext")
local ReaderMenu = InputContainer:new{
2014-03-13 13:52:43 +00:00
tab_item_table = nil,
registered_widgets = {},
}
function ReaderMenu:init()
2014-03-13 13:52:43 +00:00
self.tab_item_table = {
navi = {
icon = "resources/icons/appbar.page.corner.bookmark.png",
},
typeset = {
icon = "resources/icons/appbar.page.text.png",
},
2016-02-17 07:10:23 +00:00
setting = {
icon = "resources/icons/appbar.settings.png",
},
info = {
icon = "resources/icons/appbar.pokeball.png",
},
plugins = {
icon = "resources/icons/appbar.tools.png",
},
filemanager = {
icon = "resources/icons/appbar.cabinet.files.png",
remember = false,
callback = function()
self:onTapCloseMenu()
self.ui:onClose()
local FileManager = require("apps/filemanager/filemanager")
if FileManager.instance then
FileManager.instance:resetDimen(Screen:getSize())
else
local lastdir = nil
local last_file = G_reader_settings:readSetting("lastfile")
if last_file then
lastdir = last_file:match("(.*)/")
end
FileManager:showFiles(lastdir)
end
end,
},
2014-03-13 13:52:43 +00:00
home = {
icon = "resources/icons/appbar.home.png",
remember = false,
2014-03-13 13:52:43 +00:00
callback = function()
self:onTapCloseMenu()
UIManager:scheduleIn(0.1, function() self.ui:onClose() end)
local FileManager = require("apps/filemanager/filemanager")
if FileManager.instance then
FileManager.instance:onClose()
end
2014-03-13 13:52:43 +00:00
end,
},
}
self.registered_widgets = {}
if Device:hasKeys() then
2014-03-13 13:52:43 +00:00
self.key_events = {
2014-06-08 09:52:45 +00:00
ShowReaderMenu = { { "Menu" }, doc = "show menu" },
Close = { { "Back" }, doc = "close menu" },
2014-03-13 13:52:43 +00:00
}
end
end
2013-02-02 06:36:29 +00:00
function ReaderMenu:initGesListener()
2014-03-13 13:52:43 +00:00
self.ges_events = {
TapShowMenu = {
GestureRange:new{
ges = "tap",
range = Geom:new{
x = Screen:getWidth()*DTAP_ZONE_MENU.x,
y = Screen:getHeight()*DTAP_ZONE_MENU.y,
w = Screen:getWidth()*DTAP_ZONE_MENU.w,
h = Screen:getHeight()*DTAP_ZONE_MENU.h
}
}
},
}
2013-02-02 06:36:29 +00:00
end
function ReaderMenu:setUpdateItemTable()
2014-03-13 13:52:43 +00:00
for _, widget in pairs(self.registered_widgets) do
widget:addToMainMenu(self.tab_item_table)
end
-- 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)
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())
end
-- info tab
-- insert common info
for i, common_setting in ipairs(require("ui/elements/common_info_menu_table")) do
table.insert(self.tab_item_table.info, common_setting)
end
if Device:isKobo() and KOBO_SCREEN_SAVER_LAST_BOOK then
local excluded = function()
return self.ui.doc_settings:readSetting("exclude_screensaver") or false
end
local proportional = function()
return self.ui.doc_settings:readSetting("proportional_screensaver") or false
end
table.insert(self.tab_item_table.typeset, {
text = _("Screensaver"),
sub_item_table = {
{
text = _("Use this book's cover as screensaver"),
checked_func = function() return not excluded() end,
callback = function()
self.ui.doc_settings:saveSetting("exclude_screensaver", not excluded())
self.ui:saveSettings()
end
},
{
text = _("Display proportional cover image in screensaver"),
checked_func = function() return proportional() end,
callback = function()
self.ui.doc_settings:saveSetting("proportional_screensaver", not proportional())
self.ui:saveSettings()
end
}
}
})
2014-09-17 10:25:13 +00:00
end
end
function ReaderMenu:onShowReaderMenu()
if #self.tab_item_table.setting == 0 then
2014-03-13 13:52:43 +00:00
self:setUpdateItemTable()
end
local menu_container = CenterContainer:new{
ignore = "height",
dimen = Screen:getSize(),
}
2015-04-27 00:49:27 +00:00
local main_menu
2014-03-13 13:52:43 +00:00
if Device:isTouchDevice() then
local TouchMenu = require("ui/widget/touchmenu")
2014-03-13 13:52:43 +00:00
main_menu = TouchMenu:new{
width = Screen:getWidth(),
last_index = self.last_tab_index,
2014-03-13 13:52:43 +00:00
tab_item_table = {
self.tab_item_table.navi,
self.tab_item_table.typeset,
self.tab_item_table.setting,
self.tab_item_table.info,
self.tab_item_table.plugins,
self.tab_item_table.filemanager,
2014-03-13 13:52:43 +00:00
self.tab_item_table.home,
},
show_parent = menu_container,
}
else
local Menu = require("ui/widget/menu")
2014-03-13 13:52:43 +00:00
main_menu = Menu:new{
title = _("Document menu"),
item_table = Menu.itemTableFromTouchMenu(self.tab_item_table),
2014-03-13 13:52:43 +00:00
width = Screen:getWidth() - 100,
show_parent = menu_container,
2014-03-13 13:52:43 +00:00
}
end
main_menu.close_callback = function ()
self.ui:handleEvent(Event:new("CloseReaderMenu"))
end
main_menu.touch_menu_callback = function ()
self.ui:handleEvent(Event:new("CloseConfigMenu"))
2014-03-13 13:52:43 +00:00
end
menu_container[1] = main_menu
-- maintain a reference to menu_container
self.menu_container = menu_container
UIManager:show(menu_container)
return true
end
function ReaderMenu:onCloseReaderMenu()
self.last_tab_index = self.menu_container[1].last_index
DEBUG("remember menu tab index", self.last_tab_index)
self:onSaveSettings()
UIManager:close(self.menu_container)
return true
end
function ReaderMenu:onTapShowMenu()
2014-03-13 13:52:43 +00:00
self.ui:handleEvent(Event:new("ShowConfigMenu"))
self.ui:handleEvent(Event:new("ShowReaderMenu"))
return true
end
function ReaderMenu:onTapCloseMenu()
self.ui:handleEvent(Event:new("CloseReaderMenu"))
self.ui:handleEvent(Event:new("CloseConfigMenu"))
end
function ReaderMenu:onSetDimensions(dimen)
2014-03-13 13:52:43 +00:00
-- update listening according to new screen dimen
if Device:isTouchDevice() then
self:initGesListener()
end
end
function ReaderMenu:onReadSettings(config)
2014-12-01 07:32:12 +00:00
self.last_tab_index = config:readSetting("readermenu_tab_index") or 1
end
2013-12-27 15:18:16 +00:00
function ReaderMenu:onSaveSettings()
self.ui.doc_settings:saveSetting("readermenu_tab_index", self.last_tab_index)
end
function ReaderMenu:registerToMainMenu(widget)
2014-03-13 13:52:43 +00:00
table.insert(self.registered_widgets, widget)
end
2013-10-18 20:38:07 +00:00
return ReaderMenu