This commit is contained in:
lifestorm
2024-08-04 22:55:00 +03:00
parent 0e770b2b49
commit 94063e4369
7342 changed files with 1718932 additions and 14 deletions

102
lua/vgui/dpanelselect.lua Normal file
View File

@@ -0,0 +1,102 @@
--[[
| 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 PANEL = {}
-- This function is used as the paint function for selected buttons.
local function DrawSelected( self )
surface.SetDrawColor( 255, 200, 0, 255 )
for i = 2, 3 do
surface.DrawOutlinedRect( i, i, self:GetWide() - i * 2, self:GetTall() - i * 2 )
end
end
function PANEL:Init()
self:EnableHorizontal( true )
self:EnableVerticalScrollbar()
self:SetSpacing( 2 )
self:SetPadding( 2 )
end
function PANEL:AddPanel( pnl, tblConVars )
pnl.tblConVars = tblConVars
pnl.DoClick = function() self:SelectPanel( pnl ) end
self:AddItem( pnl )
self:FindBestActive()
end
function PANEL:OnActivePanelChanged( pnlOld, pnlNew )
-- For override
end
function PANEL:SelectPanel( pnl )
self:OnActivePanelChanged( self.SelectedPanel, pnl )
if ( self.SelectedPanel ) then
self.SelectedPanel.PaintOver = self.OldSelectedPaintOver
self.SelectedPanel = nil
end
-- Run all the convars, if it has any..
if ( pnl.tblConVars ) then
for k, v in pairs( pnl.tblConVars ) do RunConsoleCommand( k, v ) end
end
self.SelectedPanel = pnl
if ( self.SelectedPanel ) then
self.OldSelectedPaintOver = self.SelectedPanel.PaintOver
self.SelectedPanel.PaintOver = DrawSelected
end
end
function PANEL:FindBestActive()
-- Select the item that resembles the chosen panel the closest
local BestCandidate = nil
local BestNumMatches = 0
for id, panel in pairs( self:GetItems() ) do
local ItemMatches = 0
if ( panel.tblConVars ) then
for key, value in pairs( panel.tblConVars ) do
if ( GetConVarString( key ) == tostring( value ) ) then ItemMatches = ItemMatches + 1 end
end
end
if ( ItemMatches > BestNumMatches ) then
BestCandidate = panel
BestNumMatches = ItemMatches
end
end
if ( BestCandidate ) then
self:SelectPanel( BestCandidate )
end
end
derma.DefineControl( "DPanelSelect", "", PANEL, "DPanelList" )