mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
99
lua/sui/vgui/sui_threegrid.lua
Normal file
99
lua/sui/vgui/sui_threegrid.lua
Normal file
@@ -0,0 +1,99 @@
|
||||
--[[
|
||||
| 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 math = math
|
||||
local table = table
|
||||
local ipairs = ipairs
|
||||
|
||||
local SUI, NAME = CURRENT_SUI, CURRENT_SUI.name
|
||||
|
||||
local Panel = {}
|
||||
|
||||
AccessorFunc(Panel, "horizontalMargin", "HorizontalMargin", FORCE_NUMBER)
|
||||
AccessorFunc(Panel, "verticalMargin", "VerticalMargin", FORCE_NUMBER)
|
||||
AccessorFunc(Panel, "columns", "Columns", FORCE_NUMBER)
|
||||
AccessorFunc(Panel, "Wide2", "Wide2", FORCE_NUMBER)
|
||||
|
||||
function Panel:Init()
|
||||
self:SetHorizontalMargin(0)
|
||||
self:SetVerticalMargin(0)
|
||||
self.Rows = {}
|
||||
self.Cells = {}
|
||||
end
|
||||
|
||||
function Panel:AddCell(pnl)
|
||||
local cols = self:GetColumns()
|
||||
local idx = math.floor(#self.Cells / cols) + 1
|
||||
|
||||
local rows = self.Rows[idx]
|
||||
if not rows then
|
||||
rows = self:CreateRow()
|
||||
self.Rows[idx] = rows
|
||||
end
|
||||
|
||||
local margin = self:GetHorizontalMargin()
|
||||
|
||||
local dockl, dockt, _, dockb = pnl:GetDockMargin()
|
||||
pnl:SetParent(rows)
|
||||
pnl:Dock(LEFT)
|
||||
pnl:DockMargin(dockl, dockt, #rows.Items + 1 < cols and self:GetHorizontalMargin() or 0, dockb)
|
||||
pnl:SetWide(((self:GetWide2() or self:GetWide()) - margin * (cols - 1)) / cols)
|
||||
|
||||
table.insert(rows.Items, pnl)
|
||||
table.insert(self.Cells, pnl)
|
||||
|
||||
self:CalculateRowHeight(rows)
|
||||
end
|
||||
|
||||
function Panel:CreateRow()
|
||||
local row = self:Add("Panel")
|
||||
row:Dock(TOP)
|
||||
row:DockMargin(0, 0, 0, self:GetVerticalMargin())
|
||||
row.Items = {}
|
||||
|
||||
return row
|
||||
end
|
||||
|
||||
function Panel:CalculateRowHeight(row)
|
||||
local height = 0
|
||||
|
||||
for k, v in ipairs(row.Items) do
|
||||
local _, t, _, b = v:GetDockMargin()
|
||||
height = math.max(height, v:GetTall() + t + b)
|
||||
end
|
||||
|
||||
row:SetTall(height)
|
||||
end
|
||||
|
||||
function Panel:Skip()
|
||||
local cell = vgui.Create("Panel")
|
||||
self:AddCell(cell)
|
||||
end
|
||||
|
||||
function Panel:CalculateRowHeights()
|
||||
for _, row in ipairs(self.Rows) do
|
||||
self:CalculateRowHeight(row)
|
||||
end
|
||||
end
|
||||
|
||||
function Panel:Clear()
|
||||
for _, row in ipairs(self.Rows) do
|
||||
for _, cell in ipairs(row.Items) do
|
||||
cell:Remove()
|
||||
end
|
||||
|
||||
row:Remove()
|
||||
end
|
||||
|
||||
self.Cells, self.Rows = {}, {}
|
||||
end
|
||||
|
||||
Panel.OnRemove = Panel.Clear
|
||||
sui.register("ThreeGrid", Panel, NAME .. ".ScrollPanel")
|
||||
Reference in New Issue
Block a user