2013-10-18 22:38:07 +02:00
|
|
|
local InputContainer = require("ui/widget/container/inputcontainer")
|
|
|
|
|
local CenterContainer = require("ui/widget/container/centercontainer")
|
2014-07-26 22:22:52 +08:00
|
|
|
local GestureRange = require("ui/gesturerange")
|
2013-10-18 22:38:07 +02:00
|
|
|
local UIManager = require("ui/uimanager")
|
2014-10-30 19:42:18 +01:00
|
|
|
local Device = require("device")
|
2013-10-18 22:38:07 +02:00
|
|
|
local Geom = require("ui/geometry")
|
2016-07-31 18:26:26 -07:00
|
|
|
local Screensaver = require("ui/screensaver")
|
2013-10-18 22:38:07 +02:00
|
|
|
local Event = require("ui/event")
|
2014-10-30 19:42:18 +01:00
|
|
|
local Screen = require("device").screen
|
2014-07-26 22:22:52 +08:00
|
|
|
local DEBUG = require("dbg")
|
2013-10-18 22:38:07 +02:00
|
|
|
local _ = require("gettext")
|
|
|
|
|
|
|
|
|
|
local ReaderMenu = InputContainer:new{
|
2014-03-13 21:52:43 +08:00
|
|
|
tab_item_table = nil,
|
|
|
|
|
registered_widgets = {},
|
2012-12-15 09:20:12 +08:00
|
|
|
}
|
2012-11-11 15:24:11 +08:00
|
|
|
|
|
|
|
|
function ReaderMenu:init()
|
2014-03-13 21:52:43 +08:00
|
|
|
self.tab_item_table = {
|
|
|
|
|
navi = {
|
|
|
|
|
icon = "resources/icons/appbar.page.corner.bookmark.png",
|
|
|
|
|
},
|
|
|
|
|
typeset = {
|
|
|
|
|
icon = "resources/icons/appbar.page.text.png",
|
|
|
|
|
},
|
2016-02-16 23:10:23 -08:00
|
|
|
setting = {
|
|
|
|
|
icon = "resources/icons/appbar.settings.png",
|
|
|
|
|
},
|
|
|
|
|
info = {
|
|
|
|
|
icon = "resources/icons/appbar.pokeball.png",
|
|
|
|
|
},
|
2014-04-23 21:57:48 +08:00
|
|
|
plugins = {
|
|
|
|
|
icon = "resources/icons/appbar.tools.png",
|
|
|
|
|
},
|
2014-09-03 11:13:46 +08:00
|
|
|
filemanager = {
|
|
|
|
|
icon = "resources/icons/appbar.cabinet.files.png",
|
2014-11-11 10:06:17 +08:00
|
|
|
remember = false,
|
2014-09-03 11:13:46 +08:00
|
|
|
callback = function()
|
2014-10-10 18:14:16 +08:00
|
|
|
self:onTapCloseMenu()
|
2014-11-11 10:06:17 +08:00
|
|
|
self.ui:onClose()
|
2014-09-03 12:09:25 +08:00
|
|
|
local FileManager = require("apps/filemanager/filemanager")
|
2016-04-23 22:56:56 +08:00
|
|
|
local lastdir = nil
|
|
|
|
|
local last_file = G_reader_settings:readSetting("lastfile")
|
|
|
|
|
if last_file then
|
|
|
|
|
lastdir = last_file:match("(.*)/")
|
|
|
|
|
end
|
2015-02-02 01:36:49 +08:00
|
|
|
if FileManager.instance then
|
2016-04-23 22:56:56 +08:00
|
|
|
FileManager.instance:reinit(lastdir)
|
2015-02-02 01:36:49 +08:00
|
|
|
else
|
2014-11-25 17:49:26 +08:00
|
|
|
FileManager:showFiles(lastdir)
|
2014-10-10 18:14:16 +08:00
|
|
|
end
|
2014-09-03 11:13:46 +08:00
|
|
|
end,
|
|
|
|
|
},
|
2014-03-13 21:52:43 +08:00
|
|
|
home = {
|
|
|
|
|
icon = "resources/icons/appbar.home.png",
|
2014-11-11 10:06:17 +08:00
|
|
|
remember = false,
|
2014-03-13 21:52:43 +08:00
|
|
|
callback = function()
|
2014-11-11 10:06:17 +08:00
|
|
|
self:onTapCloseMenu()
|
2015-02-02 02:22:58 +08:00
|
|
|
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 21:52:43 +08:00
|
|
|
end,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
self.registered_widgets = {}
|
|
|
|
|
|
2014-06-10 15:57:10 +08:00
|
|
|
if Device:hasKeys() then
|
2014-03-13 21:52:43 +08:00
|
|
|
self.key_events = {
|
2014-06-08 17:52:45 +08:00
|
|
|
ShowReaderMenu = { { "Menu" }, doc = "show menu" },
|
2014-06-10 15:57:10 +08:00
|
|
|
Close = { { "Back" }, doc = "close menu" },
|
2014-03-13 21:52:43 +08:00
|
|
|
}
|
|
|
|
|
end
|
2012-11-11 15:24:11 +08:00
|
|
|
end
|
2012-06-10 20:14:29 +02:00
|
|
|
|
2013-02-02 14:36:29 +08:00
|
|
|
function ReaderMenu:initGesListener()
|
2014-03-13 21:52:43 +08: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 14:36:29 +08:00
|
|
|
end
|
|
|
|
|
|
2012-12-15 09:20:12 +08:00
|
|
|
function ReaderMenu:setUpdateItemTable()
|
2014-03-13 21:52:43 +08:00
|
|
|
for _, widget in pairs(self.registered_widgets) do
|
|
|
|
|
widget:addToMainMenu(self.tab_item_table)
|
|
|
|
|
end
|
|
|
|
|
|
2014-11-21 15:41:14 +01:00
|
|
|
-- 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
|
2014-10-15 20:31:24 +08:00
|
|
|
if self.ui.document.is_djvu then
|
2014-11-21 15:41:14 +01:00
|
|
|
table.insert(
|
|
|
|
|
self.tab_item_table.setting,
|
|
|
|
|
#self.tab_item_table.setting,
|
|
|
|
|
self.view:getRenderModeMenuTable())
|
2014-10-15 20:31:24 +08:00
|
|
|
end
|
2014-07-27 21:41:38 +08:00
|
|
|
|
|
|
|
|
-- info tab
|
2014-11-21 15:41:14 +01:00
|
|
|
-- 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)
|
2014-08-06 20:19:12 +08:00
|
|
|
end
|
2014-10-10 18:14:16 +08:00
|
|
|
|
2016-07-31 18:26:26 -07:00
|
|
|
if Device:isKobo() and Screensaver:isUsingBookCover() then
|
2014-10-30 15:51:31 +08:00
|
|
|
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
|
2016-07-31 18:26:26 -07:00
|
|
|
table.insert(self.tab_item_table.setting, {
|
2014-11-17 21:44:50 +08:00
|
|
|
text = _("Screensaver"),
|
2014-10-30 15:51:31 +08:00
|
|
|
sub_item_table = {
|
|
|
|
|
{
|
2016-07-31 18:26:26 -07:00
|
|
|
text = _("Exclude this book's cover from screensaver"),
|
|
|
|
|
checked_func = excluded,
|
2014-10-30 15:51:31 +08:00
|
|
|
callback = function()
|
2016-07-31 18:26:26 -07:00
|
|
|
if excluded() then
|
|
|
|
|
self.ui.doc_settings:delSetting("exclude_screensaver")
|
|
|
|
|
else
|
|
|
|
|
self.ui.doc_settings:saveSetting("exclude_screensaver", true)
|
|
|
|
|
end
|
2014-10-30 15:51:31 +08:00
|
|
|
self.ui:saveSettings()
|
|
|
|
|
end
|
|
|
|
|
},
|
|
|
|
|
{
|
2016-07-31 18:26:26 -07:00
|
|
|
text = _("Auto stretch this book's cover image in screensaver"),
|
|
|
|
|
checked_func = proportional,
|
2014-10-30 15:51:31 +08:00
|
|
|
callback = function()
|
2016-07-31 18:26:26 -07:00
|
|
|
if proportional() then
|
|
|
|
|
self.ui.doc_settings:delSetting("proportional_screensaver")
|
|
|
|
|
else
|
|
|
|
|
self.ui.doc_settings:saveSetting(
|
|
|
|
|
"proportional_screensaver", not proportional())
|
|
|
|
|
end
|
2014-10-30 15:51:31 +08:00
|
|
|
self.ui:saveSettings()
|
|
|
|
|
end
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-10-26 14:47:48 +00:00
|
|
|
})
|
2014-09-17 12:25:13 +02:00
|
|
|
end
|
2012-12-15 09:20:12 +08:00
|
|
|
end
|
|
|
|
|
|
2013-12-27 21:47:08 +08:00
|
|
|
function ReaderMenu:onShowReaderMenu()
|
2014-07-27 21:41:38 +08:00
|
|
|
if #self.tab_item_table.setting == 0 then
|
2014-03-13 21:52:43 +08:00
|
|
|
self:setUpdateItemTable()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local menu_container = CenterContainer:new{
|
|
|
|
|
ignore = "height",
|
|
|
|
|
dimen = Screen:getSize(),
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-26 20:49:27 -04:00
|
|
|
local main_menu
|
2014-03-13 21:52:43 +08:00
|
|
|
if Device:isTouchDevice() then
|
2014-10-25 04:02:42 -04:00
|
|
|
local TouchMenu = require("ui/widget/touchmenu")
|
2014-03-13 21:52:43 +08:00
|
|
|
main_menu = TouchMenu:new{
|
|
|
|
|
width = Screen:getWidth(),
|
2014-11-11 10:06:17 +08:00
|
|
|
last_index = self.last_tab_index,
|
2014-03-13 21:52:43 +08:00
|
|
|
tab_item_table = {
|
|
|
|
|
self.tab_item_table.navi,
|
|
|
|
|
self.tab_item_table.typeset,
|
2014-07-27 21:41:38 +08:00
|
|
|
self.tab_item_table.setting,
|
|
|
|
|
self.tab_item_table.info,
|
2014-04-23 21:57:48 +08:00
|
|
|
self.tab_item_table.plugins,
|
2014-09-03 11:13:46 +08:00
|
|
|
self.tab_item_table.filemanager,
|
2014-03-13 21:52:43 +08:00
|
|
|
self.tab_item_table.home,
|
|
|
|
|
},
|
|
|
|
|
show_parent = menu_container,
|
|
|
|
|
}
|
|
|
|
|
else
|
2014-10-25 04:02:42 -04:00
|
|
|
local Menu = require("ui/widget/menu")
|
2014-03-13 21:52:43 +08:00
|
|
|
main_menu = Menu:new{
|
|
|
|
|
title = _("Document menu"),
|
2014-10-25 04:02:42 -04:00
|
|
|
item_table = Menu.itemTableFromTouchMenu(self.tab_item_table),
|
2014-03-13 21:52:43 +08:00
|
|
|
width = Screen:getWidth() - 100,
|
2014-10-25 04:02:42 -04:00
|
|
|
show_parent = menu_container,
|
2014-03-13 21:52:43 +08:00
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
main_menu.close_callback = function ()
|
2014-11-05 12:15:07 +08:00
|
|
|
self.ui:handleEvent(Event:new("CloseReaderMenu"))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
main_menu.touch_menu_callback = function ()
|
|
|
|
|
self.ui:handleEvent(Event:new("CloseConfigMenu"))
|
2014-03-13 21:52:43 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
menu_container[1] = main_menu
|
|
|
|
|
-- maintain a reference to menu_container
|
|
|
|
|
self.menu_container = menu_container
|
|
|
|
|
UIManager:show(menu_container)
|
|
|
|
|
|
|
|
|
|
return true
|
2012-06-10 20:14:29 +02:00
|
|
|
end
|
2012-11-11 15:24:11 +08:00
|
|
|
|
2014-09-05 21:02:13 +08:00
|
|
|
function ReaderMenu:onCloseReaderMenu()
|
2014-11-11 10:06:17 +08:00
|
|
|
self.last_tab_index = self.menu_container[1].last_index
|
|
|
|
|
DEBUG("remember menu tab index", self.last_tab_index)
|
|
|
|
|
self:onSaveSettings()
|
2014-09-05 21:02:13 +08:00
|
|
|
UIManager:close(self.menu_container)
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
2012-11-11 15:24:11 +08:00
|
|
|
function ReaderMenu:onTapShowMenu()
|
2014-03-13 21:52:43 +08:00
|
|
|
self.ui:handleEvent(Event:new("ShowConfigMenu"))
|
|
|
|
|
self.ui:handleEvent(Event:new("ShowReaderMenu"))
|
|
|
|
|
return true
|
2012-11-11 15:24:11 +08:00
|
|
|
end
|
|
|
|
|
|
2014-10-10 18:14:16 +08:00
|
|
|
function ReaderMenu:onTapCloseMenu()
|
|
|
|
|
self.ui:handleEvent(Event:new("CloseReaderMenu"))
|
|
|
|
|
self.ui:handleEvent(Event:new("CloseConfigMenu"))
|
|
|
|
|
end
|
|
|
|
|
|
2012-12-09 01:25:32 +08:00
|
|
|
function ReaderMenu:onSetDimensions(dimen)
|
2014-03-13 21:52:43 +08:00
|
|
|
-- update listening according to new screen dimen
|
|
|
|
|
if Device:isTouchDevice() then
|
|
|
|
|
self:initGesListener()
|
|
|
|
|
end
|
2012-12-15 09:20:12 +08:00
|
|
|
end
|
|
|
|
|
|
2014-11-11 10:06:17 +08:00
|
|
|
function ReaderMenu:onReadSettings(config)
|
2014-12-01 15:32:12 +08:00
|
|
|
self.last_tab_index = config:readSetting("readermenu_tab_index") or 1
|
2014-11-11 10:06:17 +08:00
|
|
|
end
|
|
|
|
|
|
2013-12-27 23:18:16 +08:00
|
|
|
function ReaderMenu:onSaveSettings()
|
2014-12-03 16:14:30 +00:00
|
|
|
self.ui.doc_settings:saveSetting("readermenu_tab_index", self.last_tab_index)
|
2012-12-15 09:20:12 +08:00
|
|
|
end
|
|
|
|
|
|
2012-12-15 09:30:48 +08:00
|
|
|
function ReaderMenu:registerToMainMenu(widget)
|
2014-03-13 21:52:43 +08:00
|
|
|
table.insert(self.registered_widgets, widget)
|
2012-12-09 01:25:32 +08:00
|
|
|
end
|
|
|
|
|
|
2013-10-18 22:38:07 +02:00
|
|
|
return ReaderMenu
|