VoxelEngine/res/layouts/pages/content.xml.lua
2024-05-02 04:07:07 +03:00

86 lines
2.3 KiB
Lua

function on_open()
refresh()
end
-- // FIXME: dependency checks
add_packs = {}
rem_packs = {}
function apply()
core.reconfig_packs(add_packs, rem_packs)
end
function refresh_changes()
document.apply_btn.enabled = (#add_packs>0) or (#rem_packs>0)
end
function move_pack(id)
-- cancel pack addition
if table.has(add_packs, id) then
document["pack_"..id]:move_into(document.packs_add)
table.remove_value(add_packs, id)
-- cancel pack removal
elseif table.has(rem_packs, id) then
document["pack_"..id]:move_into(document.packs_cur)
table.remove_value(rem_packs, id)
-- add pack
elseif table.has(packs_installed, id) then
document["pack_"..id]:move_into(document.packs_add)
table.insert(rem_packs, id)
-- remove pack
else
document["pack_"..id]:move_into(document.packs_cur)
table.insert(add_packs, id)
end
refresh_changes()
end
function place_pack(panel, packid, packinfo, callback)
packinfo.id = packid
callback = callback or ""
if packinfo.has_indices then
packid = packid.."*"
end
packinfo.id_verbose = packid
packinfo.callback = callback
panel:add(gui.template("pack", packinfo))
end
function refresh()
packs_installed = pack.get_installed()
packs_available = pack.get_available()
local packs_cur = document.packs_cur
local packs_add = document.packs_add
packs_cur:clear()
packs_add:clear()
refresh_changes()
for i,id in ipairs(packs_installed) do
local packinfo = pack.get_info(id)
packinfo.index = i
callback = id ~= "base" and string.format('move_pack("%s")', id) or nil
place_pack(packs_cur, id, packinfo, callback)
end
for i,id in ipairs(packs_available) do
local packinfo = pack.get_info(id)
packinfo.index = i
callback = string.format('move_pack("%s")', id)
place_pack(packs_add, id, packinfo, callback)
end
-- apply packs movements
for i,id in ipairs(packs_installed) do
if table.has(rem_packs, id) then
document["pack_"..id]:move_into(packs_add)
end
end
for i,id in ipairs(packs_available) do
if table.has(add_packs, id) then
document["pack_"..id]:move_into(packs_cur)
end
end
end