Files
wnsrc/lua/vgui/dnumpad.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

181 lines
4.4 KiB
Lua

--[[
| 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 KP_ENTER = 11
local KP_PERIOD = 10
local KP_PLUS = 12
local KP_MINUS = 13
local KP_STAR = 14
local KP_DIV = 15
local PANEL = {}
AccessorFunc( PANEL, "m_SelectedButton", "Selected" )
AccessorFunc( PANEL, "m_iSelectedNumber", "SelectedNumber" )
AccessorFunc( PANEL, "m_iPadding", "Padding" )
AccessorFunc( PANEL, "m_bButtonSize", "ButtonSize" )
AccessorFunc( PANEL, "m_bStickyKeys", "StickyKeys" ) -- Should keys stay selected when pressed? (like the spawn menu)
Derma_Install_Convar_Functions( PANEL )
function PANEL:Init()
self.Buttons = {}
for i = 0, 15 do
self.Buttons[ i ] = vgui.Create( "DButton", self )
self.Buttons[ i ]:SetText( i )
self.Buttons[ i ].DoClick = function( btn ) self:ButtonPressed( btn, i ) end
end
self.Buttons[KP_ENTER]:SetText( "" )
self.Buttons[KP_PERIOD]:SetText( "." )
self.Buttons[KP_PLUS]:SetText( "+" )
self.Buttons[KP_MINUS]:SetText( "-" )
self.Buttons[KP_STAR]:SetText( "*" )
self.Buttons[KP_DIV]:SetText( "/" )
self.Buttons[0]:SetContentAlignment( 4 )
self.Buttons[0]:SetTextInset( 6, 0 )
self:SetStickyKeys( true )
self:SetButtonSize( 17 )
self:SetPadding( 4 )
self:SetSelectedNumber( -1 )
end
function PANEL:ButtonPressed( btn, iNum )
-- Toggle off
if ( self.m_bStickyKeys && self.m_SelectedButton && self.m_SelectedButton == btn ) then
self.m_SelectedButton:SetSelected( false )
self:SetSelected( -1 )
return
end
self:SetSelected( iNum )
self:OnButtonPressed( iNum, btn )
end
function PANEL:SetSelected( iNum )
local btn = self.Buttons[ iNum ]
self:SetSelectedNumber( iNum )
self:ConVarChanged( iNum )
if ( self.m_SelectedButton ) then
self.m_SelectedButton:SetSelected( false )
end
self.m_SelectedButton = btn
if ( btn && self.m_bStickyKeys ) then
btn:SetSelected( true )
end
end
function PANEL:OnButtonPressed( iButtonNumber, pButton )
-- Override this.
end
function PANEL:PerformLayout()
local ButtonSize = self:GetButtonSize()
local Padding = self:GetPadding()
self:SetSize( ButtonSize * 4 + Padding * 2, ButtonSize * 5 + Padding * 2 )
self.Buttons[ 0 ]:SetSize( ButtonSize * 2, ButtonSize )
self.Buttons[ 0 ]:AlignBottom( Padding )
self.Buttons[ 0 ]:AlignLeft( Padding )
self.Buttons[KP_PERIOD]:CopyBounds( self.Buttons[0] )
self.Buttons[KP_PERIOD]:SetSize( ButtonSize, ButtonSize )
self.Buttons[KP_PERIOD]:MoveRightOf( self.Buttons[0] )
self.Buttons[1]:SetSize( ButtonSize, ButtonSize )
self.Buttons[1]:AlignLeft( Padding )
self.Buttons[1]:MoveAbove( self.Buttons[ 0 ] )
self.Buttons[2]:CopyBounds( self.Buttons[1] )
self.Buttons[2]:MoveRightOf( self.Buttons[1] )
self.Buttons[3]:CopyBounds( self.Buttons[2] )
self.Buttons[3]:MoveRightOf( self.Buttons[2] )
self.Buttons[KP_ENTER]:SetSize( ButtonSize, ButtonSize * 2 )
self.Buttons[KP_ENTER]:AlignBottom( Padding )
self.Buttons[KP_ENTER]:AlignRight( Padding )
self.Buttons[KP_PLUS]:CopyBounds( self.Buttons[KP_ENTER] )
self.Buttons[KP_PLUS]:MoveAbove( self.Buttons[KP_ENTER] )
self.Buttons[KP_MINUS]:CopyBounds( self.Buttons[KP_PLUS] )
self.Buttons[KP_MINUS]:SetSize( ButtonSize, ButtonSize )
self.Buttons[KP_MINUS]:MoveAbove( self.Buttons[KP_PLUS] )
self.Buttons[KP_STAR]:CopyBounds( self.Buttons[KP_MINUS] )
self.Buttons[KP_STAR]:MoveLeftOf( self.Buttons[KP_MINUS] )
self.Buttons[KP_DIV]:CopyBounds( self.Buttons[KP_STAR] )
self.Buttons[KP_DIV]:MoveLeftOf( self.Buttons[KP_STAR] )
self.Buttons[4]:CopyBounds( self.Buttons[1] )
self.Buttons[4]:MoveAbove( self.Buttons[1] )
self.Buttons[5]:CopyBounds( self.Buttons[4] )
self.Buttons[5]:MoveRightOf( self.Buttons[4] )
self.Buttons[6]:CopyBounds( self.Buttons[5] )
self.Buttons[6]:MoveRightOf( self.Buttons[5] )
self.Buttons[7]:CopyBounds( self.Buttons[4] )
self.Buttons[7]:MoveAbove( self.Buttons[4] )
self.Buttons[8]:CopyBounds( self.Buttons[7] )
self.Buttons[8]:MoveRightOf( self.Buttons[7] )
self.Buttons[9]:CopyBounds( self.Buttons[8] )
self.Buttons[9]:MoveRightOf( self.Buttons[8] )
end
function PANEL:Think()
self:ConVarNumberThink()
end
function PANEL:SetValue( iNumValue )
self:SetSelected( iNumValue )
end
function PANEL:GetValue()
return self:GetSelectedNumber()
end
derma.DefineControl( "DNumPad", "", PANEL, "DPanel" )