Merge pull request #784 from WS64/master

Add en editor for defaults.lua to filemanager
pull/786/head v2014.08.11-nightly
Huang Xin 10 years ago
commit 536a3dcc03

@ -13,6 +13,7 @@ local Language = require("ui/language")
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,
@ -73,6 +74,7 @@ function FileManagerMenu:setUpdateItemTable()
self.ui:toggleHiddenFiles()
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,
@ -102,7 +104,18 @@ function FileManagerMenu:setUpdateItemTable()
end
})
table.insert(self.tab_item_table.setting, Language:getLangMenuTable())
table.insert(self.tab_item_table.setting, {
text = _("Default settings"),
callback = function()
SetDefaults:ConfirmEdit()
end
})
table.insert(self.tab_item_table.setting, {
text = _("Save default settings"),
callback = function()
SetDefaults:ConfirmSave()
end
})
-- info tab
if Device:isKindle() or Device:isKobo() then
table.insert(self.tab_item_table.info, OTAManager:getOTAMenuTable())
@ -129,7 +142,6 @@ function FileManagerMenu:setUpdateItemTable()
Search:init()
end
})
table.insert(self.tab_item_table.info, Screen:SearchOptions())
end
function FileManagerMenu:onShowMenu()

@ -94,14 +94,14 @@ function Search:init()
end
if self.calibrefile ~= nil then
local dummy = ""
if SEARCH_CASESENSITIVE then
dummy = "case sensitive)"
else
dummy = "case insensitive)"
LIBRARY_PATH = string.gsub(self.calibrefile,"/[^/]*$","")
if string.sub(LIBRARY_PATH,string.len(LIBRARY_PATH)) ~= "/" then
LIBRARY_PATH = LIBRARY_PATH .. "/"
end
GLOBAL_INPUT_VALUE = self.search_value
self.search_dialog = InputDialog:new{
title = _("Search Books (" .. dummy),
title = _("Search Books"),
buttons = {
{
{
@ -117,6 +117,7 @@ function Search:init()
width = Screen:getWidth() * 0.8,
height = Screen:getHeight() * 0.2,
}
GLOBAL_INPUT_VALUE = nil
self.search_dialog:onShowKeyboard()
UIManager:show(self.search_dialog)
else

@ -0,0 +1,253 @@
local InfoMessage = require("ui/widget/infomessage")
local UIManager = require("ui/uimanager")
local _ = require("gettext")
local InputContainer = require("ui/widget/container/inputcontainer")
local InputDialog = require("ui/widget/inputdialog")
local ConfirmBox = require("ui/widget/confirmbox")
local CenterContainer = require("ui/widget/container/centercontainer")
local Screen = require("ui/screen")
local Menu = require("ui/widget/menu")
local SetDefaults = InputContainer:new{
bools_name = {},
bools_value = {},
results = {},
defaults_menu = {},
}
local function settype(b,t)
if t == "boolean" then
if b == "false" then return false else return true end
else
return b
end
end
local function __genOrderedIndex( t )
-- this function is taken from http://lua-users.org/wiki/SortedIteration
local orderedIndex = {}
for key in pairs(t) do
table.insert( orderedIndex, key )
end
table.sort( orderedIndex )
return orderedIndex
end
local function orderedNext(t, state)
-- this function is taken from http://lua-users.org/wiki/SortedIteration
-- Equivalent of the next function, but returns the keys in the alphabetic
-- order. We use a temporary ordered key table that is stored in the
-- table being iterated.
if state == nil then
-- the first time, generate the index
t.__orderedIndex = __genOrderedIndex( t )
key = t.__orderedIndex[1]
return key, t[key]
end
-- fetch the next value
key = nil
for i = 1,table.getn(t.__orderedIndex) do
if t.__orderedIndex[i] == state then
key = t.__orderedIndex[i+1]
end
end
if key then
return key, t[key]
end
-- no more value to return, cleanup
t.__orderedIndex = nil
return
end
local function orderedPairs(t)
-- this function is taken from http://lua-users.org/wiki/SortedIteration
-- Equivalent of the pairs() function on tables. Allows to iterate
-- in order
return orderedNext, t, nil
end
function SetDefaults:ConfirmEdit()
UIManager:show(ConfirmBox:new{
text = _("Wrong settings might crash Koreader! Continue?"),
ok_callback = function()
self:init()
end,
})
end
function SetDefaults:init()
self.bools_name = {}
self.bools_value = {}
self.results = {}
self.fillbools()
local menu_container = CenterContainer:new{
dimen = Screen:getSize(),
}
self.defaults_menu = Menu:new{
width = Screen:getWidth()-50,
height = Screen:getHeight()-50,
show_parent = menu_container,
_manager = self,
}
table.insert(menu_container, self.defaults_menu)
self.defaults_menu.close_callback = function()
UIManager:close(menu_container)
end
for i=1,#self.bools_name do
local dummy = self.bools_name[i] .. " = "
if type(_G[self.bools_name[i]]) == "string" and not tonumber(self.bools_value[i]) then
dummy = dummy .. "\"" .. tostring(self.bools_value[i]) .. "\"" -- add quotation marks to strings
else
dummy = dummy .. tostring(self.bools_value[i])
end
table.insert(self.results, {
text = dummy,
callback = function()
GLOBAL_INPUT_VALUE = tostring(self.bools_value[i])
self.set_dialog = InputDialog:new{
title = self.bools_name[i] .. ":",
buttons = {
{
{
text = _("Ok"),
enabled = true,
callback = function()
_G[self.bools_name[i]] = settype(self.set_dialog:getInputText(),type(_G[self.bools_name[i]]))
self:close()
end,
},
{
text = _("cancel"),
enabled = true,
callback = function()
self:close()
end,
},
},
},
width = Screen:getWidth() * 0.95,
height = Screen:getHeight() * 0.2,
}
GLOBAL_INPUT_VALUE = nil
self.set_dialog:onShowKeyboard()
UIManager:show(self.set_dialog)
end
})
end
self.defaults_menu:swithItemTable("Defaults", self.results)
UIManager:show(menu_container)
end
function SetDefaults:fillbools()
local i = 0
for n,v in orderedPairs(_G) do
if (not string.find(tostring(v), "<")) and (not string.find(tostring(v), ": ")) and string.sub(n,1,1) ~= "_" and string.upper(n) == n and n ~= "GLOBAL_INPUT_VALUE" then
i = i + 1
SetDefaults.bools_name[i] = n
SetDefaults.bools_value[i] = v
end
end
end
function SetDefaults:close()
self.set_dialog:onClose()
UIManager:close(self.set_dialog)
end
function SetDefaults:ConfirmSave()
UIManager:show(ConfirmBox:new{
text = _("Are you sure to save the settings to \"defaults.persistent.lua\"?"),
ok_callback = function()
self:SaveSettings()
end,
})
end
function SetDefaults:SaveSettings()
local function fileread(filename,array)
local file = io.open(filename)
local line = file:read()
local counter = 0
while line do
counter = counter + 1
local i = string.find(line,"[-][-]") -- remove comments from file
if (i or 0)>1 then line = string.sub(line,1,i-1) end
array[counter] = line:gsub("^%s*(.-)%s*$", "%1") -- trim
line = file:read()
end
file:close()
end
local function build_setting(j)
local ret = SetDefaults.bools_name[j] .. " = "
if tonumber(SetDefaults.bools_value[j]) then
ret = ret .. tostring(tonumber(SetDefaults.bools_value[j]))
elseif type(_G[SetDefaults.bools_name[j]]) == "boolean" then
ret = ret .. tostring(SetDefaults.bools_value[j])
else
ret = ret .. "\"" .. tostring(SetDefaults.bools_value[j]) .. "\""
end
return ret
end
local filename = "defaults.persistent.lua"
local file
if io.open(filename,"r") == nil then
file = io.open(filename, "w")
file:write("-- For configuration changes that persists between (nightly) releases\n")
file:close()
end
local dpl = {}
fileread("defaults.persistent.lua",dpl)
local dl = {}
fileread("defaults.lua",dl)
self.bools = {}
self.results = {}
self.fillbools()
local done = {}
-- handle case "found in persistent", replace it
for i = 1,#dpl do
for j=1,#SetDefaults.bools_name do
if string.find(dpl[i],SetDefaults.bools_name[j]) == 1 then
dpl[i] = build_setting(j)
done[j] = true
end
end
end
-- handle case "exists identical in non-persistent", ignore it
for i = 1,#dl do
for j=1,#SetDefaults.bools_name do
if dl[i]:gsub("1024[*]1024[*]10","10485760"):gsub("1024[*]1024[*]30","31457280"):gsub("[.]0$",""):gsub("([.][0-9]+)0","%1") == build_setting(j) then
done[j] = true
end
end
end
-- handle case "not in persistent and different in non-persistent", add to persistent
for j=1,#SetDefaults.bools_name do
if not done[j] then
dpl[#dpl+1] = build_setting(j)
end
end
file = io.open("defaults.persistent.lua", "w")
for i = 1,#dpl do
file:write(dpl[i] .. "\n")
end
file:close()
UIManager:show(InfoMessage:new{text = _("Default settings successfully saved to \"defaults.persistent.lua\"!")})
end
return SetDefaults

@ -307,53 +307,5 @@ function Screen:getDPIMenuTable()
}
end
function Screen:SearchOptions()
return {
text = _("Search options"),
sub_item_table = {
{
text = _("Case sensitive"),
checked_func = function()
local search_option = SEARCH_CASESENSITIVE
return search_option
end,
callback = function() SEARCH_CASESENSITIVE = not SEARCH_CASESENSITIVE end
},
{
text = _("Search title"),
checked_func = function()
local search_option = SEARCH_TITLE
return search_option
end,
callback = function() SEARCH_TITLE = not SEARCH_TITLE end
},
{
text = _("Search tags"),
checked_func = function()
local search_option = SEARCH_TAGS
return search_option
end,
callback = function() SEARCH_TAGS = not SEARCH_TAGS end
},
{
text = _("Search series"),
checked_func = function()
local search_option = SEARCH_SERIES
return search_option
end,
callback = function() SEARCH_SERIES = not SEARCH_SERIES end
},
{
text = _("Search path"),
checked_func = function()
local search_option = SEARCH_PATH
return search_option
end,
callback = function() SEARCH_PATH = not SEARCH_PATH end
},
}
}
end
return Screen

@ -107,7 +107,7 @@ local VirtualKeyboard = InputContainer:new{
inputbox = nil,
KEYS = {}, -- table to store layouts
min_layout = 2,
max_layout = 13,
max_layout = 12,
layout = 2,
shiftmode = false,
symbolmode = false,
@ -187,6 +187,11 @@ function VirtualKeyboard:init()
}
}
self:initLayout(self.layout)
if GLOBAL_INPUT_VALUE then
for i = 1, string.len(GLOBAL_INPUT_VALUE) do
self:addChar(string.sub(GLOBAL_INPUT_VALUE,i,i))
end
end
end
function VirtualKeyboard:initLayout(layout)

@ -77,12 +77,12 @@ function showReaderUI(file, pass)
DEBUG("opening file", file)
if lfs.attributes(file, "mode") ~= "file" then
UIManager:show(InfoMessage:new{
text = _("File does not exist")
text = _("File ") .. file .. _(" does not exist")
})
return
end
UIManager:show(InfoMessage:new{
text = _("Opening file") .. file,
text = _("Opening file ") .. file,
timeout = 1,
})
UIManager:scheduleIn(0.1, function() doShowReaderUI(file, pass) end)

Loading…
Cancel
Save