mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
110 lines
2.1 KiB
Lua
110 lines
2.1 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
|
|
local function list(mid, name, store, populate)
|
|
local list = vgui.Create("DListView", mid)
|
|
list:AddColumn(name)
|
|
|
|
function list:Refresh()
|
|
self:Clear()
|
|
|
|
self.data = populate()
|
|
|
|
for _, kv in ipairs(self.data) do
|
|
self:AddLine(kv.name)
|
|
end
|
|
end
|
|
|
|
function list:Store()
|
|
for _, line in ipairs(list:GetSelected()) do
|
|
local i = line:GetID()
|
|
local kv = self.data[i]
|
|
if kv then
|
|
store(kv)
|
|
end
|
|
end
|
|
end
|
|
|
|
function list:Populate()
|
|
self:Clear()
|
|
self.data = populate()
|
|
end
|
|
|
|
list:Refresh()
|
|
|
|
return list
|
|
end
|
|
|
|
return function(form, name, props)
|
|
local pnl = vgui.Create("Panel", form)
|
|
pnl:SetTall(200)
|
|
|
|
pnl.left = list(pnl, props.name_left, props.store_left, props.populate_left)
|
|
pnl.right = list(pnl, props.name_right, props.store_right, props.populate_right)
|
|
|
|
local button = vgui.Create("DButton", pnl)
|
|
button:SetText(props.empty_message)
|
|
|
|
local store = function() end
|
|
local selected_side = pnl.left
|
|
|
|
pnl.left.OnRowSelected = function()
|
|
pnl.right:ClearSelection()
|
|
store = function() pnl.left:Store() end
|
|
button:SetText("add to " .. name)
|
|
end
|
|
|
|
pnl.right.OnRowSelected = function()
|
|
pnl.left:ClearSelection()
|
|
store = function() pnl.right:Store() end
|
|
button:SetText("remove from " .. name)
|
|
end
|
|
|
|
local function select()
|
|
if #pnl.left:GetLines() == 0 then
|
|
selected_side = pnl.right
|
|
end
|
|
|
|
if #pnl.right:GetLines() == 0 then
|
|
selected_side = pnl.left
|
|
end
|
|
|
|
selected_side:SelectFirstItem()
|
|
end
|
|
|
|
button.DoClick = function()
|
|
store()
|
|
|
|
pnl.left:Refresh()
|
|
pnl.right:Refresh()
|
|
|
|
select()
|
|
end
|
|
|
|
select()
|
|
|
|
pnl.Think = function()
|
|
local p = 5
|
|
local w = pnl:GetWide() / 2
|
|
local h = pnl:GetTall() - button:GetTall() - p
|
|
|
|
pnl.left:SetWide(w)
|
|
pnl.left:SetTall(h)
|
|
|
|
pnl.right:SetWide(w + 1)
|
|
pnl.right:SetTall(h)
|
|
|
|
pnl.right:MoveRightOf(pnl.left, -1)
|
|
|
|
button:MoveBelow(pnl.left, p)
|
|
button:CopyWidth(pnl)
|
|
end
|
|
end |