Files
sbox-public/game/addons/tools/Code/Widgets/DateTimeEditor/DateTimeControlWidget.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

111 lines
3.1 KiB
C#

namespace Editor;
[CustomEditor( typeof( DateTime ) )]
public class DateTimeControlWidget : ControlWidget
{
public DateTimeControlWidget( SerializedProperty property ) : base( property )
{
SetSizeMode( SizeMode.Default, SizeMode.Default );
Layout = Layout.Column();
Layout.Spacing = 2;
Cursor = CursorShape.Finger;
}
protected override void PaintOver()
{
DateTime dateTime = SerializedProperty.GetValue<DateTime>();
Vector2 iconSize = Theme.RowHeight - 4;
var iconRect = Rect.FromPoints( 2, iconSize + 2 );
Paint.SetBrush( Theme.Yellow.WithAlpha( 0.1f ) );
Paint.DrawRect( iconRect, 2 );
Paint.SetPen( Theme.Yellow );
Paint.DrawIcon( iconRect, "access_time", 12 );
Paint.SetPen( Theme.TextControl );
Paint.DrawText( LocalRect.Shrink( iconRect.Right + 4, 0, 4, 0 ), dateTime.ToString(), TextFlag.LeftCenter );
}
protected override void OnMouseReleased( MouseEvent e )
{
base.OnMouseReleased( e );
if ( e.LeftMouseButton )
{
DateTime dateTime = SerializedProperty.GetValue<DateTime>();
DateTimeEditorWidget.OpenPopup( this, dateTime, x => { SerializedProperty.SetValue( x ); Update(); } );
}
}
protected override void OnContextMenu( ContextMenuEvent e )
{
base.OnContextMenu( e );
var menu = new Menu( this );
List<DateTime> days = new();
for ( int i = 0; i < 12; i++ )
{
DateTime dateTime = SerializedProperty.GetValue<DateTime>();
var date = new DateTime( dateTime.Year, i + 1, 1 );
days.Add( date );
}
menu.AddOptions( days, x => "Set Month/" + x.ToString( "MM MMMM" ), x =>
{
SerializedProperty.SetValue( x );
}, false, true, "edit_calendar" );
menu.AddSeparator();
menu.AddOption( "Set Current Date", "calendar_today", () =>
{
DateTime dateTime = SerializedProperty.GetValue<DateTime>();
var now = DateTime.Now;
var val = new DateTime( now.Year, now.Month, now.Day, dateTime.Hour, dateTime.Minute, dateTime.Second );
SerializedProperty.SetValue( val );
} );
menu.AddOption( "Set Current Time", "access_time", () =>
{
DateTime dateTime = SerializedProperty.GetValue<DateTime>();
var now = DateTime.Now;
var val = new DateTime( dateTime.Year, dateTime.Month, dateTime.Day, now.Hour, now.Minute, now.Second );
SerializedProperty.SetValue( val );
} );
menu.AddOption( "Set Current Date + Time", "today", () =>
{
var now = DateTime.Now;
var val = new DateTime( now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second );
SerializedProperty.SetValue( val );
} );
menu.OpenAtCursor();
e.Accepted = true;
}
}
[CustomEditor( typeof( DateTimeOffset ) )]
public class DateTimeOffsetControlWidget : ControlWidget
{
DateTime Date
{
get
{
var offset = SerializedProperty.GetValue<DateTimeOffset>();
return offset.DateTime;
}
set
{
SerializedProperty.SetValue( new DateTimeOffset( value ) );
}
}
public DateTimeOffsetControlWidget( SerializedProperty property ) : base( property )
{
SetSizeMode( SizeMode.Default, SizeMode.Default );
Layout = Layout.Row();
Layout.Add( ControlWidget.Create( this.GetSerialized().GetProperty( "Date" ) ) );
}
}