This commit is contained in:
lifestorm
2024-08-04 23:54:45 +03:00
parent 0e770b2b49
commit df294d03aa
7526 changed files with 4011945 additions and 15 deletions

View File

@@ -0,0 +1,443 @@
--[[
| 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/
--]]
--
-- Note: This is only really here as a layer between the spawnmenu
-- and the DForm Derma control. You shouldn't ever really be
-- calling AddControl. If you're writing new code - don't call
-- AddControl!! Add stuff directly using the DForm member functions!
--
include( "controls/manifest.lua" )
local PANEL = {}
AccessorFunc( PANEL, "m_bInitialized", "Initialized" )
function PANEL:Init()
self:SetInitialized( false )
end
function PANEL:ClearControls()
self:Clear()
end
function PANEL:GetEmbeddedPanel()
return self
end
function PANEL:AddPanel( pnl )
self:AddItem( pnl, nil )
self:InvalidateLayout()
end
function PANEL:MatSelect( strConVar, tblOptions, bAutoStretch, iWidth, iHeight )
local MatSelect = vgui.Create( "MatSelect", self )
Derma_Hook( MatSelect.List, "Paint", "Paint", "Panel" )
MatSelect:SetConVar( strConVar )
if ( bAutoStretch != nil ) then MatSelect:SetAutoHeight( bAutoStretch ) end
if ( iWidth != nil ) then MatSelect:SetItemWidth( iWidth ) end
if ( iHeight != nil ) then MatSelect:SetItemHeight( iHeight ) end
if ( tblOptions != nil ) then
for k, v in pairs( tblOptions ) do
local nam = isnumber( k ) and v or k
MatSelect:AddMaterial( nam, v )
end
end
self:AddPanel( MatSelect )
return MatSelect
end
function PANEL:ToolPresets( group, cvarlist )
local preset = vgui.Create( "ControlPresets", self )
preset:SetPreset( group )
preset:AddOption( "#preset.default", cvarlist )
for k, v in pairs( cvarlist ) do
preset:AddConVar( k )
end
self:AddItem( preset )
return preset
end
function PANEL:KeyBinder( label1, convar1, label2, convar2 )
local binder = vgui.Create( "CtrlNumPad", self )
binder:SetLabel1( label1 )
binder:SetConVar1( convar1 )
if ( label2 != nil and convar2 != nil ) then
binder:SetLabel2( label2 )
binder:SetConVar2( convar2 )
end
self:AddPanel( binder )
return binder
end
function PANEL:ColorPicker( label, convarR, convarG, convarB, convarA )
local color = vgui.Create( "CtrlColor", self )
color:Dock( TOP )
color:SetLabel( label )
color:SetConVarR( convarR )
color:SetConVarG( convarG )
color:SetConVarB( convarB )
if ( convarA != nil ) then
color:SetConVarA( convarA )
end
self:AddPanel( color )
return color
end
function PANEL:FillViaTable( Table )
self:SetInitialized( true )
self:SetName( Table.Text )
--
-- If we have a function to create the control panel, use that
--
if ( Table.ControlPanelBuildFunction ) then
Table.ControlPanelBuildFunction( self )
end
end
function PANEL:FillViaFunction( func )
func( self )
end
function PANEL:ControlValues( data )
if ( data.label) then
self:SetLabel( data.label )
end
if ( data.closed ) then
self:SetExpanded( false )
end
end
function PANEL:AddControl( control, data )
local data = table.LowerKeyNames( data )
local original = control
control = string.lower( control )
-- Retired
if ( control == "header" ) then
if ( data.description ) then
local ctrl = self:Help( data.description )
return ctrl
end
return
end
if ( control == "textbox" ) then
local ctrl = self:TextEntry( data.label or "Untitled", data.command )
return ctrl
end
if ( control == "label" ) then
local ctrl = self:Help( data.text )
return ctrl
end
if ( control == "checkbox" or control == "toggle" ) then
local ctrl = self:CheckBox( data.label or "Untitled", data.command )
if ( data.help ) then
self:ControlHelp( data.label .. ".help" )
end
return ctrl
end
if ( control == "slider" ) then
local Decimals = 0
if ( data.type && string.lower(data.type) == "float" ) then Decimals = 2 end
local ctrl = self:NumSlider( data.label or "Untitled", data.command, data.min or 0, data.max or 100, Decimals )
if ( data.help ) then
self:ControlHelp( data.label .. ".help" )
end
if ( data.default ) then
ctrl:SetDefaultValue( data.default )
elseif ( data.command ) then
local cvar = GetConVar( data.command )
if ( cvar ) then
ctrl:SetDefaultValue( cvar:GetDefault() )
end
end
return ctrl
end
if ( control == "propselect" ) then
local ctrl = vgui.Create( "PropSelect", self )
ctrl:ControlValues( data ) -- Yack.
self:AddPanel( ctrl )
return ctrl
end
if ( control == "matselect" ) then
local ctrl = vgui.Create( "MatSelect", self )
ctrl:ControlValues( data ) -- Yack.
self:AddPanel( ctrl )
Derma_Hook( ctrl.List, "Paint", "Paint", "Panel" )
return ctrl
end
if ( control == "ropematerial" ) then
local ctrl = vgui.Create( "RopeMaterial", self )
ctrl:SetConVar( data.convar )
self:AddPanel( ctrl )
return ctrl
end
if ( control == "button" ) then
local ctrl = vgui.Create( "DButton", self )
-- Note: Buttons created this way use the old method of calling commands,
-- via LocalPlayer:ConCommand. This way is flawed. This way is legacy.
-- The new way is to make buttons via controlpanel:Button( name, command, commandarg1, commandarg2 ) etc
if ( data.command ) then
function ctrl:DoClick() LocalPlayer():ConCommand( data.command ) end
end
ctrl:SetText( data.label or data.text or "No Label" )
self:AddPanel( ctrl )
return ctrl
end
if ( control == "numpad" ) then
local ctrl = vgui.Create( "CtrlNumPad", self )
ctrl:SetConVar1( data.command )
ctrl:SetConVar2( data.command2 )
ctrl:SetLabel1( data.label )
ctrl:SetLabel2( data.label2 )
self:AddPanel( ctrl )
return ctrl
end
if ( control == "color" ) then
local ctrl = vgui.Create( "CtrlColor", self )
ctrl:SetLabel( data.label )
ctrl:SetConVarR( data.red )
ctrl:SetConVarG( data.green )
ctrl:SetConVarB( data.blue )
ctrl:SetConVarA( data.alpha )
self:AddPanel( ctrl )
return ctrl
end
if ( control == "combobox" ) then
if ( tostring( data.menubutton ) == "1" ) then
local ctrl = vgui.Create( "ControlPresets", self )
ctrl:SetPreset( data.folder )
if ( data.options ) then
for k, v in pairs( data.options ) do
ctrl:AddOption( k, v )
end
end
if ( data.cvars ) then
for k, v in pairs( data.cvars ) do
ctrl:AddConVar( v )
end
end
self:AddPanel( ctrl )
return ctrl
end
control = "listbox"
end
if ( control == "listbox" ) then
if ( data.height ) then
local ctrl = vgui.Create( "DListView" )
ctrl:SetMultiSelect( false )
ctrl:AddColumn( data.label or "unknown" )
if ( data.options ) then
for k, v in pairs( data.options ) do
local line = ctrl:AddLine( k )
line.data = v
-- This is kind of broken because it only checks one convar
-- instead of all of them. But this is legacy. It will do for now.
for k, v in pairs( line.data ) do
if ( GetConVarString( k ) == tostring( v ) ) then
line:SetSelected( true )
end
end
end
end
ctrl:SetTall( data.height )
ctrl:SortByColumn( 1, false )
function ctrl:OnRowSelected( LineID, Line )
for k, v in pairs( Line.data ) do
RunConsoleCommand( k, v )
end
end
self:AddItem( ctrl )
return ctrl
else
local ctrl = vgui.Create( "CtrlListBox", self )
if ( data.options ) then
for k, v in pairs( data.options ) do
ctrl:AddOption( k, v )
end
end
local left = vgui.Create( "DLabel", self )
left:SetText( data.label )
left:SetDark( true )
ctrl:SetHeight( 25 )
ctrl:Dock( TOP )
self:AddItem( left, ctrl )
return ctrl
end
end
if ( control == "materialgallery" ) then
local ctrl = vgui.Create( "MatSelect", self )
--ctrl:ControlValues( data ) -- Yack.
ctrl:SetItemWidth( data.width or 32 )
ctrl:SetItemHeight( data.height or 32 )
ctrl:SetNumRows( data.rows or 4 )
ctrl:SetConVar( data.convar or nil )
Derma_Hook( ctrl.List, "Paint", "Paint", "Panel" )
for name, tab in pairs( data.options ) do
local mat = tab.material
local value = tab.value
tab.material = nil
tab.value = nil
ctrl:AddMaterialEx( name, mat, value, tab )
end
self:AddPanel( ctrl )
return ctrl
end
local ctrl = vgui.Create( original, self )
-- Fallback for scripts that relied on the old behaviour
if ( !ctrl ) then
ctrl = vgui.Create( control, self )
end
if ( ctrl ) then
if ( ctrl.ControlValues ) then
ctrl:ControlValues( data )
end
self:AddPanel( ctrl )
return ctrl
end
MsgN( "UNHANDLED CONTROL: ", control )
PrintTable( data )
MsgN( "\n\n" )
end
vgui.Register( "ControlPanel", PANEL, "DForm" )