mirror of
https://github.com/koreader/koreader
synced 2024-10-31 21:20:20 +00:00
3066c86e38
This is a major overhaul of the hardware abstraction layer. A few notes: General platform distinction happens in frontend/device.lua which will delegate everything else to frontend/device/<platform_name>/device.lua which should extend frontend/device/generic/device.lua Screen handling is implemented in frontend/device/screen.lua which includes the *functionality* to support device specifics. Actually setting up the device specific functionality, however, is done in the device specific setup code in the relevant device.lua file. The same goes for input handling.
252 lines
8.0 KiB
Lua
252 lines
8.0 KiB
Lua
local CenterContainer = require("ui/widget/container/centercontainer")
|
|
local InputContainer = require("ui/widget/container/inputcontainer")
|
|
local ConfirmBox = require("ui/widget/confirmbox")
|
|
local InfoMessage = require("ui/widget/infomessage")
|
|
local OTAManager = require("ui/otamanager")
|
|
local UIManager = require("ui/uimanager")
|
|
local Device = require("device")
|
|
local GestureRange = require("ui/gesturerange")
|
|
local Geom = require("ui/geometry")
|
|
local Screen = require("device").screen
|
|
local Language = require("ui/language")
|
|
local DEBUG = require("dbg")
|
|
local _ = require("gettext")
|
|
local ReaderFrontLight = require("apps/reader/modules/readerfrontlight")
|
|
local Search = require("apps/filemanager/filemanagersearch")
|
|
local SetDefaults = require("apps/filemanager/filemanagersetdefaults")
|
|
|
|
local FileManagerMenu = InputContainer:extend{
|
|
tab_item_table = nil,
|
|
registered_widgets = {},
|
|
}
|
|
|
|
function FileManagerMenu:init()
|
|
local filemanager = self.ui
|
|
self.tab_item_table = {
|
|
setting = {
|
|
icon = "resources/icons/appbar.settings.png",
|
|
},
|
|
info = {
|
|
icon = "resources/icons/appbar.pokeball.png",
|
|
},
|
|
tools = {
|
|
icon = "resources/icons/appbar.tools.png",
|
|
},
|
|
opdscatalog = {
|
|
icon = "resources/icons/appbar.magnify.browse.png",
|
|
callback = function()
|
|
self:onCloseFileManagerMenu()
|
|
local OPDSCatalog = require("apps/opdscatalog/opdscatalog")
|
|
function OPDSCatalog:onExit()
|
|
DEBUG("refresh filemanager")
|
|
filemanager:onRefresh()
|
|
end
|
|
OPDSCatalog:showCatalog()
|
|
end,
|
|
},
|
|
home = {
|
|
icon = "resources/icons/appbar.home.png",
|
|
callback = function()
|
|
if settings_changed then
|
|
settings_changed = false
|
|
UIManager:show(ConfirmBox:new{
|
|
text = _("You have unsaved default settings. Save them now?"),
|
|
ok_callback = function()
|
|
SetDefaults:SaveSettings()
|
|
end,
|
|
})
|
|
else
|
|
UIManager:close(self.menu_container)
|
|
self.ui:onClose()
|
|
end
|
|
end,
|
|
},
|
|
}
|
|
self.registered_widgets = {}
|
|
|
|
if Device:hasKeys() then
|
|
self.key_events = {
|
|
ShowMenu = { { "Menu" }, doc = "show menu" },
|
|
}
|
|
end
|
|
end
|
|
|
|
function FileManagerMenu:initGesListener()
|
|
self.ges_events = {
|
|
TapShowMenu = {
|
|
GestureRange:new{
|
|
ges = "tap",
|
|
range = Geom:new{
|
|
x = 0,
|
|
y = 0,
|
|
w = Screen:getWidth()*3/4,
|
|
h = Screen:getHeight()/4,
|
|
}
|
|
}
|
|
},
|
|
}
|
|
end
|
|
|
|
function FileManagerMenu:setUpdateItemTable()
|
|
for _, widget in pairs(self.registered_widgets) do
|
|
widget:addToMainMenu(self.tab_item_table)
|
|
end
|
|
|
|
-- setting tab
|
|
table.insert(self.tab_item_table.setting, {
|
|
text = _("Show hidden files"),
|
|
checked_func = function() return self.ui.file_chooser.show_hidden end,
|
|
callback = function() self.ui:toggleHiddenFiles() end
|
|
})
|
|
local FileManager = require("apps/filemanager/filemanager")
|
|
table.insert(self.tab_item_table.setting, self.ui:getSortingMenuTable())
|
|
table.insert(self.tab_item_table.setting, {
|
|
text = _("Reverse sorting"),
|
|
checked_func = function() return self.ui.file_chooser.reverse_collate end,
|
|
callback = function() self.ui:toggleReverseCollate() end
|
|
})
|
|
table.insert(self.tab_item_table.setting, {
|
|
text = _("Start with last opened file"),
|
|
checked_func = function() return G_reader_settings:readSetting("open_last") end,
|
|
enabled_func = function() return G_reader_settings:readSetting("lastfile") ~= nil end,
|
|
callback = function()
|
|
local open_last = G_reader_settings:readSetting("open_last") or false
|
|
G_reader_settings:saveSetting("open_last", not open_last)
|
|
end
|
|
})
|
|
if Device:hasFrontlight() then
|
|
ReaderFrontLight:addToMainMenu(self.tab_item_table)
|
|
end
|
|
table.insert(self.tab_item_table.setting, {
|
|
text = _("Screen settings"),
|
|
sub_item_table = {
|
|
require("ui/elements/screen_dpi_menu_table"),
|
|
UIManager:getRefreshMenuTable(),
|
|
},
|
|
})
|
|
table.insert(self.tab_item_table.setting, {
|
|
text = _("Night mode"),
|
|
checked_func = function() return G_reader_settings:readSetting("night_mode") end,
|
|
callback = function()
|
|
local night_mode = G_reader_settings:readSetting("night_mode") or false
|
|
Screen.bb:invert()
|
|
G_reader_settings:saveSetting("night_mode", not night_mode)
|
|
end
|
|
})
|
|
table.insert(self.tab_item_table.setting, Language:getLangMenuTable())
|
|
-- info tab
|
|
if Device:isKindle() or Device:isKobo() then
|
|
table.insert(self.tab_item_table.info, OTAManager:getOTAMenuTable())
|
|
end
|
|
table.insert(self.tab_item_table.info, {
|
|
text = _("Version"),
|
|
callback = function()
|
|
UIManager:show(InfoMessage:new{
|
|
text = io.open("git-rev", "r"):read(),
|
|
})
|
|
end
|
|
})
|
|
table.insert(self.tab_item_table.info, {
|
|
text = _("Help"),
|
|
callback = function()
|
|
UIManager:show(InfoMessage:new{
|
|
text = _("Please report bugs to \nhttps://github.com/koreader/koreader/issues"),
|
|
})
|
|
end
|
|
})
|
|
-- tools tab
|
|
table.insert(self.tab_item_table.tools, {
|
|
text = _("Set defaults"),
|
|
callback = function()
|
|
SetDefaults:ConfirmEdit()
|
|
end,
|
|
hold_callback = function()
|
|
SetDefaults:ConfirmSave()
|
|
end,
|
|
})
|
|
table.insert(self.tab_item_table.tools, {
|
|
text = _("Search books"),
|
|
callback = function()
|
|
Search:getCalibre()
|
|
Search:ShowSearch()
|
|
end
|
|
})
|
|
-- home tab
|
|
table.insert(self.tab_item_table.home, {
|
|
text = _("Exit"),
|
|
callback = function()
|
|
UIManager:close(self.menu_container)
|
|
self.ui:onClose()
|
|
end
|
|
})
|
|
end
|
|
|
|
function FileManagerMenu:onShowMenu()
|
|
if #self.tab_item_table.setting == 0 then
|
|
self:setUpdateItemTable()
|
|
end
|
|
|
|
local menu_container = CenterContainer:new{
|
|
ignore = "height",
|
|
dimen = Screen:getSize(),
|
|
}
|
|
|
|
local main_menu = nil
|
|
if Device:isTouchDevice() then
|
|
local TouchMenu = require("ui/widget/touchmenu")
|
|
main_menu = TouchMenu:new{
|
|
width = Screen:getWidth(),
|
|
tab_item_table = {
|
|
self.tab_item_table.setting,
|
|
self.tab_item_table.info,
|
|
self.tab_item_table.tools,
|
|
self.tab_item_table.opdscatalog,
|
|
self.tab_item_table.home,
|
|
},
|
|
show_parent = menu_container,
|
|
}
|
|
else
|
|
local Menu = require("ui/widget/menu")
|
|
main_menu = Menu:new{
|
|
title = _("File manager menu"),
|
|
item_table = Menu.itemTableFromTouchMenu(self.tab_item_table),
|
|
width = Screen:getWidth()-10,
|
|
show_parent = menu_container,
|
|
}
|
|
end
|
|
|
|
main_menu.close_callback = function ()
|
|
UIManager:close(menu_container)
|
|
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 FileManagerMenu:onCloseFileManagerMenu()
|
|
UIManager:close(self.menu_container)
|
|
return true
|
|
end
|
|
|
|
function FileManagerMenu:onTapShowMenu()
|
|
self:onShowMenu()
|
|
return true
|
|
end
|
|
|
|
function FileManagerMenu:onSetDimensions(dimen)
|
|
-- update listening according to new screen dimen
|
|
if Device:isTouchDevice() then
|
|
self:initGesListener()
|
|
end
|
|
end
|
|
|
|
function FileManagerMenu:registerToMainMenu(widget)
|
|
table.insert(self.registered_widgets, widget)
|
|
end
|
|
|
|
return FileManagerMenu
|