UI/Widgets/UICheckbox.cs

A UI checkbox control for Sandbox UI. Renders a tick icon, stores a boolean Value (backed by an optional Property), toggles on mouse down, updates CSS class each tick, and invokes an OnValueChanged callback when changed.

using Sandbox.UI;
using Sandbox.UI.Construct;

namespace Sandbox;

public class UICheckbox : BaseControl
{
	readonly IconPanel _tick;
	bool _value;

	public override bool SupportsMultiEdit => true;

	[Parameter] public Action<bool> OnValueChanged { get; set; }

	public UICheckbox()
	{
		_tick = Add.Icon( "check", "tick" );
	}

	[Parameter]
	public bool Value
	{
		get => Property?.As.Bool ?? _value;
		set
		{
			if ( Property is not null )
			{
				Property.As.Bool = value;
				return;
			}

			_value = value;
		}
	}

	public override void Tick()
	{
		base.Tick();

		SetClass( "checked", Value );
	}

	protected override void OnMouseDown( MousePanelEvent e )
	{
		base.OnMouseDown( e );

		Value = !Value;
		OnValueChanged?.Invoke( Value );
		e.StopPropagation();
	}
}