105 lines
3.8 KiB
Lua
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")
|