mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
139
lua/includes/extensions/client/panel/scriptedpanels.lua
Normal file
139
lua/includes/extensions/client/panel/scriptedpanels.lua
Normal file
@@ -0,0 +1,139 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
if ( SERVER ) then return end
|
||||
|
||||
local PanelFactory = {}
|
||||
|
||||
local panel_metatable = FindMetaTable( "Panel" )
|
||||
|
||||
baseclass.Set( "Panel", panel_metatable )
|
||||
baseclass.Set( "Label", panel_metatable )
|
||||
baseclass.Set( "EditablePanel", panel_metatable )
|
||||
|
||||
-- Keep the old function
|
||||
vgui.CreateX = vgui.Create
|
||||
|
||||
function vgui.GetControlTable( classname )
|
||||
return PanelFactory[ classname ]
|
||||
end
|
||||
|
||||
function vgui.Exists( classname )
|
||||
return PanelFactory[ classname ] != nil
|
||||
end
|
||||
|
||||
function vgui.Create( classname, parent, name )
|
||||
|
||||
-- Is this a user-created panel?
|
||||
if ( PanelFactory[ classname ] ) then
|
||||
|
||||
local metatable = PanelFactory[ classname ]
|
||||
|
||||
local panel = vgui.Create( metatable.Base, parent, name or classname )
|
||||
if ( !panel ) then
|
||||
Error( "Tried to create panel with invalid base '" .. metatable.Base .. "'\n" );
|
||||
end
|
||||
|
||||
table.Merge( panel:GetTable(), metatable )
|
||||
panel.BaseClass = PanelFactory[ metatable.Base ]
|
||||
panel.ClassName = classname
|
||||
|
||||
-- Call the Init function if we have it
|
||||
if ( panel.Init ) then
|
||||
panel:Init()
|
||||
end
|
||||
|
||||
panel:Prepare()
|
||||
|
||||
return panel
|
||||
|
||||
end
|
||||
|
||||
return vgui.CreateX( classname, parent, name or classname )
|
||||
|
||||
end
|
||||
|
||||
function vgui.CreateFromTable( metatable, parent, name )
|
||||
|
||||
if ( !istable( metatable ) ) then return nil end
|
||||
|
||||
local panel = vgui.Create( metatable.Base, parent, name )
|
||||
|
||||
table.Merge( panel:GetTable(), metatable )
|
||||
panel.BaseClass = PanelFactory[ metatable.Base ]
|
||||
|
||||
-- Call the Init function if we have it
|
||||
if ( panel.Init ) then
|
||||
panel:Init()
|
||||
end
|
||||
|
||||
panel:Prepare()
|
||||
|
||||
return panel
|
||||
|
||||
end
|
||||
|
||||
function vgui.Register( classname, mtable, base )
|
||||
|
||||
-- Remove the global
|
||||
PANEL = nil
|
||||
|
||||
-- Default base is Panel
|
||||
mtable.Base = base or "Panel"
|
||||
mtable.Init = mtable.Init or function() end
|
||||
|
||||
PanelFactory[ classname ] = mtable
|
||||
baseclass.Set( classname, mtable )
|
||||
|
||||
local mt = {}
|
||||
mt.__index = function( t, k )
|
||||
|
||||
if ( PanelFactory[ mtable.Base ] && PanelFactory[ mtable.Base ][k] ) then return PanelFactory[ mtable.Base ][k] end
|
||||
return panel_metatable[k]
|
||||
|
||||
end
|
||||
|
||||
setmetatable( mtable, mt )
|
||||
|
||||
return mtable
|
||||
|
||||
end
|
||||
|
||||
function vgui.RegisterTable( mtable, base )
|
||||
|
||||
-- Remove the global
|
||||
PANEL = nil
|
||||
|
||||
mtable.Base = base or "Panel"
|
||||
mtable.Init = mtable.Init or function() end
|
||||
|
||||
return mtable
|
||||
|
||||
end
|
||||
|
||||
function vgui.RegisterFile( filename )
|
||||
|
||||
local OldPanel = PANEL
|
||||
|
||||
PANEL = {}
|
||||
|
||||
-- The included file should fill the PANEL global.
|
||||
include( filename )
|
||||
|
||||
local mtable = PANEL
|
||||
PANEL = OldPanel
|
||||
|
||||
mtable.Base = mtable.Base or "Panel"
|
||||
mtable.Init = mtable.Init or function() end
|
||||
|
||||
return mtable
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user