Files
VnUtest/garrysmod/addons/Binder/lua/binder/vgui/cl_profiles_tab.lua
2026-03-31 10:27:04 +03:00

105 lines
3.8 KiB
Lua

-- Garry's Mod Binder - Profiles Tab
local PANEL = {}
function PANEL:Init()
self:Dock(FILL)
self:DockMargin(40, 20, 40, 20)
self.Paint = function() end
-- Title and Description
self.Header = vgui.Create("DPanel", self)
self.Header:Dock(TOP)
self.Header:SetHeight(50)
self.Header.Paint = function(s, w, h)
draw.SimpleText(Binder.GetPhrase("profile_management"), "Binder_Title", 0, 0, Color(255, 255, 255), TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP)
end
-- Profile Grid
self.Grid = vgui.Create("DIconLayout", self)
self.Grid:Dock(FILL)
self.Grid:SetSpaceX(20)
self.Grid:SetSpaceY(20)
self:Refresh()
end
function PANEL:Refresh()
self.Grid:Clear()
local profiles = Binder.Profiles or {}
for i, profile in ipairs(profiles) do
local card = self.Grid:Add("DButton")
card:SetSize(200, 150)
card:SetText("")
card.Paint = function(s, w, h)
local bgColor = profile.Active and Binder.Config.AccentColor or Color(40, 40, 40)
draw.RoundedBox(8, 0, 0, w, h, bgColor)
draw.SimpleText(profile.Name, "Binder_Main", w / 2, h / 2 - 10, Color(255, 255, 255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
local bindCount = table.Count(profile.Binds or {})
draw.SimpleText(Binder.GetPhrase("binds_count", bindCount), "Binder_Small", w / 2, h / 2 + 15, Color(255, 255, 255, 100), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
if profile.Active then
draw.RoundedBox(4, w - 15, 10, 8, 8, Color(0, 255, 0)) -- Active dot
end
end
card.DoClick = function()
-- Set active
for _, p in ipairs(Binder.Profiles) do p.Active = false end
profile.Active = true
Binder.SaveToServer()
self:Refresh()
end
card.DoRightClick = function()
-- Delete profile
if #Binder.Profiles > 1 then
local menu = DermaMenu()
menu:AddOption(Binder.GetPhrase("delete"), function()
table.remove(Binder.Profiles, i)
-- ensure one is active
local hasActive = false
for _, p in ipairs(Binder.Profiles) do if p.Active then hasActive = true break end end
if not hasActive and #Binder.Profiles > 0 then Binder.Profiles[1].Active = true end
Binder.SaveToServer()
self:Refresh()
end):SetIcon("icon16/delete.png")
menu:Open()
end
end
end
-- Create New Profile Buttons (to fill up to 6 as in screenshot)
if #profiles < 6 then
local card = self.Grid:Add("DButton")
card:SetSize(200, 150)
card:SetText("")
card.Paint = function(s, w, h)
draw.RoundedBox(8, 0, 0, w, h, Color(40, 40, 40))
draw.SimpleText("+", "Binder_Title", w / 2, h / 2 - 15, Color(255, 255, 255, 150), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
draw.SimpleText(Binder.GetPhrase("create_profile"), "Binder_Main", w / 2, h / 2 + 20, Color(255, 255, 255, 150), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
card.DoClick = function()
Derma_StringRequest(
Binder.GetPhrase("create_profile"),
"Enter profile name:",
"New Profile",
function(text)
table.insert(Binder.Profiles, {
Name = text,
Binds = {},
Radial = {},
Active = false
})
Binder.SaveToServer()
self:Refresh()
end
)
end
end
end
vgui.Register("Binder_ProfilesTab", PANEL, "EditablePanel")