mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
Upload
This commit is contained in:
102
lua/vgui/dpanelselect.lua
Normal file
102
lua/vgui/dpanelselect.lua
Normal 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" )
|
||||
Reference in New Issue
Block a user