mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
@@ -0,0 +1,224 @@
|
||||
--[[
|
||||
| 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( "DScrollPanel" )
|
||||
|
||||
AccessorFunc( PANEL, "m_pControllerPanel", "ControllerPanel" )
|
||||
AccessorFunc( PANEL, "m_strCategoryName", "CategoryName" )
|
||||
AccessorFunc( PANEL, "m_bTriggerSpawnlistChange", "TriggerSpawnlistChange" )
|
||||
|
||||
--[[---------------------------------------------------------
|
||||
Name: Init
|
||||
-----------------------------------------------------------]]
|
||||
function PANEL:Init()
|
||||
|
||||
self:SetPaintBackground( false )
|
||||
|
||||
self.IconList = vgui.Create( "DTileLayout", self:GetCanvas() )
|
||||
self.IconList:SetBaseSize( 64 )
|
||||
self.IconList:MakeDroppable( "SandboxContentPanel", true )
|
||||
self.IconList:SetSelectionCanvas( true )
|
||||
--self.IconList:SetUseLiveDrag( true )
|
||||
self.IconList:Dock( TOP )
|
||||
self.IconList.OnModified = function() self:OnModified() end
|
||||
self.IconList.OnMousePressed = function( s, btn )
|
||||
|
||||
-- A bit of a hack
|
||||
s:EndBoxSelection()
|
||||
if ( btn != MOUSE_RIGHT ) then DPanel.OnMousePressed( s, btn ) end
|
||||
|
||||
end
|
||||
self.IconList.OnMouseReleased = function( s, btn )
|
||||
|
||||
DPanel.OnMouseReleased( s, btn )
|
||||
|
||||
if ( btn != MOUSE_RIGHT || s:GetReadOnly() ) then return end
|
||||
|
||||
local menu = DermaMenu()
|
||||
menu:AddOption( "#spawnmenu.newlabel", function()
|
||||
|
||||
local label = vgui.Create( "ContentHeader" )
|
||||
self:Add( label )
|
||||
|
||||
-- Move the label to player's cursor, but make sure it's per line, not per icon
|
||||
local x, y = self.IconList:ScreenToLocal( input.GetCursorPos() )
|
||||
label:MoveToAfter( self.IconList:GetClosestChild( self:GetCanvas():GetWide(), y ) )
|
||||
|
||||
self:OnModified()
|
||||
|
||||
-- Scroll to the newly added item
|
||||
--[[timer.Simple( 0, function()
|
||||
local x, y = label:GetPos()
|
||||
self.VBar:AnimateTo( y - self:GetTall() / 2 + label:GetTall() / 2, 0.5, 0, 0.5 )
|
||||
end )]]
|
||||
|
||||
end ):SetIcon( "icon16/text_heading_1.png" )
|
||||
menu:Open()
|
||||
|
||||
end
|
||||
|
||||
self.IconList.ContentContainer = self
|
||||
|
||||
end
|
||||
|
||||
function PANEL:Add( pnl )
|
||||
|
||||
self.IconList:Add( pnl )
|
||||
|
||||
if ( pnl.InstallMenu ) then
|
||||
pnl:InstallMenu( self )
|
||||
end
|
||||
|
||||
self:Layout()
|
||||
|
||||
end
|
||||
|
||||
function PANEL:Layout()
|
||||
|
||||
self.IconList:Layout()
|
||||
self:InvalidateLayout()
|
||||
|
||||
end
|
||||
|
||||
function PANEL:PerformLayout( w, h )
|
||||
|
||||
BaseClass.PerformLayout( self, w, h )
|
||||
self.IconList:SetMinHeight( self:GetTall() - 16 )
|
||||
|
||||
end
|
||||
|
||||
--[[---------------------------------------------------------
|
||||
Name: RebuildAll
|
||||
-----------------------------------------------------------]]
|
||||
function PANEL:RebuildAll( proppanel )
|
||||
|
||||
for k, v in ipairs( self.IconList:GetChildren() ) do
|
||||
|
||||
v:RebuildSpawnIcon()
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--[[---------------------------------------------------------
|
||||
Name: GetCount
|
||||
-----------------------------------------------------------]]
|
||||
function PANEL:GetCount()
|
||||
|
||||
return #self.IconList:GetChildren()
|
||||
|
||||
end
|
||||
|
||||
function PANEL:Clear()
|
||||
|
||||
self.IconList:Clear()
|
||||
|
||||
end
|
||||
|
||||
function PANEL:SetTriggerSpawnlistChange( bTrigger )
|
||||
|
||||
self.m_bTriggerSpawnlistChange = bTrigger
|
||||
self.IconList:SetReadOnly( !bTrigger )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:OnModified()
|
||||
|
||||
if ( !self:GetTriggerSpawnlistChange() ) then return end
|
||||
|
||||
hook.Run( "SpawnlistContentChanged" )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:ContentsToTable( contentpanel )
|
||||
|
||||
local tab = {}
|
||||
|
||||
for k, v in ipairs( self.IconList:GetChildren() ) do
|
||||
|
||||
v:ToTable( tab )
|
||||
|
||||
end
|
||||
|
||||
return tab
|
||||
|
||||
end
|
||||
|
||||
function PANEL:Copy()
|
||||
|
||||
local copy = vgui.Create( "ContentContainer", self:GetParent() )
|
||||
copy:CopyBase( self )
|
||||
|
||||
copy.IconList:CopyContents( self.IconList )
|
||||
|
||||
return copy
|
||||
|
||||
end
|
||||
|
||||
vgui.Register( "ContentContainer", PANEL, "DScrollPanel" )
|
||||
|
||||
hook.Add( "SpawnlistOpenGenericMenu", "DragAndDropSelectionMenu", function( canvas )
|
||||
|
||||
if ( canvas:GetReadOnly() ) then return end
|
||||
|
||||
local selected = canvas:GetSelectedChildren()
|
||||
|
||||
local menu = DermaMenu()
|
||||
|
||||
-- This is less than ideal
|
||||
local spawnicons = 0
|
||||
local icon = nil
|
||||
for id, pnl in pairs( selected ) do
|
||||
if ( pnl.InternalAddResizeMenu ) then
|
||||
spawnicons = spawnicons + 1
|
||||
icon = pnl
|
||||
end
|
||||
end
|
||||
|
||||
if ( spawnicons > 0 ) then
|
||||
icon:InternalAddResizeMenu( menu, function( w, h )
|
||||
|
||||
for id, pnl in pairs( selected ) do
|
||||
if ( !pnl.InternalAddResizeMenu ) then continue end
|
||||
pnl:SetSize( w, h )
|
||||
pnl:InvalidateLayout( true )
|
||||
pnl:GetParent():OnModified()
|
||||
pnl:GetParent():Layout()
|
||||
pnl:SetModel( pnl:GetModelName(), pnl:GetSkinID(), pnl:GetBodyGroup() )
|
||||
end
|
||||
|
||||
end, language.GetPhrase( "spawnmenu.menu.resizex" ):format( spawnicons ) )
|
||||
|
||||
menu:AddOption( language.GetPhrase( "spawnmenu.menu.rerenderx" ):format( spawnicons ), function()
|
||||
for id, pnl in pairs( selected ) do
|
||||
if ( !pnl.RebuildSpawnIcon ) then continue end
|
||||
pnl:RebuildSpawnIcon()
|
||||
end
|
||||
end ):SetIcon( "icon16/picture.png" )
|
||||
end
|
||||
|
||||
menu:AddSpacer()
|
||||
|
||||
menu:AddOption( language.GetPhrase( "spawnmenu.menu.deletex" ):format( #selected ), function()
|
||||
|
||||
for k, v in pairs( selected ) do
|
||||
v:Remove()
|
||||
end
|
||||
|
||||
hook.Run( "SpawnlistContentChanged" )
|
||||
|
||||
end ):SetIcon( "icon16/bin_closed.png" )
|
||||
|
||||
menu:Open()
|
||||
|
||||
end )
|
||||
Reference in New Issue
Block a user