mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
273 lines
7.1 KiB
Lua
273 lines
7.1 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/
|
|
--]]
|
|
|
|
|
|
local PANEL = {}
|
|
|
|
AccessorFunc( PANEL, "m_strType", "Type" )
|
|
AccessorFunc( PANEL, "m_ConVars", "ConVars" )
|
|
AccessorFunc( PANEL, "m_PresetControl", "PresetControl" )
|
|
|
|
function PANEL:Init()
|
|
|
|
self:SetSize( 450, 350 )
|
|
self:SetMinWidth( 450 )
|
|
self:SetMinHeight( 350 )
|
|
self:SetSizable( true )
|
|
self:SetTitle( "#preset.editor" )
|
|
self:DockPadding( 6, 29, 6, 6 )
|
|
|
|
local pnlTop = vgui.Create( "Panel", self )
|
|
pnlTop:Dock( FILL )
|
|
pnlTop:DockMargin( 0, 0, 0, 5 )
|
|
|
|
self.PresetList = vgui.Create( "DListView", pnlTop )
|
|
self.PresetList:Dock( LEFT )
|
|
self.PresetList:DockMargin( 0, 0, 5, 0 )
|
|
self.PresetList:SetWide( 150 )
|
|
self.PresetList:SetMultiSelect( false )
|
|
self.PresetList:SetSortable( false )
|
|
self.PresetList.OnRowSelected = function( s, idx, pnl ) self:OnPresetSelected( pnl ) end
|
|
|
|
local pnlEditor = vgui.Create( "DPanel", pnlTop )
|
|
pnlEditor:Dock( FILL )
|
|
|
|
self.pnlDetails = vgui.Create( "DProperties", pnlEditor )
|
|
self.pnlDetails:Dock( FILL )
|
|
self.pnlDetails:DockMargin( 5, 5, 5, 5 )
|
|
|
|
----------
|
|
|
|
local pnlModify = vgui.Create( "Panel", pnlEditor )
|
|
pnlModify:Dock( BOTTOM )
|
|
pnlModify:SetTall( 20 )
|
|
pnlModify:DockMargin( 5, 0, 5, 5 )
|
|
|
|
local btnDelete = vgui.Create( "DButton", pnlModify )
|
|
btnDelete.DoClick = function() self:Delete() end
|
|
btnDelete:SetTooltip( "#preset.delete" )
|
|
btnDelete:SetImage( "icon16/bin.png" )
|
|
btnDelete:SetText( "" )
|
|
btnDelete:Dock( RIGHT )
|
|
btnDelete:SetWide( 25 )
|
|
btnDelete:SetEnabled( false )
|
|
|
|
self.txtRename = vgui.Create( "DTextEntry", pnlModify )
|
|
self.txtRename:Dock( FILL )
|
|
self.txtRename:SetEnabled( false )
|
|
self.txtRename:SetTooltip( "#preset.rename" )
|
|
|
|
local btnRename = vgui.Create( "DButton", pnlModify )
|
|
btnRename:SetTooltip( "#preset.save" )
|
|
btnRename:SetImage( "icon16/disk.png" )
|
|
btnRename:SetText( "" )
|
|
btnRename:Dock( RIGHT )
|
|
btnRename:DockMargin( 5, 0, 5, 0 )
|
|
btnRename:SetWide( 24 )
|
|
btnRename.DoClick = function() self:SaveChanges() end
|
|
btnRename:SetEnabled( false )
|
|
|
|
----------
|
|
|
|
local bottom = vgui.Create( "Panel", self )
|
|
bottom:Dock( BOTTOM )
|
|
bottom:SetTall( 30 )
|
|
|
|
self.pnlAdd = vgui.Create( "DPanel", bottom )
|
|
self.pnlAdd:Dock( FILL )
|
|
self.pnlAdd:DockPadding( 5, 5, 5, 5 )
|
|
self.pnlAdd:DockMargin( 0, 0, 5, 0 )
|
|
|
|
self.txtName = vgui.Create( "DTextEntry", self.pnlAdd )
|
|
self.txtName:SetTooltip( "#preset.addnew_field" )
|
|
self.txtName:Dock( FILL )
|
|
self.txtName:DockMargin( 0, 0, 5, 0 )
|
|
self.txtName.OnChange = function( s ) self.btnAdd:SetEnabled( s:GetText():Trim() != "" ) end
|
|
|
|
self.btnAdd = vgui.Create( "DButton", self.pnlAdd )
|
|
self.btnAdd:SetText( "#preset.addnew" )
|
|
self.btnAdd:Dock( RIGHT )
|
|
self.btnAdd:SetEnabled( false )
|
|
self.btnAdd.DoClick = function() self:Add() end
|
|
|
|
----------
|
|
|
|
local pnlClose = vgui.Create( "DPanel", bottom )
|
|
pnlClose:Dock( RIGHT )
|
|
pnlClose:SetWide( 100 )
|
|
pnlClose:DockPadding( 5, 5, 5, 5 )
|
|
|
|
local btnCloseIt = vgui.Create( "DButton", pnlClose )
|
|
btnCloseIt:SetText( "#preset.close" )
|
|
btnCloseIt:Dock( FILL )
|
|
btnCloseIt.DoClick = function() self:Remove() end
|
|
|
|
end
|
|
|
|
function PANEL:SetType( strType )
|
|
|
|
self.m_strType = strType
|
|
|
|
self.PresetList:AddColumn( self:GetType() )
|
|
self:Update()
|
|
|
|
end
|
|
|
|
function PANEL:OnPresetSelected( item )
|
|
|
|
local name = item:GetValue( 1 )
|
|
|
|
self.txtRename:SetText( name )
|
|
for id, pnl in ipairs( self.txtRename:GetParent():GetChildren() ) do pnl:SetEnabled( true ) end
|
|
|
|
self.pnlDetails:Clear()
|
|
for cvar, val in SortedPairs( item:GetTable().Data ) do
|
|
local Row = self.pnlDetails:CreateRow( name, cvar:lower() )
|
|
|
|
if ( tonumber( val ) != nil && false ) then
|
|
Row:Setup( "Float", { min = 0, max = 1000 } )
|
|
Row:SetValue( val )
|
|
else
|
|
Row:Setup( "Generic" )
|
|
end
|
|
|
|
Row:SetValue( val )
|
|
Row.__Value = val
|
|
Row.DataChanged = function( s, value ) Row.__Value = value end
|
|
end
|
|
|
|
end
|
|
|
|
function PANEL:Update()
|
|
|
|
self.PresetList:Clear()
|
|
self.pnlDetails:Clear()
|
|
self.txtRename:SetText( "" )
|
|
|
|
local Presets = presets.GetTable( self:GetType() )
|
|
local sortedPresets, i = {}, 1
|
|
for name in pairs( Presets ) do
|
|
sortedPresets[i] = name
|
|
i = i + 1
|
|
end
|
|
table.sort( sortedPresets )
|
|
|
|
for _, name in ipairs( sortedPresets ) do
|
|
local item = self.PresetList:AddLine( name )
|
|
item.Data = Presets[ name ]
|
|
end
|
|
|
|
end
|
|
|
|
function PANEL:SelectPresetByName( name )
|
|
|
|
for id, line in pairs( self.PresetList:GetLines() ) do
|
|
if ( line:GetValue( 1 ) != name ) then continue end
|
|
self.PresetList:SelectItem( line )
|
|
end
|
|
|
|
end
|
|
|
|
function PANEL:Delete()
|
|
|
|
if ( !self.PresetList:GetSelectedLine() || !IsValid( self.PresetList:GetLine( self.PresetList:GetSelectedLine() ) ) ) then return end
|
|
|
|
local Selected = self.PresetList:GetLine( self.PresetList:GetSelectedLine() ):GetValue( 1 ):Trim()
|
|
if ( Selected == "" ) then return end
|
|
|
|
presets.Remove( self:GetType(), Selected )
|
|
self:Update()
|
|
|
|
if ( self:GetPresetControl() ) then self:GetPresetControl():Update() end
|
|
|
|
end
|
|
|
|
function PANEL:SaveChangesInternal( Selected, ToName )
|
|
|
|
local tabValues = {}
|
|
local cat = self.pnlDetails:GetCategory( Selected )
|
|
|
|
-- WARNING: This will discard ConVars in the preset that no longer exist on the tool/whatever this preset is for
|
|
for k, v in pairs( self:GetConVars() ) do
|
|
if ( cat:GetRow( v:lower() ) ) then
|
|
tabValues[ v:lower() ] = cat:GetRow( v:lower() ).__Value
|
|
end
|
|
end
|
|
|
|
presets.Rename( self:GetType(), Selected, ToName ) -- Raname the preset if necessary
|
|
presets.Add( self:GetType(), ToName, tabValues ) -- Update the values
|
|
|
|
self:Update()
|
|
|
|
self.txtRename:SetText( "" )
|
|
self:SelectPresetByName( ToName )
|
|
|
|
if ( self:GetPresetControl() ) then self:GetPresetControl():Update() end
|
|
|
|
end
|
|
|
|
function PANEL:SaveChanges()
|
|
|
|
if ( !self.PresetList:GetSelectedLine() || !IsValid( self.PresetList:GetLine( self.PresetList:GetSelectedLine() ) ) ) then return end
|
|
|
|
local Selected = self.PresetList:GetLine( self.PresetList:GetSelectedLine() ):GetValue( 1 ):Trim()
|
|
if ( Selected == "" ) then return end
|
|
|
|
local ToName = self.txtRename:GetValue():Trim()
|
|
if ( !ToName || ToName == "" ) then presets.BadNameAlert() return end
|
|
|
|
if ( presets.Exists( self:GetType(), ToName ) && Selected != ToName ) then
|
|
presets.OverwritePresetPrompt( function()
|
|
self:SaveChangesInternal( Selected, ToName )
|
|
end )
|
|
return
|
|
end
|
|
|
|
self:SaveChangesInternal( Selected, ToName )
|
|
|
|
end
|
|
|
|
function PANEL:InternalAdd( ToName )
|
|
|
|
local tabValues = {}
|
|
for k, v in pairs( self:GetConVars() ) do
|
|
tabValues[ v ] = GetConVarString( v:lower() )
|
|
end
|
|
|
|
presets.Add( self:GetType(), ToName, tabValues )
|
|
self:Update()
|
|
|
|
self.txtName:SetText( "" )
|
|
self:SelectPresetByName( ToName )
|
|
|
|
if ( self:GetPresetControl() ) then self:GetPresetControl():Update() end
|
|
|
|
end
|
|
|
|
function PANEL:Add()
|
|
|
|
if ( !self:GetConVars() ) then return end
|
|
|
|
local ToName = self.txtName:GetValue():Trim()
|
|
if ( !ToName || ToName == "" ) then presets.BadNameAlert() return end
|
|
|
|
if ( presets.Exists( self:GetType(), ToName ) ) then
|
|
presets.OverwritePresetPrompt( function()
|
|
self:InternalAdd( ToName )
|
|
end )
|
|
return
|
|
end
|
|
|
|
self:InternalAdd( ToName )
|
|
|
|
end
|
|
|
|
vgui.Register( "PresetEditor", PANEL, "DFrame" )
|