mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
Upload
This commit is contained in:
314
lua/vgui/dform.lua
Normal file
314
lua/vgui/dform.lua
Normal file
@@ -0,0 +1,314 @@
|
||||
--[[
|
||||
| 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 = {}
|
||||
|
||||
DEFINE_BASECLASS( "DCollapsibleCategory" )
|
||||
|
||||
AccessorFunc( PANEL, "m_bSizeToContents", "AutoSize", FORCE_BOOL )
|
||||
AccessorFunc( PANEL, "m_iSpacing", "Spacing" )
|
||||
AccessorFunc( PANEL, "m_Padding", "Padding" )
|
||||
|
||||
function PANEL:Init()
|
||||
|
||||
self.Items = {}
|
||||
|
||||
self:SetSpacing( 4 )
|
||||
self:SetPadding( 10 )
|
||||
|
||||
self:SetPaintBackground( true )
|
||||
|
||||
self:SetMouseInputEnabled( true )
|
||||
self:SetKeyboardInputEnabled( true )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:SetName( name )
|
||||
|
||||
self:SetLabel( name )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:Clear()
|
||||
|
||||
for k, v in pairs( self.Items ) do
|
||||
|
||||
if ( IsValid( v ) ) then v:Remove() end
|
||||
|
||||
end
|
||||
|
||||
self.Items = {}
|
||||
|
||||
end
|
||||
|
||||
function PANEL:AddItem( left, right )
|
||||
|
||||
self:InvalidateLayout()
|
||||
|
||||
local Panel = vgui.Create( "DSizeToContents", self )
|
||||
--Panel.Paint = function( panel, w, h ) derma.SkinHook( "Paint", "CategoryButton", panel, w, h ) end
|
||||
Panel:SetSizeX( false )
|
||||
Panel:Dock( TOP )
|
||||
Panel:DockPadding( 10, 10, 10, 0 )
|
||||
Panel:InvalidateLayout()
|
||||
|
||||
if ( IsValid( right ) ) then
|
||||
|
||||
left:SetParent( Panel )
|
||||
left:Dock( LEFT )
|
||||
left:InvalidateLayout( true )
|
||||
left:SetSize( 100, 20 )
|
||||
|
||||
right:SetParent( Panel )
|
||||
right:SetPos( 110, 0 )
|
||||
right:InvalidateLayout( true )
|
||||
|
||||
elseif ( IsValid( left ) ) then
|
||||
|
||||
left:SetParent( Panel )
|
||||
left:Dock( TOP )
|
||||
|
||||
end
|
||||
|
||||
table.insert( self.Items, Panel )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:TextEntry( strLabel, strConVar )
|
||||
|
||||
local left = vgui.Create( "DLabel", self )
|
||||
left:SetText( strLabel )
|
||||
left:SetDark( true )
|
||||
|
||||
local right = vgui.Create( "DTextEntry", self )
|
||||
right:SetConVar( strConVar )
|
||||
right:Dock( TOP )
|
||||
|
||||
self:AddItem( left, right )
|
||||
|
||||
return right, left
|
||||
|
||||
end
|
||||
|
||||
function PANEL:PropSelect( label, convar, models, height )
|
||||
|
||||
local props = vgui.Create( "PropSelect", self )
|
||||
|
||||
props:SetConVar( convar or "" )
|
||||
props.Label:SetText( label or "" )
|
||||
|
||||
props.Height = height or 2
|
||||
|
||||
local firstKey, firstVal = next( models )
|
||||
if ( firstVal.model == nil ) then
|
||||
|
||||
-- Lowercase model names for sorting purposes
|
||||
local models_lower = table.LowerKeyNames( models )
|
||||
|
||||
-- list.Get where key is the model and value is the cvars to set when that model is selected
|
||||
for k, v in SortedPairs( models_lower ) do
|
||||
props:AddModel( k, v )
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
local tmp = {} -- HACK: Order by skin too
|
||||
for k, v in SortedPairsByMemberValue( models, "model" ) do
|
||||
tmp[ k ] = v.model:lower() .. ( v.skin or 0 )
|
||||
end
|
||||
|
||||
for k, v in SortedPairsByValue( tmp ) do
|
||||
v = models[ k ]
|
||||
local icon = props:AddModelEx( k, v.model, v.skin or 0 )
|
||||
if ( v.tooltip ) then icon:SetTooltip( v.tooltip ) end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
props:InvalidateLayout( true )
|
||||
|
||||
self:AddPanel( props )
|
||||
|
||||
return props
|
||||
|
||||
end
|
||||
|
||||
function PANEL:ComboBox( strLabel, strConVar )
|
||||
|
||||
local left = vgui.Create( "DLabel", self )
|
||||
left:SetText( strLabel )
|
||||
left:SetDark( true )
|
||||
|
||||
local right = vgui.Create( "DComboBox", self )
|
||||
right:SetConVar( strConVar )
|
||||
right:Dock( FILL )
|
||||
function right:OnSelect( index, value, data )
|
||||
if ( !self.m_strConVar ) then return end
|
||||
RunConsoleCommand( self.m_strConVar, tostring( data or value ) )
|
||||
end
|
||||
|
||||
self:AddItem( left, right )
|
||||
|
||||
return right, left
|
||||
|
||||
end
|
||||
|
||||
function PANEL:NumberWang( strLabel, strConVar, numMin, numMax, numDecimals )
|
||||
|
||||
local left = vgui.Create( "DLabel", self )
|
||||
left:SetText( strLabel )
|
||||
left:SetDark( true )
|
||||
|
||||
local right = vgui.Create( "DNumberWang", self )
|
||||
right:SetMinMax( numMin, numMax )
|
||||
|
||||
if ( numDecimals != nil ) then right:SetDecimals( numDecimals ) end
|
||||
|
||||
right:SetConVar( strConVar )
|
||||
right:SizeToContents()
|
||||
|
||||
self:AddItem( left, right )
|
||||
|
||||
return right, left
|
||||
|
||||
end
|
||||
|
||||
function PANEL:NumSlider( strLabel, strConVar, numMin, numMax, numDecimals )
|
||||
|
||||
local left = vgui.Create( "DNumSlider", self )
|
||||
left:SetText( strLabel )
|
||||
left:SetMinMax( numMin, numMax )
|
||||
left:SetDark( true )
|
||||
|
||||
if ( numDecimals != nil ) then left:SetDecimals( numDecimals ) end
|
||||
|
||||
left:SetConVar( strConVar )
|
||||
left:SizeToContents()
|
||||
|
||||
self:AddItem( left, nil )
|
||||
|
||||
return left
|
||||
|
||||
end
|
||||
|
||||
function PANEL:CheckBox( strLabel, strConVar )
|
||||
|
||||
local left = vgui.Create( "DCheckBoxLabel", self )
|
||||
left:SetText( strLabel )
|
||||
left:SetDark( true )
|
||||
left:SetConVar( strConVar )
|
||||
|
||||
self:AddItem( left, nil )
|
||||
|
||||
return left
|
||||
|
||||
end
|
||||
|
||||
function PANEL:Help( strHelp )
|
||||
|
||||
local left = vgui.Create( "DLabel", self )
|
||||
|
||||
left:SetDark( true )
|
||||
left:SetWrap( true )
|
||||
left:SetTextInset( 0, 0 )
|
||||
left:SetText( strHelp )
|
||||
left:SetContentAlignment( 7 )
|
||||
left:SetAutoStretchVertical( true )
|
||||
left:DockMargin( 8, 0, 8, 8 )
|
||||
|
||||
self:AddItem( left, nil )
|
||||
|
||||
left:InvalidateLayout( true )
|
||||
|
||||
return left
|
||||
|
||||
end
|
||||
|
||||
function PANEL:ControlHelp( strHelp )
|
||||
|
||||
local Panel = vgui.Create( "DSizeToContents", self )
|
||||
Panel:SetSizeX( false )
|
||||
Panel:Dock( TOP )
|
||||
Panel:InvalidateLayout()
|
||||
|
||||
local left = vgui.Create( "DLabel", Panel )
|
||||
left:SetDark( true )
|
||||
left:SetWrap( true )
|
||||
left:SetTextInset( 0, 0 )
|
||||
left:SetText( strHelp )
|
||||
left:SetContentAlignment( 5 )
|
||||
left:SetAutoStretchVertical( true )
|
||||
left:DockMargin( 32, 0, 32, 8 )
|
||||
left:Dock( TOP )
|
||||
left:SetTextColor( self:GetSkin().Colours.Tree.Hover )
|
||||
|
||||
table.insert( self.Items, Panel )
|
||||
|
||||
return left
|
||||
|
||||
end
|
||||
|
||||
--[[---------------------------------------------------------
|
||||
Note: If you're running a console command like "maxplayers 10" you
|
||||
need to add the "10" to the arguments, like so
|
||||
Button( "LabelName", "maxplayers", "10" )
|
||||
-----------------------------------------------------------]]
|
||||
function PANEL:Button( strName, strConCommand, ... --[[ console command args!! --]] )
|
||||
|
||||
local left = vgui.Create( "DButton", self )
|
||||
|
||||
if ( strConCommand ) then
|
||||
left:SetConsoleCommand( strConCommand, ... )
|
||||
end
|
||||
|
||||
left:SetText( strName )
|
||||
self:AddItem( left, nil )
|
||||
|
||||
return left
|
||||
|
||||
end
|
||||
|
||||
function PANEL:PanelSelect()
|
||||
|
||||
local left = vgui.Create( "DPanelSelect", self )
|
||||
self:AddItem( left, nil )
|
||||
return left
|
||||
|
||||
end
|
||||
|
||||
function PANEL:ListBox( strLabel )
|
||||
|
||||
local left = nil
|
||||
if ( strLabel ) then
|
||||
left = vgui.Create( "DLabel", self )
|
||||
left:SetText( strLabel )
|
||||
self:AddItem( left )
|
||||
left:SetDark( true )
|
||||
end
|
||||
|
||||
local right = vgui.Create( "DListBox", self )
|
||||
--right:SetConVar( strConVar )
|
||||
right.Stretch = true
|
||||
|
||||
self:AddItem( right )
|
||||
|
||||
return right, left
|
||||
|
||||
end
|
||||
|
||||
function PANEL:Rebuild()
|
||||
end
|
||||
|
||||
-- No example for this control
|
||||
function PANEL:GenerateExample( class, tabs, w, h )
|
||||
end
|
||||
|
||||
derma.DefineControl( "DForm", "A panel with quick methods to create basic user inputs.", PANEL, "DCollapsibleCategory" )
|
||||
Reference in New Issue
Block a user