Files
wnsrc/lua/sam/menu/tabs/config.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

107 lines
2.5 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/
--]]
if SAM_LOADED then return end
local sam = sam
local config = sam.config
local tabs = {}
if CLIENT then
function config.add_tab(name, func, check, pos)
local tab = {
name = name,
func = func,
check = check,
pos = pos
}
for k, v in ipairs(tabs) do
if v.name == name then
tabs[k] = tab
return
end
end
table.insert(tabs, tab)
end
end
for _, f in ipairs(file.Find("sam/menu/tabs/config/*.lua", "LUA")) do
sam.load_file("sam/menu/tabs/config/" .. f, "cl_")
end
if SERVER then return end
local SUI = sam.SUI
local GetColor = SUI.GetColor
local Line = sui.TDLib.LibClasses.Line
sam.menu.add_tab("https://raw.githubusercontent.com/Srlion/Addons-Data/main/icons/sam/config.png", function(column_sheet)
local tab_body = column_sheet:Add("Panel")
tab_body:Dock(FILL)
tab_body:DockMargin(0, 1, 0, 0)
do
local title = tab_body:Add("SAM.Label")
title:Dock(TOP)
title:DockMargin(10, 10, 0, 0)
title:SetFont(SAM_TAB_TITLE_FONT)
title:SetText("Config")
title:SetTextColor(GetColor("menu_tabs_title"))
title:SizeToContents()
local total = tab_body:Add("SAM.Label")
total:Dock(TOP)
total:DockMargin(10, 6, 0, 0)
total:SetFont(SAM_TAB_DESC_FONT)
total:SetText("Some settings may require a server restart")
total:SetTextColor(GetColor("menu_tabs_title"))
total:SetPos(10, SUI.Scale(40))
total:SizeToContents()
end
local body = tab_body:Add("Panel")
body:Dock(FILL)
body:DockMargin(10, 5, 10, 10)
Line(body, nil, 0, 0, 0, 10)
local sheet = body:Add("SAM.PropertySheet")
sheet:Dock(FILL)
sheet:InvalidateParent(true)
sheet:InvalidateLayout(true)
local sheets = {}
for _, v in SortedPairsByMemberValue(tabs, "pos") do
sheets[v.name] = sheet:AddSheet(v.name, v.func)
end
local tab_scroller = sheet.tab_scroller:GetCanvas()
function tab_body.Think()
for _, v in ipairs(tabs) do
local tab = sheets[v.name]
if v.check and not v.check() then
if tab:IsVisible() then
tab:SetVisible(false)
if sheet:GetActiveTab() == tab then
sheet:SetActiveTab(sheet.tabs[1])
end
tab_scroller:InvalidateLayout()
end
elseif not tab:IsVisible() then
tab:SetVisible(true)
tab_scroller:InvalidateLayout()
end
end
end
return tab_body
end, function()
return LocalPlayer():HasPermission("manage_config")
end, 5)