--[[ | 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" )