Files
koreader/frontend/ui/reader/readermenu.lua
Qingping Hou f7c65ebef7 add register_widget in ReaderMenu & minor fixes in menu.lua
* now readerwidgets can add menu items in ReaderMenu by
calling ReaderMenu:addToMainMenuCallback and define its own
addToMainMenu method, which takes ReaderMenu's item_table as argument.
2012-12-15 09:20:12 +08:00

152 lines
3.1 KiB
Lua

ReaderMenu = InputContainer:new{
item_table = {},
registered_widgets = {},
}
function ReaderMenu:init()
self.item_table = {}
self.registered_widgets = {}
if Device:isTouchDevice() then
self.ges_events = {
TapShowMenu = {
GestureRange:new{
ges = "tap",
range = Geom:new{
x = 0, y = 0,
w = Screen:getWidth(),
h = Screen:getHeight()/2
}
}
},
}
else
self.key_events = {
ShowMenu = { { "Menu" }, doc = "show menu" },
}
end
end
function ReaderMenu:genSetZoomModeCallBack(mode)
return function()
self.ui:handleEvent(Event:new("SetZoomMode", mode))
end
end
function ReaderMenu:setUpdateItemTable()
table.insert(self.item_table, {
text = "Screen rotate",
sub_item_table = {
{
text = "rotate 90 degree clockwise",
callback = function()
Screen:screenRotate("clockwise")
self.ui:handleEvent(
Event:new("SetDimensions", Screen:getSize()))
end
},
{
text = "rotate 90 degree anticlockwise",
callback = function()
Screen:screenRotate("anticlockwise")
self.ui:handleEvent(
Event:new("SetDimensions", Screen:getSize()))
end
},
}
})
if self.ui.document.info.has_pages then
table.insert(self.item_table, {
text = "Switch zoom mode",
sub_item_table = {
{
text = "Zoom to fit content width",
callback = self:genSetZoomModeCallBack("contentwidth")
},
{
text = "Zoom to fit content height",
callback = self:genSetZoomModeCallBack("contentheight")
},
{
text = "Zoom to fit page width",
callback = self:genSetZoomModeCallBack("pagewidth")
},
{
text = "Zoom to fit page height",
callback = self:genSetZoomModeCallBack("pageheight")
},
{
text = "Zoom to fit content",
callback = self:genSetZoomModeCallBack("content")
},
{
text = "Zoom to fit page",
callback = self:genSetZoomModeCallBack("page")
},
}
})
end
for _, widget in pairs(self.registered_widgets) do
widget:addToMainMenu(self.item_table)
end
table.insert(self.item_table, {
text = "Return to file browser",
callback = function()
UIManager:close(self.menu_container)
self.ui:onClose()
end
})
end
function ReaderMenu:onShowMenu()
if #self.item_table == 0 then
self:setUpdateItemTable()
end
local main_menu = Menu:new{
title = "Document menu",
item_table = self.item_table,
width = Screen:getWidth() - 100,
}
function main_menu:onMenuChoice(item)
if item.callback then
item.callback()
end
end
local menu_container = CenterContainer:new{
main_menu,
dimen = Screen:getSize(),
}
main_menu.close_callback = function ()
UIManager:close(menu_container)
end
-- maintain a reference to menu_container
self.menu_container = menu_container
UIManager:show(menu_container)
return true
end
function ReaderMenu:onTapShowMenu()
self:onShowMenu()
return true
end
function ReaderMenu:onSetDimensions(dimen)
-- @TODO update gesture listenning range according to new screen
-- orientation 15.12 2012 (houqp)
end
function ReaderMenu:onCloseDocument()
end
function ReaderMenu:addToMainMenuCallback(widget)
table.insert(self.registered_widgets, widget)
end