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]
123 lines
3.1 KiB
C#
123 lines
3.1 KiB
C#
namespace Editor;
|
|
|
|
[CustomEditor( typeof( string ), NamedEditor = "organization" )]
|
|
public class OrganizationControlWidget : ControlWidget
|
|
{
|
|
public string Value
|
|
{
|
|
get => SerializedProperty.As.String;
|
|
set => SerializedProperty.As.String = value;
|
|
}
|
|
|
|
public OrganizationControlWidget( SerializedProperty property ) : base( property )
|
|
{
|
|
|
|
Cursor = CursorShape.Finger;
|
|
}
|
|
|
|
protected override void OnPaint()
|
|
{
|
|
base.OnPaint();
|
|
|
|
var iconRect = LocalRect.Shrink( 4 );
|
|
iconRect.Width = iconRect.Height;
|
|
|
|
var wordRect = LocalRect.Shrink( 1 );
|
|
wordRect.Left = iconRect.Right + 8;
|
|
|
|
Paint.SetPen( Theme.Text.WithAlpha( Paint.HasMouseOver ? 0.6f : 0.3f ) );
|
|
Paint.DrawIcon( LocalRect.Shrink( 8, 8 ), "arrow_drop_down", 16, TextFlag.RightCenter );
|
|
|
|
var orgName = SerializedProperty.As.String;
|
|
|
|
if ( orgName == "local" )
|
|
{
|
|
Paint.SetPen( Theme.Blue );
|
|
Paint.DrawIcon( iconRect, "computer", 28 );
|
|
|
|
Paint.SetPen( Theme.Text );
|
|
Paint.SetDefaultFont( 8, 500 );
|
|
var r = Paint.DrawText( wordRect, "Local", TextFlag.LeftCenter );
|
|
|
|
Paint.SetPen( Theme.TextLight );
|
|
Paint.SetDefaultFont();
|
|
Paint.DrawText( wordRect.Shrink( r.Width + 8, 0, 0, 0 ), "No organisation chosen", TextFlag.LeftCenter );
|
|
return;
|
|
}
|
|
|
|
var org = EditorUtility.Account.Memberships.FirstOrDefault( x => x.Ident == orgName );
|
|
if ( org != null )
|
|
{
|
|
Paint.SetPen( Theme.Blue );
|
|
Paint.Draw( iconRect, org.Thumb );
|
|
|
|
Paint.SetPen( Theme.Text );
|
|
Paint.SetDefaultFont();
|
|
var r = Paint.DrawText( wordRect, org.Title, TextFlag.LeftCenter );
|
|
|
|
Paint.SetPen( Theme.TextLight );
|
|
Paint.SetDefaultFont();
|
|
Paint.DrawText( wordRect.Shrink( r.Width + 8, 0, 0, 0 ), org.Ident, TextFlag.LeftCenter );
|
|
return;
|
|
}
|
|
|
|
Paint.SetPen( Theme.Blue );
|
|
Paint.DrawIcon( iconRect, "question", 28 );
|
|
|
|
Paint.SetPen( Theme.Text );
|
|
Paint.SetDefaultFont( 9 );
|
|
Paint.DrawText( wordRect, Value, TextFlag.LeftTop );
|
|
|
|
Paint.SetPen( Theme.TextLight );
|
|
Paint.SetDefaultFont();
|
|
Paint.DrawText( wordRect, "Membership not found", TextFlag.LeftBottom );
|
|
}
|
|
|
|
public async void OpenMenu( Rect buttonRect )
|
|
{
|
|
var menu = new ContextMenu( this );
|
|
var local = menu.AddOption( "Make Local", null, () => { Value = "local"; SignalValuesChanged(); } );
|
|
local.Checkable = true;
|
|
local.Checked = Value == "local";
|
|
|
|
menu.FixedWidth = buttonRect.Width;
|
|
|
|
// no account information?
|
|
await EditorUtility.Account.Assure();
|
|
|
|
var orgs = EditorUtility.Account.Memberships.ToArray();
|
|
|
|
if ( orgs.Length > 0 )
|
|
{
|
|
menu.AddSeparator();
|
|
|
|
foreach ( var org in orgs )
|
|
{
|
|
var o = menu.AddOption( $"{org.Title} ({org.Ident})", null, () =>
|
|
{
|
|
Value = org.Ident;
|
|
SignalValuesChanged();
|
|
} );
|
|
o.Checkable = true;
|
|
o.Checked = Value == org.Ident;
|
|
}
|
|
}
|
|
|
|
menu.AddSeparator();
|
|
menu.AddOption( "Create New Organisation..", null, () => EditorUtility.OpenFolder( $"{Global.BackendUrl}/~create" ) );
|
|
|
|
menu.OpenAt( buttonRect.BottomLeft - new Vector2( 0, -1 ), false );
|
|
}
|
|
|
|
protected override void OnMousePress( MouseEvent e )
|
|
{
|
|
base.OnMousePress( e );
|
|
|
|
if ( e.LeftMouseButton )
|
|
{
|
|
e.Accepted = true;
|
|
OpenMenu( ScreenRect );
|
|
}
|
|
}
|
|
}
|