Editor/Properties.cs
using Editor;
using Sandbox;
using Sandbox.UI;
namespace Panelize;
public class Properties : Widget
{
public static object SelectedObject { get; set; }
private static object currentSelectedObject { get; set; }
Layout editor;
public Properties(MainWindow mainWindow) : base(mainWindow)
{
WindowTitle = "Properties";
Layout = Layout.Column();
editor = Layout.AddRow( 1 );
SelectedObject = null;
currentSelectedObject = null;
}
[EditorEvent.Frame]
public void Frame()
{
//Log.Info( $"Select {SelectedObject}" );
if ( SelectedObject != currentSelectedObject )
{
Select( SelectedObject );
}
}
private void Select(object obj )
{
currentSelectedObject = obj;
editor.Clear(true);
var so = obj.GetSerialized();
Widget inspector = null;
if(obj is Panel p )
{
inspector = new PanelInspector( this, p, PanelEditorSession.Current );
}
else
{
inspector = InspectorWidget.Create( so );
}
if ( inspector.IsValid() )
{
editor.Add( inspector, 1 );
}
else
{
// Try CanEdit still..
// todo: Everything that should be an inspector should be an InspectorWidget
inspector = CanEditAttribute.CreateEditorForObject( obj );
if ( inspector.IsValid() )
{
editor.Add( inspector, 1 );
}
else
{
try
{
var sheet = new ControlSheet();
sheet.AddObject( so );
var scroller = new ScrollArea( this );
scroller.Canvas = new Widget();
scroller.Canvas.Layout = Layout.Column();
scroller.Canvas.VerticalSizeMode = SizeMode.CanGrow;
scroller.Canvas.HorizontalSizeMode = SizeMode.Flexible;
scroller.Canvas.Layout.Add( sheet );
scroller.Canvas.Layout.AddStretchCell();
editor.Add( scroller );
}
catch { }
}
}
}
}