Spaces:
Sleeping
Sleeping
--[[ | |
OptionsConfig.lua - General options configuration data model | |
]]-- | |
-- Constructor | |
-- | |
-- Parameters: | |
-- section: Section to write in reaper-extstate.ini | |
-- options: Mapping from option names to {type, default} pairs | |
-- type can be one of: 'string', 'number', 'boolean' | |
-- | |
-- Example: | |
-- local options = OptionsConfig:new { | |
-- section = "ReaSpeech.Options", | |
-- options = { | |
-- patties_per_burger = {'number', 2}, | |
-- ... | |
-- } | |
-- } | |
-- | |
OptionsConfig = {} | |
OptionsConfig.__index = OptionsConfig | |
function OptionsConfig:new(o) | |
o = o or {} | |
setmetatable(o, self) | |
assert(o.section, 'section is required') | |
o.options = o.options or {} | |
return o | |
end | |
function OptionsConfig:get(name) | |
local option = self.options[name] | |
assert(option, 'undefined option ' .. name) | |
local option_type, option_default = table.unpack(option) | |
if self:exists(name) then | |
local str = reaper.GetExtState(self.section, name) | |
if option_type == 'number' then | |
return self:_string_to_number(str) | |
elseif option_type == 'boolean' then | |
return self:_string_to_boolean(str) | |
else | |
return str | |
end | |
else | |
return option_default | |
end | |
end | |
function OptionsConfig:set(name, value) | |
local option = self.options[name] | |
assert(option, 'undefined option ' .. name) | |
local option_type, _ = table.unpack(option) | |
local str | |
if option_type == 'number' then | |
str = self:_number_to_string(value) | |
elseif option_type == 'boolean' then | |
str = self:_boolean_to_string(value) | |
else | |
str = tostring(value) | |
end | |
reaper.SetExtState(self.section, name, str, true) | |
end | |
function OptionsConfig:delete(name) | |
assert(self.options[name], 'undefined option ' .. name) | |
reaper.DeleteExtState(self.section, name, true) | |
end | |
function OptionsConfig:exists(name) | |
assert(self.options[name], 'undefined option ' .. name) | |
return reaper.HasExtState(self.section, name) | |
end | |
function OptionsConfig:_string_to_number(str) | |
return tonumber(str) or 0 | |
end | |
function OptionsConfig:_string_to_boolean(str) | |
return str == 'true' | |
end | |
function OptionsConfig:_number_to_string(num) | |
return tostring(tonumber(num) or 0) | |
end | |
function OptionsConfig:_boolean_to_string(bool) | |
return bool and 'true' or 'false' | |
end | |