add content_config
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
local packs_installed = {}
|
||||
local pack_open = {}
|
||||
|
||||
function on_open(params)
|
||||
refresh()
|
||||
@@ -41,9 +42,140 @@ function refresh_search()
|
||||
end
|
||||
end
|
||||
|
||||
local function create_checkbox(id, name, cheaked)
|
||||
document.configs:add(string.format(
|
||||
"<checkbox id='%s' consumer='function(x) set_value(\"%s\", \"%s\", x) end' checked='%s'>%s</checkbox>",
|
||||
id, name, id, cheaked, name
|
||||
))
|
||||
end
|
||||
|
||||
local function create_textbox(id, name, text)
|
||||
document.configs:add(string.format(
|
||||
"<label id='%s'>%s</label>",
|
||||
id .. "_label", name
|
||||
))
|
||||
document.configs:add(string.format(
|
||||
"<textbox id='%s' consumer='function(x) set_value(\"%s\", \"%s\", x) end' hint='%s'>%s</textbox>",
|
||||
id, name, id, name, text
|
||||
))
|
||||
end
|
||||
|
||||
local function create_trackbar(id, name, val)
|
||||
document.configs:add(string.format(
|
||||
"<label id='%s'>%s (%s)</label>",
|
||||
id .. "_label", name, val
|
||||
))
|
||||
document.configs:add(string.format(
|
||||
"<trackbar id='%s' consumer='function(x) set_value(\"%s\", \"%s\", x) end' value='%s' min='0' max='1000' step='10'>%s</trackbar>",
|
||||
id, name, id, val, name
|
||||
))
|
||||
end
|
||||
|
||||
local function create_label(id, text, color)
|
||||
if id then
|
||||
document.configs:add(string.format(
|
||||
"<label id='%s' color='%s'>%s</label>",
|
||||
id, color, text
|
||||
))
|
||||
else
|
||||
document.configs:add(string.format(
|
||||
"<label>%s</label>",
|
||||
text
|
||||
))
|
||||
end
|
||||
end
|
||||
|
||||
local function create_config(i, config, name, path)
|
||||
create_label(name, '[' .. name .. ']', "#008000")
|
||||
pack_open[2][i] = {{}, path = path}
|
||||
for _, a in ipairs(config.checkboxes) do
|
||||
create_checkbox(i .. '_' .. a[1], a[1], a[2])
|
||||
pack_open[2][i][1][a[1]] = type(a[2])
|
||||
end
|
||||
create_label(nil, '', 0)
|
||||
for _, a in ipairs(config.trackbars) do
|
||||
create_trackbar(i .. '_' .. a[1], a[1], a[2])
|
||||
create_label(nil, '', 0)
|
||||
pack_open[2][i][1][a[1]] = type(a[2])
|
||||
end
|
||||
|
||||
for _, a in ipairs(config.textboxes) do
|
||||
create_textbox(i .. '_' .. a[1], a[1], a[2])
|
||||
create_label(nil, '', 0)
|
||||
pack_open[2][i][1][a[1]] = type(a[2])
|
||||
end
|
||||
create_label(nil, '', 0)
|
||||
end
|
||||
|
||||
|
||||
local function load_config_file(path)
|
||||
local extension = path:match("%.(%w+)$")
|
||||
|
||||
if not extension or file.isdir(path) then
|
||||
return
|
||||
end
|
||||
|
||||
local value = file.read(path)
|
||||
|
||||
if extension == "toml" then
|
||||
return toml.parse(value), extension
|
||||
elseif extension == "json" then
|
||||
return json.parse(value), extension
|
||||
end
|
||||
end
|
||||
|
||||
local function load_config(path)
|
||||
if file.exists(path) then
|
||||
local value = load_config_file(path)
|
||||
local config = {checkboxes = {},
|
||||
trackbars = {},
|
||||
textboxes = {}
|
||||
}
|
||||
|
||||
if not value then
|
||||
return
|
||||
end
|
||||
|
||||
for i, v in pairs(value) do
|
||||
if type(v) == "string" then
|
||||
table.insert(config.textboxes, {i, v})
|
||||
elseif type(v) == "boolean" then
|
||||
table.insert(config.checkboxes, {i, v})
|
||||
elseif type(v) == "number" then
|
||||
table.insert(config.trackbars, {i, v})
|
||||
end
|
||||
end
|
||||
|
||||
return config
|
||||
end
|
||||
end
|
||||
|
||||
function set_value(name, id, value)
|
||||
local config_id = tonumber(id:match("^(%w+)_"))
|
||||
local elem_id = id:match("^[^_]+_(.+)$")
|
||||
local type_val = pack_open[2][config_id][1][elem_id]
|
||||
|
||||
if type_val == 'number' then
|
||||
document[id .. '_label'].text = string.format("%s (%s)", elem_id, value)
|
||||
end
|
||||
|
||||
local path = pack_open[2][config_id].path
|
||||
local config, extension = load_config_file(path)
|
||||
config[name] = value
|
||||
|
||||
if extension == "toml" then
|
||||
file.write(path, toml.tostring(config))
|
||||
elseif extension == "json" then
|
||||
file.write(path, json.tostring(config))
|
||||
end
|
||||
end
|
||||
|
||||
function open_pack(id)
|
||||
local packinfo = pack.get_info(id)
|
||||
pack_open = {id, {}}
|
||||
|
||||
document.configs.visible = false
|
||||
document.content_info.visible = true
|
||||
|
||||
if packinfo['dependencies'] == nil then document.dependencies.text = 'None' else document.dependencies.text = table.tostring(packinfo['dependencies']) end
|
||||
if packinfo['creator'] == '' then document.author.text = 'None' else document.author.text = packinfo['creator'] end
|
||||
@@ -51,11 +183,35 @@ function open_pack(id)
|
||||
if packinfo['description'] == nil then document.description.text = 'None' else document.description.text = packinfo['description'] end
|
||||
end
|
||||
|
||||
function open_config()
|
||||
local id = pack_open[1]
|
||||
if (not document.configs.visible and id) and
|
||||
(file.exists("config:" .. id) and #file.list("config:" .. id) > 0) then
|
||||
|
||||
document.configs:clear()
|
||||
document.configs.visible = true
|
||||
document.content_info.visible = false
|
||||
local configs = file.list("config:" .. id)
|
||||
for i, c in ipairs(configs) do
|
||||
local name = c:match("([^/]+)$")
|
||||
name = name:match("([^%.]+)")
|
||||
local config = load_config(c)
|
||||
|
||||
if config then
|
||||
create_config(i, config, name, c)
|
||||
end
|
||||
end
|
||||
else
|
||||
document.configs.visible = false
|
||||
document.content_info.visible = true
|
||||
end
|
||||
end
|
||||
|
||||
function refresh()
|
||||
local packs_available = pack.get_available()
|
||||
packs_installed = pack.get_installed()
|
||||
|
||||
for i,k in ipairs(packs_available) do
|
||||
for _, k in ipairs(packs_available) do
|
||||
table.insert(packs_installed, k)
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user