mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-04-19 05:48:07 -04:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
122 lines
3.4 KiB
C#
122 lines
3.4 KiB
C#
using System.IO;
|
|
|
|
namespace Editor;
|
|
|
|
public class FolderMetadataDialog : Dialog
|
|
{
|
|
Label FolderIcon;
|
|
Label SizeLabel;
|
|
Label ContainsLabel;
|
|
|
|
public FolderMetadataDialog( DirectoryInfo directory )
|
|
{
|
|
Layout = Layout.Column();
|
|
Layout.Margin = 8f;
|
|
Layout.Spacing = 8f;
|
|
|
|
var metadata = DirectoryEntry.GetMetadata( directory.FullName );
|
|
|
|
{
|
|
var header = Layout.Add( Layout.Row() );
|
|
header.Margin = 4f;
|
|
header.Spacing = 8f;
|
|
|
|
FolderIcon = header.Add( new Label( this ) );
|
|
FolderIcon.Text = "folder";
|
|
FolderIcon.SetStyles( $"font-family: Material Icons; font-size: 42px; color: {metadata.Color.Hex};" );
|
|
FolderIcon.OnPaintOverride = () =>
|
|
{
|
|
Paint.ClearBrush();
|
|
Paint.SetPen( metadata.Color );
|
|
var folderRect = Paint.DrawIcon( FolderIcon.LocalRect, "folder", FolderIcon.LocalRect.Width );
|
|
|
|
var icon = string.IsNullOrEmpty( metadata.Icon ) ? DirectoryEntry.GetUniqueIcon( directory.Name.ToLowerInvariant() ) : metadata.Icon;
|
|
if ( !string.IsNullOrEmpty( icon ) )
|
|
{
|
|
folderRect.Top += 5f;
|
|
Paint.SetPen( metadata.Color.Darken( 0.25f ) );
|
|
Paint.DrawIcon( folderRect, icon, folderRect.Width / 3f, TextFlag.DontClip | TextFlag.Center );
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
var folderName = header.Add( new LineEdit( this ) );
|
|
folderName.Text = directory.Name;
|
|
folderName.Enabled = false;
|
|
}
|
|
|
|
Layout.Add( new Separator( 1f ) );
|
|
|
|
{
|
|
var infoColumn = Layout.Add( Layout.Column() );
|
|
infoColumn.Margin = 8f;
|
|
infoColumn.Spacing = 12f;
|
|
|
|
var locationRow = infoColumn.Add( Layout.Row() );
|
|
locationRow.Spacing = 8f;
|
|
locationRow.Add( new Label( this ) { Text = "Location:", FixedWidth = 80 } );
|
|
locationRow.Add( new Label( this ) { Text = directory.FullName } );
|
|
|
|
var sizeRow = infoColumn.Add( Layout.Row() );
|
|
sizeRow.Spacing = 8f;
|
|
sizeRow.Add( new Label( this ) { Text = "Size:", FixedWidth = 80 } );
|
|
SizeLabel = sizeRow.Add( new Label( this ) { Text = "0 B" } );
|
|
|
|
var containsRow = infoColumn.Add( Layout.Row() );
|
|
containsRow.Spacing = 8f;
|
|
containsRow.Add( new Label( this ) { Text = "Contains:", FixedWidth = 80 } );
|
|
ContainsLabel = containsRow.Add( new Label( this ) { Text = "0 Files, 0 Folders" } );
|
|
}
|
|
|
|
Layout.Add( new Separator( 1f ) );
|
|
|
|
{
|
|
var sheet = new ControlSheet();
|
|
sheet.Spacing = 4f;
|
|
var serialized = metadata.GetSerialized();
|
|
foreach ( var prop in serialized )
|
|
{
|
|
sheet.AddRow( prop );
|
|
}
|
|
Layout.Add( sheet );
|
|
|
|
serialized.OnPropertyChanged += ( prop ) =>
|
|
{
|
|
if ( prop.Name == "Color" )
|
|
FolderIcon.SetStyles( $"font-family: Material Icons; font-size: 42px; color: {prop.GetValue<Color>().Hex};" );
|
|
else if ( prop.Name == "Icon" )
|
|
FolderIcon.Update();
|
|
};
|
|
}
|
|
|
|
Layout.AddStretchCell();
|
|
|
|
Window.Size = new Vector2( 500, 250 );
|
|
Window.WindowTitle = $"{directory.Name} Metadata";
|
|
|
|
CalculateFolderSize( directory );
|
|
}
|
|
|
|
void CalculateFolderSize( DirectoryInfo info )
|
|
{
|
|
var files = info.EnumerateFiles( "*", SearchOption.AllDirectories );
|
|
long size = 0;
|
|
int fileCount = files.Count();
|
|
int folderCount = info.EnumerateDirectories( "*", SearchOption.AllDirectories ).Count();
|
|
foreach ( var file in files )
|
|
{
|
|
size += file.Length;
|
|
}
|
|
SizeLabel.Text = size.SizeFormat();
|
|
ContainsLabel.Text = $"{fileCount} Files, {folderCount} Folders";
|
|
}
|
|
|
|
public override void OnDestroyed()
|
|
{
|
|
base.OnDestroyed();
|
|
|
|
DirectoryEntry.SaveMetadata();
|
|
}
|
|
}
|