Handle defaults by type (boolean/string/number)

pull/807/head
WS64 10 years ago
parent 8224cd714b
commit 085b4fce6a

@ -7,10 +7,11 @@ local ConfirmBox = require("ui/widget/confirmbox")
local CenterContainer = require("ui/widget/container/centercontainer") local CenterContainer = require("ui/widget/container/centercontainer")
local Screen = require("ui/screen") local Screen = require("ui/screen")
local Menu = require("ui/widget/menu") local Menu = require("ui/widget/menu")
local Font = require("ui/font")
local SetDefaults = InputContainer:new{ local SetDefaults = InputContainer:new{
bools_name = {}, defaults_name = {},
bools_value = {}, defaults_value = {},
results = {}, results = {},
defaults_menu = {}, defaults_menu = {},
} }
@ -87,28 +88,29 @@ end
function SetDefaults:init() function SetDefaults:init()
local function setdisplayname(i) local function setdisplayname(i)
local dummy = self.bools_name[i] .. " = " local dummy = self.defaults_name[i] .. " = "
if type(_G[self.bools_name[i]]) == "string" and not tonumber(self.bools_value[i]) then if type(_G[self.defaults_name[i]]) == "string" and not tonumber(self.defaults_value[i]) then
dummy = dummy .. "\"" .. tostring(self.bools_value[i]) .. "\"" -- add quotation marks to strings dummy = dummy .. "\"" .. tostring(self.defaults_value[i]) .. "\"" -- add quotation marks to strings
else else
dummy = dummy .. tostring(self.bools_value[i]) dummy = dummy .. tostring(self.defaults_value[i])
end end
return dummy return dummy
end end
self.bools_name = {} self.defaults_name = {}
self.bools_value = {} self.defaults_value = {}
self.results = {} self.results = {}
self.fillbools() self.filldefaults()
local menu_container = CenterContainer:new{ local menu_container = CenterContainer:new{
dimen = Screen:getSize(), dimen = Screen:getSize(),
} }
self.defaults_menu = Menu:new{ self.defaults_menu = Menu:new{
width = Screen:getWidth()-50, width = Screen:getWidth()-15,
height = Screen:getHeight()-50, height = Screen:getHeight()-15,
cface = Font:getFace("cfont", 22),
show_parent = menu_container, show_parent = menu_container,
_manager = self, _manager = self,
} }
@ -117,57 +119,122 @@ function SetDefaults:init()
UIManager:close(menu_container) UIManager:close(menu_container)
end end
for i=1,#self.bools_name do for i=1,#self.defaults_name do
table.insert(self.results, { local settings_type = type(_G[self.defaults_name[i]])
text = setdisplayname(i), if settings_type == "boolean" then
callback = function() table.insert(self.results, {
GLOBAL_INPUT_VALUE = tostring(self.bools_value[i]) text = setdisplayname(i),
self.set_dialog = InputDialog:new{ callback = function()
title = self.bools_name[i] .. ":", GLOBAL_INPUT_VALUE = tostring(self.defaults_value[i])
buttons = { self.set_dialog = InputDialog:new{
{ title = self.defaults_name[i] .. ":",
{ buttons = {
text = _("OK"), {
enabled = true, {
callback = function() text = "true",
_G[self.bools_name[i]] = settype(self.set_dialog:getInputText(),type(_G[self.bools_name[i]])) enabled = true,
self.bools_value[i] = _G[self.bools_name[i]] callback = function()
self.results[i].text = setdisplayname(i) self.defaults_value[i] = true
self:close() if not _G[self.defaults_name[i]] then
self.defaults_menu:swithItemTable("Defaults", self.results, i) _G[self.defaults_name[i]] = true
UIManager:show(menu_container) settings_changed = true
end, end
self.results[i].text = setdisplayname(i)
self:close()
self.defaults_menu:swithItemTable("Defaults", self.results, i)
UIManager:show(menu_container)
end
},
{
text = "false",
enabled = true,
callback = function()
self.defaults_value[i] = false
if _G[self.defaults_name[i]] then
_G[self.defaults_name[i]] = false
settings_changed = true
end
self.results[i].text = setdisplayname(i)
self.defaults_menu:swithItemTable("Defaults", self.results, i)
self:close()
UIManager:show(menu_container)
end
},
{
text = _("Cancel"),
enabled = true,
callback = function()
self:close()
UIManager:show(menu_container)
end
},
}, },
{ },
text = _("Cancel"), input_type = settings_type,
enabled = true, width = Screen:getWidth() * 0.95,
callback = function() height = Screen:getHeight() * 0.2,
self:close() }
UIManager:show(menu_container) GLOBAL_INPUT_VALUE = nil
end, self.set_dialog:onShowKeyboard()
}, UIManager:show(self.set_dialog)
}, end
}, })
width = Screen:getWidth() * 0.95, else
height = Screen:getHeight() * 0.2, table.insert(self.results, {
} text = setdisplayname(i),
GLOBAL_INPUT_VALUE = nil callback = function()
self.set_dialog:onShowKeyboard() GLOBAL_INPUT_VALUE = tostring(self.defaults_value[i])
UIManager:show(self.set_dialog) self.set_dialog = InputDialog:new{
end title = self.defaults_name[i] .. ":",
}) buttons = {
{
{
text = _("OK"),
enabled = true,
callback = function()
self.defaults_value[i] = _G[self.defaults_name[i]]
if _G[self.defaults_name[i]] ~= settype(self.set_dialog:getInputText(),settings_type) then
_G[self.defaults_name[i]] = settype(self.set_dialog:getInputText(),settings_type)
settings_changed = true
end
self.results[i].text = setdisplayname(i)
self:close()
self.defaults_menu:swithItemTable("Defaults", self.results, i)
UIManager:show(menu_container)
end,
},
{
text = _("Cancel"),
enabled = true,
callback = function()
self:close()
UIManager:show(menu_container)
end,
},
},
},
input_type = settings_type,
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
end end
self.defaults_menu:swithItemTable("Defaults", self.results) self.defaults_menu:swithItemTable("Defaults", self.results)
UIManager:show(menu_container) UIManager:show(menu_container)
end end
function SetDefaults:fillbools() function SetDefaults:filldefaults()
local i = 0 local i = 0
for n,v in orderedPairs(_G) do 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 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" and n ~= "LIBRARY_PATH" then
i = i + 1 i = i + 1
SetDefaults.bools_name[i] = n SetDefaults.defaults_name[i] = n
SetDefaults.bools_value[i] = v SetDefaults.defaults_value[i] = v
end end
end end
end end
@ -203,13 +270,13 @@ function SetDefaults:SaveSettings()
end end
local function build_setting(j) local function build_setting(j)
local ret = SetDefaults.bools_name[j] .. " = " local ret = SetDefaults.defaults_name[j] .. " = "
if tonumber(SetDefaults.bools_value[j]) then if tonumber(SetDefaults.defaults_value[j]) then
ret = ret .. tostring(tonumber(SetDefaults.bools_value[j])) ret = ret .. tostring(tonumber(SetDefaults.defaults_value[j]))
elseif type(_G[SetDefaults.bools_name[j]]) == "boolean" then elseif type(_G[SetDefaults.defaults_name[j]]) == "boolean" then
ret = ret .. tostring(SetDefaults.bools_value[j]) ret = ret .. tostring(SetDefaults.defaults_value[j])
else else
ret = ret .. "\"" .. tostring(SetDefaults.bools_value[j]) .. "\"" ret = ret .. "\"" .. tostring(SetDefaults.defaults_value[j]) .. "\""
end end
return ret return ret
end end
@ -226,15 +293,14 @@ function SetDefaults:SaveSettings()
fileread("defaults.persistent.lua",dpl) fileread("defaults.persistent.lua",dpl)
local dl = {} local dl = {}
fileread("defaults.lua",dl) fileread("defaults.lua",dl)
self.bools = {}
self.results = {} self.results = {}
self.fillbools() self.filldefaults()
local done = {} local done = {}
-- handle case "found in persistent", replace it -- handle case "found in persistent", replace it
for i = 1,#dpl do for i = 1,#dpl do
for j=1,#SetDefaults.bools_name do for j=1,#SetDefaults.defaults_name do
if string.find(dpl[i],SetDefaults.bools_name[j]) == 1 then if string.find(dpl[i],SetDefaults.defaults_name[j]) == 1 then
dpl[i] = build_setting(j) dpl[i] = build_setting(j)
done[j] = true done[j] = true
end end
@ -243,7 +309,7 @@ function SetDefaults:SaveSettings()
-- handle case "exists identical in non-persistent", ignore it -- handle case "exists identical in non-persistent", ignore it
for i = 1,#dl do for i = 1,#dl do
for j=1,#SetDefaults.bools_name do for j=1,#SetDefaults.defaults_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 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 done[j] = true
end end
@ -251,7 +317,7 @@ function SetDefaults:SaveSettings()
end end
-- handle case "not in persistent and different in non-persistent", add to persistent -- handle case "not in persistent and different in non-persistent", add to persistent
for j=1,#SetDefaults.bools_name do for j=1,#SetDefaults.defaults_name do
if not done[j] then if not done[j] then
dpl[#dpl+1] = build_setting(j) dpl[#dpl+1] = build_setting(j)
end end

Loading…
Cancel
Save