mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
116 lines
2.9 KiB
Lua
116 lines
2.9 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/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
|
||
|
|
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" )
|