Files
sbox-public/game/addons/tools/Code/Widgets/TreeView/TreeNode/Section.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

86 lines
2.2 KiB
C#

using Sandbox.UI;
namespace Editor;
public partial class TreeNode
{
public class Section : TreeNode
{
public string Icon { get; set; }
public string Title { get; set; }
public Color IconColor { get; set; } = Color.White.WithAlpha( 0.5f );
public bool ShowCounts { get; set; }
public string CountOverride { get; set; }
public override bool ExpanderFills => true;
public override bool ExpanderHidden => true;
public Section( string icon, string name, bool showCounts = false )
{
Icon = icon;
Title = name;
Height = 40;
ShowCounts = showCounts;
}
public override void OnPaint( VirtualWidget item )
{
var open = item.IsOpen;
var backgroundRect = item.Rect;
backgroundRect.Left -= item.Indent;
backgroundRect.Bottom -= 1;
if ( item.Selected )
{
Paint.SetPen( Theme.Primary.WithAlpha( 0.9f ) );
Paint.SetBrush( Theme.Primary.WithAlpha( 0.1f ) );
Paint.DrawRect( backgroundRect.Shrink( 2 ) );
}
else if ( item.Hovered )
{
Paint.SetPen( Theme.Primary.WithAlpha( 0.9f ) );
Paint.SetBrush( Color.Black.WithAlpha( open ? 0.7f : 0.6f ) );
Paint.DrawRect( backgroundRect.Shrink( 1 ) );
}
else
{
Paint.ClearPen();
Paint.SetBrush( Color.Black.WithAlpha( open ? 0.7f : 0.6f ) );
Paint.DrawRect( backgroundRect );
}
var rect = backgroundRect.Shrink( 8 );
if ( !string.IsNullOrWhiteSpace( Icon ) )
{
Paint.SetPen( IconColor.WithAlphaMultiplied( open ? 1.0f : 0.4f ) );
var i = Paint.DrawIcon( rect, Icon, 22, TextFlag.LeftCenter );
rect.Left = i.Right + 8;
}
Paint.SetPen( Theme.Text.WithAlpha( open ? 1.0f : 0.6f ) );
Paint.SetHeadingFont( 12, 450 );
var textRect = Paint.DrawText( rect, Title.ToUpper(), TextFlag.LeftCenter );
if ( ShowCounts )
{
//Paint.SetDefaultFont( 7 );
var r = item.Rect;
r.Right -= 16;
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.WithAlphaMultiplied( open ? 1.0f : 0.5f ), new Margin( 5, 0 ), 3.0f, TextFlag.RightCenter );
}
}
}
}