Editor/Inspector/Control/PanelStyleControl.cs
using Sandbox.Diagnostics;
using Sandbox.UI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Panelize;
public abstract class StyleEnumControl<T> : DropdownEnumControl<T> where T : struct, Enum
{
SerializedProperty property;
public StyleEnumControl( SerializedProperty prop )
{
Assert.True( prop != null);
Assert.True(prop.PropertyType == typeof( T ) );
Value = prop.GetValue<T>();
property = prop;
if(!prop.IsEditable )
{
ReadOnly = true;
}
}
public override void SetValue( T value )
{
base.SetValue( value );
property.SetValue( value );
}
}
public class PanelPositionModeControl : StyleEnumControl<PositionMode>
{
public PanelPositionModeControl( SerializedProperty prop ) : base( prop )
{
SetDisplay( PositionMode.Static, "fullscreen" );
SetDisplay( PositionMode.Absolute, "straighten" );
SetDisplay( PositionMode.Relative, "picture_in_picture" );
//BuildOptions();
}
}
public class PanelAlignControl : StyleEnumControl<Align>
{
public PanelAlignControl( SerializedProperty prop ) : base( prop )
{
SetOrder(
Align.FlexStart, Align.Center, Align.FlexEnd,
Align.SpaceBetween, Align.SpaceAround, Align.SpaceEvenly,
Align.Stretch, Align.Baseline, Align.Auto
);
SetDisplay( Align.Auto, "autorenew" );
SetDisplay( Align.FlexStart, "first_page" );
SetDisplay( Align.Center, "control_camera" );
SetDisplay( Align.FlexEnd, "last_page" );
SetDisplay( Align.Stretch, "fullscreen" );
SetDisplay( Align.Baseline, "picture_in_picture" );
SetDisplay( Align.SpaceBetween, "straighten" );
SetDisplay( Align.SpaceAround, "space_bar" );
SetDisplay( Align.SpaceEvenly, "calendar_view_week" );
//BuildOptions();
}
}
public class PanelJustifyControl : StyleEnumControl<Justify>
{
public PanelJustifyControl( SerializedProperty prop ) : base( prop )
{
SetDisplay( Justify.FlexStart, "first_page" );
SetDisplay( Justify.Center, "control_camera" );
SetDisplay( Justify.FlexEnd, "last_page" );
SetDisplay( Justify.SpaceBetween, "straighten" );
SetDisplay( Justify.SpaceAround, "space_bar" );
SetDisplay( Justify.SpaceEvenly, "calendar_view_week" );
//BuildOptions();
}
}
public class FlexDirectionControl : StyleEnumControl<FlexDirection>
{
public FlexDirectionControl( SerializedProperty prop ) : base( prop )
{
//CellColumns = 2;
SetOrder(
FlexDirection.Row, FlexDirection.RowReverse,
FlexDirection.Column, FlexDirection.ColumnReverse
);
SetDisplay( FlexDirection.Column, "south" );
SetDisplay( FlexDirection.ColumnReverse, "north" );
SetDisplay( FlexDirection.Row, "east" );
SetDisplay( FlexDirection.RowReverse, "west" );
//BuildOptions();
}
}
public class BackgroundRepeatControl : StyleEnumControl<BackgroundRepeat>
{
public BackgroundRepeatControl( SerializedProperty prop ) : base( prop )
{
SetOrder(
BackgroundRepeat.NoRepeat,
BackgroundRepeat.Repeat,
BackgroundRepeat.RepeatX,
BackgroundRepeat.RepeatY,
BackgroundRepeat.Clamp
);
SetDisplay( BackgroundRepeat.NoRepeat, "sync_disabled" );
SetDisplay( BackgroundRepeat.Repeat, "sync" );
SetDisplay( BackgroundRepeat.RepeatX, "horizontal_split" );
SetDisplay( BackgroundRepeat.RepeatY, "vertical_split" );
SetDisplay( BackgroundRepeat.Clamp, "crop" );
}
}
#region Text
public class TextAlignControl : StyleEnumControl<TextAlign>
{
public TextAlignControl( SerializedProperty prop ) : base( prop )
{
SetDisplay( TextAlign.Auto, "format_align_justify" );
SetDisplay( TextAlign.Left, "format_align_left" );
SetDisplay( TextAlign.Center, "format_align_center" );
SetDisplay( TextAlign.Right, "format_align_right" );
}
}
public class TextOverflowControl : StyleEnumControl<TextOverflow>
{
public TextOverflowControl( SerializedProperty prop ) : base( prop )
{
SetDisplay( TextOverflow.None, "start" );
SetDisplay( TextOverflow.Ellipsis, "blur_linear" );
SetDisplay( TextOverflow.Clip, "gradient" );
}
}
public class WordBreakControl : StyleEnumControl<WordBreak>
{
public WordBreakControl( SerializedProperty prop ) : base( prop )
{
SetDisplay( WordBreak.Normal, "notes" );
SetDisplay( WordBreak.BreakAll, "wrap_text" );
}
}
public class TextTransformControl : StyleEnumControl<TextTransform>
{
public TextTransformControl( SerializedProperty prop ) : base( prop )
{
SetDisplay( TextTransform.None, "not_interested" );
SetDisplay( TextTransform.Uppercase, "format_color_text" );
SetDisplay( TextTransform.Lowercase, "text_format" );
SetDisplay( TextTransform.Capitalize, "text_fields" );
}
}
#endregion
public class OverflowModeControl : StyleEnumControl<OverflowMode>
{
public OverflowModeControl( SerializedProperty prop ) : base( prop )
{
SetDisplay( OverflowMode.Visible, "visibility" );
SetDisplay( OverflowMode.Hidden, "visibility_off" );
SetDisplay( OverflowMode.Scroll, "expand" );
}
}
public class MaskModeControl : StyleEnumControl<MaskMode>
{
public MaskModeControl( SerializedProperty prop ) : base( prop )
{
SetDisplay( MaskMode.MatchSource, "sync" );
SetDisplay( MaskMode.Alpha, "gradient" );
SetDisplay( MaskMode.Luminance, "contrast" );
}
}
public class MaskScopeControl : StyleEnumControl<MaskScope>
{
public MaskScopeControl( SerializedProperty prop ) : base( prop )
{
SetDisplay(MaskScope.Default, "info" );
SetDisplay(MaskScope.Filter, "filter" );
}
}