mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-18 14:13:46 +03:00
Upload
This commit is contained in:
110
lua/pac3/editor/client/panels/list.lua
Normal file
110
lua/pac3/editor/client/panels/list.lua
Normal file
@@ -0,0 +1,110 @@
|
||||
--[[
|
||||
| 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
|
||||
Reference in New Issue
Block a user