reset configurable before loading new options

pull/530/head
chrox 10 years ago
parent 5157a67ce2
commit bd0ba69d08

@ -1,49 +1,66 @@
local Configurable = {} local Configurable = {}
function Configurable:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
function Configurable:reset()
for key,value in pairs(self) do
if type(value) == "number" or type(value) == "string" then
self[key] = nil
end
end
end
function Configurable:hash(sep) function Configurable:hash(sep)
local hash = "" local hash = ""
local excluded = {multi_threads = true,} local excluded = {multi_threads = true,}
for key,value in pairs(self) do for key,value in pairs(self) do
if type(value) == "number" or type(value) == "string" if type(value) == "number" or type(value) == "string" then
and not excluded[key] then hash = hash..sep..value
hash = hash..sep..value end
end end
end return hash
return hash
end end
function Configurable:loadDefaults(config_options) function Configurable:loadDefaults(config_options)
for i=1,#config_options do -- reset configurable before loading new options
local options = config_options[i].options self:reset()
for j=1,#config_options[i].options do for i=1,#config_options do
local key = config_options[i].options[j].name local options = config_options[i].options
self[key] = config_options[i].options[j].default_value for j=1,#config_options[i].options do
if not self[key] then local key = config_options[i].options[j].name
self[key] = config_options[i].options[j].default_arg self[key] = config_options[i].options[j].default_value
end if not self[key] then
end self[key] = config_options[i].options[j].default_arg
end end
end
end
end end
function Configurable:loadSettings(settings, prefix) function Configurable:loadSettings(settings, prefix)
for key,value in pairs(self) do for key,value in pairs(self) do
if type(value) == "number" or type(value) == "string" if type(value) == "number" or type(value) == "string"
or type(value) == "table" then or type(value) == "table" then
local saved_value = settings:readSetting(prefix..key) local saved_value = settings:readSetting(prefix..key)
self[key] = (saved_value == nil) and self[key] or saved_value self[key] = (saved_value == nil) and self[key] or saved_value
--Debug("Configurable:loadSettings", "key", key, "saved value", saved_value,"Configurable.key", self[key]) --Debug("Configurable:loadSettings", "key", key, "saved value",
end --saved_value,"Configurable.key", self[key])
end end
--Debug("loaded config:", dump(Configurable)) end
--Debug("loaded config:", dump(Configurable))
end end
function Configurable:saveSettings(settings, prefix) function Configurable:saveSettings(settings, prefix)
for key,value in pairs(self) do for key,value in pairs(self) do
if type(value) == "number" or type(value) == "string" if type(value) == "number" or type(value) == "string"
or type(value) == "table" then or type(value) == "table" then
settings:saveSetting(prefix..key, value) settings:saveSetting(prefix..key, value)
end end
end end
end end
return Configurable return Configurable

Loading…
Cancel
Save