mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
142
lua/sui/vgui/sui_zcolumn_sheet.lua
Normal file
142
lua/sui/vgui/sui_zcolumn_sheet.lua
Normal file
@@ -0,0 +1,142 @@
|
||||
--[[
|
||||
| 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 IsValid = IsValid
|
||||
|
||||
local TDLib_Classes = sui.TDLib.LibClasses
|
||||
local SUI, NAME = CURRENT_SUI, CURRENT_SUI.name
|
||||
|
||||
local GetColor = SUI.GetColor
|
||||
|
||||
local Panel = {}
|
||||
|
||||
function Panel:Init()
|
||||
self.tabs = {}
|
||||
|
||||
local tab_scroller = self:Add(NAME .. ".ScrollPanel")
|
||||
tab_scroller:Dock(LEFT)
|
||||
|
||||
function tab_scroller:Paint(w, h)
|
||||
self:RoundedBox("Background", 1, 0, 0, w, h, GetColor("column_sheet_bar"))
|
||||
end
|
||||
|
||||
self.tabs_wide = 48
|
||||
self.tab_scroller = tab_scroller
|
||||
|
||||
self:ScaleChanged()
|
||||
SUI.OnScaleChanged(self, self.ScaleChanged)
|
||||
end
|
||||
|
||||
function Panel:ScaleChanged()
|
||||
local tabs_wide = SUI.Scale(self.tabs_wide)
|
||||
self.tab_scroller:SetWide(tabs_wide)
|
||||
|
||||
self:InvalidateLayout(true)
|
||||
|
||||
local tabs = self.tabs
|
||||
for i = 1, #self.tabs do
|
||||
tabs[i].img:SetMinus(SUI.Scale(20))
|
||||
end
|
||||
end
|
||||
|
||||
function Panel:Paint(w, h)
|
||||
self:RoundedBox("Background", 1, 0, 0, w, h, GetColor("column_sheet"))
|
||||
end
|
||||
|
||||
local tab_DoClick = function(s)
|
||||
s.parent:SetActiveTab(s)
|
||||
end
|
||||
|
||||
local tab_Paint = function(s, w, h)
|
||||
local cur_col
|
||||
if s.active then
|
||||
cur_col = GetColor("column_sheet_tab_active")
|
||||
elseif s.Hovered then
|
||||
cur_col = GetColor("column_sheet_tab_hover")
|
||||
else
|
||||
cur_col = GetColor("column_sheet_tab")
|
||||
end
|
||||
|
||||
s:RoundedBox("Backgrounds", 0, 0, 0, w, h, cur_col)
|
||||
end
|
||||
|
||||
local tab_OnRemove = function(s)
|
||||
table.RemoveByValue(s.parent.tabs, s)
|
||||
end
|
||||
|
||||
function Panel:AddSheet(mat, load_func)
|
||||
local tab = self.tab_scroller:Add(NAME .. ".Button")
|
||||
tab:Dock(TOP)
|
||||
tab:SetText("")
|
||||
tab:SetTall(self.tabs_wide)
|
||||
|
||||
tab.On = TDLib_Classes.On
|
||||
|
||||
tab.DoClick = tab_DoClick
|
||||
tab.Paint = tab_Paint
|
||||
tab:On("OnRemove", tab_OnRemove)
|
||||
|
||||
tab.parent = self
|
||||
tab.load_func = load_func
|
||||
|
||||
local img = tab:Add(NAME .. ".Image")
|
||||
img:Dock(FILL)
|
||||
img:SetImage(mat)
|
||||
img:SetMinus(SUI.Scale(20))
|
||||
|
||||
tab.img = img
|
||||
|
||||
self.tab_scroller:AddItem(tab)
|
||||
|
||||
if not self:GetActiveTab() then
|
||||
self:SetActiveTab(tab)
|
||||
end
|
||||
|
||||
table.insert(self.tabs, tab)
|
||||
|
||||
return tab
|
||||
end
|
||||
|
||||
function Panel:GetActiveTab()
|
||||
return self.active_tab
|
||||
end
|
||||
|
||||
function Panel:SetActiveTab(new_tab)
|
||||
if new_tab == self.active_tab then return end
|
||||
|
||||
if not IsValid(new_tab.panel) then
|
||||
local panel = new_tab.load_func(self)
|
||||
panel:SetParent(self)
|
||||
panel:SetVisible(false)
|
||||
panel:SetAlpha(0)
|
||||
|
||||
panel.tab = new_tab
|
||||
new_tab.panel = panel
|
||||
end
|
||||
|
||||
local old_active_tab = self.active_tab
|
||||
local delay = 0
|
||||
if old_active_tab and IsValid(old_active_tab.panel) then
|
||||
old_active_tab.active = false
|
||||
delay = 0.2
|
||||
old_active_tab.panel:AlphaTo(0, delay, 0, function(_, p)
|
||||
if p:IsValid() then
|
||||
p:SetVisible(false)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
new_tab.active = true
|
||||
new_tab.panel:SetVisible(true)
|
||||
new_tab.panel:AlphaTo(255, 0.2, delay)
|
||||
self.active_tab = new_tab
|
||||
end
|
||||
|
||||
sui.register("ColumnSheet", Panel, "EditablePanel")
|
||||
Reference in New Issue
Block a user