Files
koreader/frontend/apps/filemanager/filemanagermenu.lua

276 lines
8.9 KiB
Lua
Raw Normal View History

2013-10-18 22:38:07 +02:00
local CenterContainer = require("ui/widget/container/centercontainer")
local InputContainer = require("ui/widget/container/inputcontainer")
local ConfirmBox = require("ui/widget/confirmbox")
2013-10-18 22:38:07 +02:00
local UIManager = require("ui/uimanager")
local GestureRange = require("ui/gesturerange")
local InputDialog = require("ui/widget/inputdialog")
2013-10-18 22:38:07 +02:00
local Geom = require("ui/geometry")
local Device = require("device")
local Screen = Device.screen
local DEBUG = require("dbg")
2013-10-18 22:38:07 +02:00
local _ = require("gettext")
local FileSearcher = require("apps/filemanager/filemanagerfilesearcher")
local Search = require("apps/filemanager/filemanagersearch")
2014-08-11 10:39:08 +02:00
local SetDefaults = require("apps/filemanager/filemanagersetdefaults")
2013-10-18 22:38:07 +02:00
local FileManagerMenu = InputContainer:extend{
2014-03-13 21:52:43 +08:00
tab_item_table = nil,
registered_widgets = nil,
2013-08-14 05:29:05 -04:00
}
function FileManagerMenu:init()
2014-03-13 21:52:43 +08:00
self.tab_item_table = {
setting = {
icon = "resources/icons/appbar.settings.png",
},
info = {
2014-03-13 21:52:43 +08:00
icon = "resources/icons/appbar.pokeball.png",
},
tools = {
icon = "resources/icons/appbar.tools.png",
},
search = {
icon = "resources/icons/appbar.magnify.browse.png",
},
2014-03-13 21:52:43 +08:00
home = {
icon = "resources/icons/appbar.home.png",
callback = function()
2014-08-16 22:32:34 +02:00
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
2014-03-13 21:52:43 +08:00
end,
},
}
self.registered_widgets = {}
if Device:hasKeys() then
2014-03-13 21:52:43 +08:00
self.key_events = {
ShowMenu = { { "Menu" }, doc = "show menu" },
2014-03-13 21:52:43 +08:00
}
end
2013-08-14 05:29:05 -04:00
end
function FileManagerMenu:initGesListener()
2014-03-13 21:52:43 +08:00
self.ges_events = {
TapShowMenu = {
GestureRange:new{
ges = "tap",
range = Geom:new{
x = 0,
y = 0,
w = Screen:getWidth()*3/4,
h = Screen:getHeight()/4,
}
}
},
}
2013-08-14 05:29:05 -04:00
end
function FileManagerMenu:setUpdateItemTable()
2014-03-13 21:52:43 +08:00
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
})
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
2014-03-13 21:52:43 +08:00
})
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
})
-- 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)
2014-03-13 21:52:43 +08:00
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
-- tools tab
if Device.isKobo() then
table.insert(self.tab_item_table.tools, {
text = _("Screensaver folder"),
callback = function()
local ss_folder_path_input
local function save_folder_path()
G_reader_settings:saveSetting(
"screensaver_folder", ss_folder_path_input:getInputText())
UIManager:close(ss_folder_path_input)
end
local curr_path = G_reader_settings:readSetting("screensaver_folder")
ss_folder_path_input = InputDialog:new{
title = _("Screensaver folder"),
input = curr_path,
input_hint = "/mnt/onboard/screensaver",
input_type = "text",
buttons = {
{
{
text = _("Cancel"),
callback = function()
UIManager:close(ss_folder_path_input)
end,
},
{
text = _("Save"),
is_enter_default = true,
callback = save_folder_path,
},
}
},
}
ss_folder_path_input:onShowKeyboard()
UIManager:show(ss_folder_path_input)
end,
})
end
table.insert(self.tab_item_table.tools, {
text = _("Advanced settings"),
callback = function()
SetDefaults:ConfirmEdit()
end,
hold_callback = function()
SetDefaults:ConfirmSave()
end,
})
table.insert(self.tab_item_table.tools, {
text = _("OPDS catalog"),
callback = function()
2016-02-15 22:34:28 -08:00
local FileManager = require("apps/filemanager/filemanager")
local OPDSCatalog = require("apps/opdscatalog/opdscatalog")
function OPDSCatalog:onExit()
2016-02-15 22:34:28 -08:00
FileManager:onRefresh()
end
OPDSCatalog:showCatalog()
end,
})
-- search tab
table.insert(self.tab_item_table.search, {
text = _("Find a book in calibre catalog"),
callback = function()
Search:getCalibre()
Search:ShowSearch()
end
})
table.insert(self.tab_item_table.search, {
text = _("Find a file"),
callback = function()
FileSearcher:init(self.ui.file_chooser.path)
end
})
2014-08-16 22:32:34 +02:00
-- home tab
table.insert(self.tab_item_table.home, {
text = _("Exit"),
callback = function()
UIManager:close(self.menu_container)
self.ui:onClose()
end
})
2013-08-14 05:29:05 -04:00
end
function FileManagerMenu:onShowMenu()
2014-12-01 15:32:12 +08:00
local tab_index = G_reader_settings:readSetting("filemanagermenu_tab_index") or 1
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
local TouchMenu = require("ui/widget/touchmenu")
2014-03-13 21:52:43 +08:00
main_menu = TouchMenu:new{
width = Screen:getWidth(),
2014-12-01 15:32:12 +08:00
last_index = tab_index,
2014-03-13 21:52:43 +08:00
tab_item_table = {
self.tab_item_table.setting,
self.tab_item_table.info,
self.tab_item_table.tools,
self.tab_item_table.search,
2014-03-13 21:52:43 +08:00
self.tab_item_table.home,
},
show_parent = menu_container,
}
else
local Menu = require("ui/widget/menu")
2014-03-13 21:52:43 +08:00
main_menu = Menu:new{
title = _("File manager menu"),
item_table = Menu.itemTableFromTouchMenu(self.tab_item_table),
width = Screen:getWidth()-10,
show_parent = menu_container,
2014-03-13 21:52:43 +08:00
}
end
main_menu.close_callback = function ()
2014-12-01 15:32:12 +08:00
self:onCloseFileManagerMenu()
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
2013-08-14 05:29:05 -04:00
end
function FileManagerMenu:onCloseFileManagerMenu()
2014-12-01 15:32:12 +08:00
local last_tab_index = self.menu_container[1].last_index
DEBUG("remember menu tab index", last_tab_index)
G_reader_settings:saveSetting("filemanagermenu_tab_index", last_tab_index)
UIManager:close(self.menu_container)
return true
end
2013-08-14 05:29:05 -04:00
function FileManagerMenu:onTapShowMenu()
2014-03-13 21:52:43 +08:00
self:onShowMenu()
return true
2013-08-14 05:29:05 -04:00
end
function FileManagerMenu:onSetDimensions(dimen)
2014-03-13 21:52:43 +08:00
-- update listening according to new screen dimen
if Device:isTouchDevice() then
self:initGesListener()
end
2013-08-14 05:29:05 -04:00
end
function FileManagerMenu:registerToMainMenu(widget)
2014-03-13 21:52:43 +08:00
table.insert(self.registered_widgets, widget)
2013-08-14 05:29:05 -04:00
end
2013-10-18 22:38:07 +02:00
return FileManagerMenu