j
initial commit
402daee
raw
history blame
2.26 kB
--[[
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