mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
180 lines
5.5 KiB
Lua
180 lines
5.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/
|
|
--]]
|
|
|
|
local font = slib.createFont("Roboto", 14)
|
|
local textcolor, neutralcolor, successcolor, failcolor, maincolor_7, maincolor_10, maincolor_15, maincolor_25 = slib.getTheme("textcolor"), slib.getTheme("neutralcolor"), slib.getTheme("successcolor"), slib.getTheme("failcolor"), slib.getTheme("maincolor", 7), slib.getTheme("maincolor", 10), slib.getTheme("maincolor", 15), slib.getTheme("maincolor", 25)
|
|
|
|
local PANEL = {}
|
|
|
|
function PANEL:Init()
|
|
self:Dock(TOP)
|
|
self:SetTall(slib.getScaledSize(250, "y"))
|
|
self:DockMargin(slib.getTheme("margin"),0,slib.getTheme("margin"),slib.getTheme("margin"))
|
|
|
|
self.frame = vgui.Create("SScrollPanel", self)
|
|
self.frame:Dock(FILL)
|
|
|
|
self.frame.Paint = function(s,w,h)
|
|
surface.SetDrawColor(maincolor_10)
|
|
surface.DrawRect(0, 0, w, h)
|
|
end
|
|
|
|
self.selected = false
|
|
|
|
slib.wrapFunction(self, "SetZPos", nil, function() return self end, true)
|
|
slib.wrapFunction(self, "SetTall", nil, function() return self end, true)
|
|
slib.wrapFunction(self, "DockMargin", nil, function() return self end, true)
|
|
slib.wrapFunction(self, "Dock", nil, function() return self end, true)
|
|
end
|
|
|
|
function PANEL:addEntry(var, toggleable, tab)
|
|
title = var
|
|
if !isstring(var) and IsValid(var) and var:IsPlayer() then title = var:Nick() end
|
|
|
|
local selectable = vgui.Create("DButton", self.frame)
|
|
selectable:SetTall(slib.getScaledSize(25, "y"))
|
|
selectable:Dock(TOP)
|
|
selectable:DockMargin(slib.getTheme("margin"),slib.getTheme("margin"),slib.getTheme("margin"),0)
|
|
selectable:SetText("")
|
|
selectable.name = title
|
|
selectable.tab = tab
|
|
selectable.toggleable = toggleable
|
|
|
|
selectable.Paint = function(s,w,h)
|
|
if !isstring(var) and !IsValid(var) then s:Remove() return end
|
|
|
|
local wantedcolor
|
|
|
|
if s.toggleable then
|
|
if isfunction(s.toggleCheck) then
|
|
wantedcolor = s.toggleCheck() and successcolor or failcolor
|
|
end
|
|
else
|
|
wantedcolor = neutralcolor
|
|
end
|
|
|
|
wantedcolor.a = 40
|
|
if !s.toggleable and self.selected ~= var then
|
|
wantedcolor.a = 0
|
|
end
|
|
|
|
surface.SetDrawColor(slib.lerpColor(s, wantedcolor))
|
|
surface.DrawRect(0, 0, w, h)
|
|
|
|
surface.SetDrawColor(maincolor_25)
|
|
surface.DrawOutlinedRect(0, 0, w, h)
|
|
|
|
|
|
draw.SimpleText(selectable.name, font, 5, h * .5, textcolor, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
|
|
end
|
|
|
|
selectable.DoClick = function()
|
|
self.selected = (self.selected ~= var) and var or nil
|
|
end
|
|
|
|
return self, selectable
|
|
end
|
|
|
|
function PANEL:setTitle(title)
|
|
self.title = title
|
|
|
|
if !self.topbar then
|
|
self.topbar = vgui.Create("EditablePanel", self)
|
|
self.topbar:SetTall(slib.getScaledSize(25, "y"))
|
|
self.topbar:Dock(TOP)
|
|
|
|
self.topbar.Paint = function(s,w,h)
|
|
surface.SetDrawColor(maincolor_7)
|
|
surface.DrawRect(0, 0, w, h)
|
|
|
|
surface.SetDrawColor(maincolor_25)
|
|
surface.DrawRect(0,h-1,w,1)
|
|
|
|
draw.SimpleText(self.title, font, slib.getTheme("margin"), h * .5, textcolor, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
|
|
end
|
|
end
|
|
|
|
return self
|
|
end
|
|
|
|
function PANEL:addSearchbar()
|
|
self.search = vgui.Create("SSearchBar", self.topbar)
|
|
self.search:Dock(RIGHT)
|
|
:DockMargin(slib.getTheme("margin"),slib.getTheme("margin"),slib.getTheme("margin"),slib.getTheme("margin"))
|
|
|
|
self.search.entry.bg = maincolor_15
|
|
self.search.entry.onValueChange = function(newval)
|
|
for k,v in pairs(self.frame:GetCanvas():GetChildren()) do
|
|
v:SetVisible(string.find(string.lower(v.name), string.lower(newval)))
|
|
|
|
self.frame:GetCanvas():InvalidateLayout(true)
|
|
end
|
|
end
|
|
|
|
self.topbar.OnSizeChanged = function()
|
|
self.search:SetWide(self.topbar:GetWide() * .35)
|
|
end
|
|
|
|
return self
|
|
end
|
|
|
|
function PANEL:addDropdown()
|
|
self.dropdown = vgui.Create("SDropDown", self.topbar)
|
|
self.dropdown:Dock(RIGHT)
|
|
:DockMargin(slib.getTheme("margin"),slib.getTheme("margin"),slib.getTheme("margin"),slib.getTheme("margin"))
|
|
|
|
self.dropdown.bg = maincolor_15
|
|
|
|
self.dropdown.onValueChange = function(newtab)
|
|
for k,v in pairs(self.frame:GetCanvas():GetChildren()) do
|
|
v:SetVisible(v.tab == newtab)
|
|
self.frame:GetCanvas():InvalidateLayout(true)
|
|
end
|
|
end
|
|
|
|
self.topbar.OnSizeChanged = function()
|
|
self.dropdown:SetWide(self.topbar:GetWide() * .35)
|
|
end
|
|
|
|
return self.dropdown
|
|
end
|
|
|
|
function PANEL:addButton(title, func, thnk)
|
|
if !self.bottombar then
|
|
self.bottombar = vgui.Create("EditablePanel", self)
|
|
self.bottombar:Dock(BOTTOM)
|
|
self.bottombar:SetTall(slib.getScaledSize(25,"x"))
|
|
|
|
self.bottombar.Paint = function(s,w,h)
|
|
surface.SetDrawColor(maincolor_25)
|
|
surface.DrawRect(0, 0, w, 1)
|
|
end
|
|
end
|
|
|
|
local bttn = vgui.Create("SButton", self.bottombar)
|
|
bttn:Dock(LEFT)
|
|
:setTitle(title)
|
|
:DockMargin(slib.getTheme("margin"),slib.getTheme("margin"),0,slib.getTheme("margin"))
|
|
|
|
bttn.DoClick = function() func(self, bttn) end
|
|
|
|
if thnk then
|
|
bttn.Think = function() thnk(self, bttn) end
|
|
end
|
|
|
|
return self, bttn
|
|
end
|
|
|
|
function PANEL:Paint(w,h)
|
|
surface.SetDrawColor(maincolor_10)
|
|
surface.DrawRect(0, 0, w, h)
|
|
end
|
|
|
|
vgui.Register("SListPanel", PANEL, "EditablePanel") |