Files
sbox-public/game/addons/tools/Code/Widgets/TreeView/TreeNode/Header.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

98 lines
2.5 KiB
C#

using Sandbox.UI;
namespace Editor;
public partial class TreeNode
{
public class Header : TreeNode
{
public string Icon { get; set; }
public string Title { get; set; }
public Color IconColor { get; set; } = Theme.TextLight;
public bool ShowCounts { get; set; }
public string CountOverride { get; set; }
public override bool ExpanderFills => true;
public Header( string icon, string name, bool showCounts = false )
{
Icon = icon;
Title = name;
Height = 30;
ShowCounts = showCounts;
}
public override void OnPaint( VirtualWidget item )
{
var open = item.IsOpen;
if ( item.Selected )
{
var r = new Rect( 0, item.Rect.Top, item.Rect.Right, item.Rect.Height );
Paint.SetPen( Theme.Primary.WithAlpha( 0.9f ) );
Paint.SetBrush( Theme.Primary.WithAlpha( 0.1f ) );
Paint.DrawRect( r.Shrink( 2 ) );
}
else if ( item.Hovered )
{
var r = new Rect( 0, item.Rect.Top, item.Rect.Right, item.Rect.Height );
Paint.ClearPen();
Paint.SetBrush( Theme.SurfaceBackground.WithAlpha( 0.1f ) );
Paint.DrawRect( r );
}
if ( !string.IsNullOrWhiteSpace( Icon ) )
{
Paint.SetPen( IconColor.WithAlpha( 0.1f ) );
Paint.DrawIcon( item.Rect.Grow( 2 ), Icon, 28, TextFlag.RightTop );
}
Paint.SetPen( Theme.Border.WithAlpha( open ? 1.0f : 0.5f ) );
Paint.SetHeadingFont( 10, 450 );
var textRect = Paint.DrawText( item.Rect, Title.ToUpper(), TextFlag.LeftCenter );
if ( ShowCounts )
{
//Paint.SetDefaultFont( 7 );
var r = item.Rect;
r.Left = textRect.Right + 10;
string count = CountOverride ?? $"{(children?.Count() ?? 0):n0}";
Paint.SetHeadingFont( 8, 450 );
Paint.SetBrush( Theme.SurfaceBackground.WithAlpha( open ? 0.2f : 0.1f ) );
Paint.ClearPen();
Paint.DrawTextBox( r, count, Theme.Border.WithAlpha( open ? 1.0f : 0.5f ), new Margin( 5, 0 ), 3.0f, TextFlag.LeftCenter );
}
}
}
public class SmallHeader : TreeNode
{
public string Icon { get; set; }
public string Title { get; set; }
public override bool ExpanderFills => true;
public SmallHeader( string icon, string name )
{
Icon = icon;
Title = name;
}
public override void OnPaint( VirtualWidget item )
{
var rect = item.Rect;
PaintSelection( item );
Paint.SetPen( Theme.Text );
Paint.SetDefaultFont();
var textRect = Paint.DrawText( rect.Shrink( 24, 0 ), Title, TextFlag.LeftCenter );
Paint.SetPen( Theme.Text );
Paint.DrawIcon( rect, Icon, 16, TextFlag.LeftCenter );
}
}
}