Files
wnsrc/gamemodes/sandbox/gamemode/spawnmenu/creationmenu/content/contentsidebartoolbox.lua

116 lines
2.9 KiB
Lua
Raw Normal View History

2024-08-04 23:54:45 +03:00
--[[
| 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/
--]]
include( "contentheader.lua" )
local PANEL = {}
Derma_Hook( PANEL, "Paint", "Paint", "Tree" )
PANEL.m_bBackground = true -- Hack for above
function PANEL:Init()
self:SetOpenSize( 200 )
self:DockPadding( 5, 5, 5, 5 )
local label = vgui.Create( "DTextEntry", self )
label:Dock( TOP )
label:SetZPos( 1 )
label:DockMargin( 0, 0, 0, 2 )
label:SetTooltip( "#spawnmenu.listname_tooltip" )
local panel = vgui.Create( "DPanel", self )
panel:Dock( TOP )
panel:SetZPos( 2 )
panel:SetSize( 24, 24 )
panel:DockPadding( 2, 2, 2, 2 )
local Button = vgui.Create( "DImageButton", panel )
Button:SetImage( "icon16/text_heading_1.png" )
Button:Dock( LEFT )
Button:SetStretchToFit( false )
Button:SetSize( 20, 20 )
Button:SetCursor( "sizeall" )
Button:SetTooltip( "#spawnmenu.header_tooltip" )
Button:Droppable( "SandboxContentPanel" )
Button.OnDrop = function( s, target )
local label = vgui.Create( "ContentHeader", target )
return label
end
local panel = vgui.Create( "Panel", self )
panel:Dock( FILL )
panel:SetZPos( 3 )
local icon_filter = vgui.Create( "DTextEntry", panel )
icon_filter:Dock( TOP )
icon_filter:SetUpdateOnType( true )
icon_filter:SetPlaceholderText( "#spawnmenu.quick_filter" )
icon_filter:DockMargin( 0, 2, 0, 1 )
local icons = vgui.Create( "DIconBrowser", panel )
icons:Dock( FILL )
icon_filter.OnValueChange = function( s, str )
icons:FilterByText( str )
end
local overlay = vgui.Create( "DPanel", self )
overlay:SetZPos( 9999 )
overlay.Paint = function( s, w, h )
surface.SetDrawColor( 0, 0, 0, 200 )
surface.DrawRect( 0, 0, w, h )
end
self.Overlay = overlay
--
-- If we select a node from the sidebar, update the text/icon/actions in the toolbox (at the bottom)
--
hook.Add( "ContentSidebarSelection", "SidebarToolboxSelection", function( pnlContent, node )
if ( !IsValid( node ) || !IsValid( label ) || !IsValid( icons ) ) then return end
if ( node.CustomSpawnlist ) then
label:SetText( node:GetText() )
icons:SelectIcon( node:GetIcon() )
icons:ScrollToSelected()
overlay:SetVisible( false )
else
label:SetText( "" )
overlay:SetVisible( true )
end
label.OnChange = function()
if ( !node.CustomSpawnlist ) then return end
node:SetText( label:GetText() )
hook.Run( "SpawnlistContentChanged" )
end
icons.OnChange = function()
if ( !node.CustomSpawnlist ) then return end
node:SetIcon( icons:GetSelectedIcon() )
hook.Run( "SpawnlistContentChanged" )
end
end )
end
function PANEL:PerformLayout()
-- Not using docking because it will mess up other elements using docking!
self.Overlay:SetSize( self:GetSize() )
end
vgui.Register( "ContentSidebarToolbox", PANEL, "DDrawer" )