mirror of
https://github.com/koreader/koreader
synced 2024-11-04 12:00:25 +00:00
bda44a99ef
use `device` `filemanager` `rolling` and `paging` sections to organize the dispatcher menu and allow the user to know when the action will apply add events from ReaderGesture allow profiles in FM
134 lines
4.1 KiB
Lua
134 lines
4.1 KiB
Lua
local ConfirmBox = require("ui/widget/confirmbox")
|
|
local DataStorage = require("datastorage")
|
|
local Dispatcher = require("dispatcher")
|
|
local InfoMessage = require("ui/widget/infomessage")
|
|
local InputDialog = require("ui/widget/inputdialog")
|
|
local LuaSettings = require("luasettings")
|
|
local UIManager = require("ui/uimanager")
|
|
local WidgetContainer = require("ui/widget/container/widgetcontainer")
|
|
local orderedPairs = require("ffi/util").orderedPairs
|
|
local _ = require("gettext")
|
|
local T = require("ffi/util").template
|
|
|
|
local Profiles = WidgetContainer:new{
|
|
name = "profiles",
|
|
profiles_file = DataStorage:getSettingsDir() .. "/profiles.lua",
|
|
profiles = nil,
|
|
data = nil,
|
|
}
|
|
|
|
function Profiles:init()
|
|
self.ui.menu:registerToMainMenu(self)
|
|
end
|
|
|
|
function Profiles:loadProfiles()
|
|
if self.profiles then
|
|
return
|
|
end
|
|
self.profiles = LuaSettings:open(self.profiles_file)
|
|
self.data = self.profiles.data
|
|
end
|
|
|
|
function Profiles:onFlushSettings()
|
|
if self.profiles then
|
|
self.profiles:flush()
|
|
end
|
|
end
|
|
|
|
function Profiles:addToMainMenu(menu_items)
|
|
menu_items.profiles = {
|
|
text = _("Profiles"),
|
|
sub_item_table_func = function()
|
|
return self:getSubMenuItems()
|
|
end,
|
|
}
|
|
end
|
|
|
|
function Profiles:getSubMenuItems()
|
|
self:loadProfiles()
|
|
local sub_item_table = {
|
|
{
|
|
text = _("New"),
|
|
keep_menu_open = true,
|
|
callback = function(touchmenu_instance)
|
|
local name_input
|
|
name_input = InputDialog:new{
|
|
title = _("Enter profile name"),
|
|
input = "",
|
|
buttons = {{
|
|
{
|
|
text = _("Cancel"),
|
|
callback = function()
|
|
UIManager:close(name_input)
|
|
end,
|
|
},
|
|
{
|
|
text = _("Save"),
|
|
callback = function()
|
|
local name = name_input:getInputText()
|
|
if not self:newProfile(name) then
|
|
UIManager:show(InfoMessage:new{
|
|
text = T(_("There is already a profile called: %1"), name),
|
|
})
|
|
return
|
|
end
|
|
UIManager:close(name_input)
|
|
touchmenu_instance.item_table = self:getSubMenuItems()
|
|
touchmenu_instance.page = 1
|
|
touchmenu_instance:updateItems()
|
|
end,
|
|
},
|
|
}},
|
|
}
|
|
UIManager:show(name_input)
|
|
name_input:onShowKeyboard()
|
|
end,
|
|
separator = true,
|
|
}
|
|
}
|
|
for k,v in orderedPairs(self.data) do
|
|
local sub_items = {
|
|
{
|
|
text = _("Delete profile"),
|
|
keep_menu_open = false,
|
|
separator = true,
|
|
callback = function()
|
|
UIManager:show(ConfirmBox:new{
|
|
text = _("Do you want to delete this profile?"),
|
|
ok_text = _("Yes"),
|
|
cancel_text = _("No"),
|
|
ok_callback = function()
|
|
self:deleteProfile(k)
|
|
end,
|
|
})
|
|
end,
|
|
}
|
|
}
|
|
Dispatcher.addSubMenu(self, sub_items, "data", k)
|
|
table.insert(sub_item_table, {
|
|
text = k,
|
|
hold_keep_menu_open = false,
|
|
sub_item_table = sub_items,
|
|
hold_callback = function()
|
|
Dispatcher.execute(self, self.data[k])
|
|
end,
|
|
})
|
|
end
|
|
return sub_item_table
|
|
end
|
|
|
|
function Profiles:newProfile(name)
|
|
if self.data[name] == nil then
|
|
self.data[name] = {}
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function Profiles:deleteProfile(name)
|
|
self.data[name] = nil
|
|
end
|
|
|
|
return Profiles
|