mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
138
lua/vgui/dentityproperties.lua
Normal file
138
lua/vgui/dentityproperties.lua
Normal file
@@ -0,0 +1,138 @@
|
||||
--[[
|
||||
| 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 = {}
|
||||
|
||||
function PANEL:Init()
|
||||
|
||||
-- Nothing :)
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Sets the entity to edit.
|
||||
-- This can be called any time, even when another entity has been set.
|
||||
--
|
||||
function PANEL:SetEntity( entity )
|
||||
|
||||
if ( self.m_Entity == entity ) then return end
|
||||
|
||||
self.m_Entity = entity
|
||||
self:RebuildControls()
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Clears and rebuilds the controls. Should only really be called internally.
|
||||
--
|
||||
function PANEL:RebuildControls()
|
||||
|
||||
--
|
||||
-- we're rebuilding - so clear all the old controls
|
||||
--
|
||||
self:Clear()
|
||||
|
||||
--
|
||||
-- It's kewl to return here - because it will leave an empty property sheet.
|
||||
--
|
||||
if ( !IsValid( self.m_Entity ) ) then return end
|
||||
if ( !isfunction( self.m_Entity.GetEditingData ) ) then return end
|
||||
|
||||
--
|
||||
-- Call EditVariable for each entry in the entity's EditingData
|
||||
--
|
||||
local editor = self.m_Entity:GetEditingData()
|
||||
|
||||
local i = 1000
|
||||
for name, edit in pairs( editor ) do
|
||||
if ( edit.order == nil ) then edit.order = i end
|
||||
i = i + 1
|
||||
end
|
||||
|
||||
for name, edit in SortedPairsByMemberValue( editor, "order" ) do
|
||||
self:EditVariable( name, edit )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Called internally. Adds an entity variable to watch.
|
||||
--
|
||||
function PANEL:EditVariable( varname, editdata )
|
||||
|
||||
if ( !istable( editdata ) ) then return end
|
||||
if ( !isstring( editdata.type ) ) then return end
|
||||
|
||||
--
|
||||
-- Create a property row in the specified category.
|
||||
--
|
||||
local row = self:CreateRow( editdata.category or "#entedit.general", editdata.title or varname )
|
||||
|
||||
--
|
||||
-- This is where the real business is done. Setup creates the specific controls for
|
||||
-- the 'type' (eg, Float, Boolean). If the type isn't found it reverts to a generic textbox.
|
||||
--
|
||||
row:Setup( editdata.type, editdata )
|
||||
|
||||
--
|
||||
-- These functions need to be implemented for each row. This is how it
|
||||
-- gets and sets the data from the entity. DataUpdate is called peridocailly
|
||||
-- but only when it's not being edited.
|
||||
--
|
||||
row.DataUpdate = function( _ )
|
||||
if ( !IsValid( self.m_Entity ) ) then self:EntityLost() return end
|
||||
row:SetValue( self.m_Entity:GetNetworkKeyValue( varname ) )
|
||||
end
|
||||
|
||||
--
|
||||
-- This is called when the data has changed as a result of user input.
|
||||
-- We use it to edit the value on the entity itself.
|
||||
--
|
||||
row.DataChanged = function( _, val )
|
||||
if ( !IsValid( self.m_Entity ) ) then self:EntityLost() return end
|
||||
self.m_Entity:EditValue( varname, tostring( val ) )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Called when we were editing an entity and then it became invalid (probably removed)
|
||||
--
|
||||
function PANEL:EntityLost()
|
||||
|
||||
self:Clear()
|
||||
self:OnEntityLost()
|
||||
|
||||
end
|
||||
|
||||
function PANEL:OnEntityLost()
|
||||
|
||||
-- For override
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Auto-refreshing - these functions are just for the benefit
|
||||
-- of development. So that when this control gets auto-reloaded
|
||||
-- due to editing - we can rebuild things using the new function(s).
|
||||
--
|
||||
PANEL.AllowAutoRefresh = true
|
||||
|
||||
function PANEL:PreAutoRefresh()
|
||||
end
|
||||
|
||||
function PANEL:PostAutoRefresh()
|
||||
|
||||
self:RebuildControls()
|
||||
|
||||
end
|
||||
|
||||
derma.DefineControl( "DEntityProperties", "", PANEL, "DProperties" )
|
||||
Reference in New Issue
Block a user