109 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
// ReSharper disable once RedundantUsingDirective
 | 
						|
using System.Reflection;
 | 
						|
 | 
						|
namespace SRDebugger.UI.Controls.Data
 | 
						|
{
 | 
						|
    using System;
 | 
						|
    using SRF;
 | 
						|
    using SRF.UI;
 | 
						|
    using UnityEngine;
 | 
						|
    using UnityEngine.UI;
 | 
						|
 | 
						|
    public class EnumControl : DataBoundControl
 | 
						|
    {
 | 
						|
        private object _lastValue;
 | 
						|
        private string[] _names;
 | 
						|
        private Array _values;
 | 
						|
 | 
						|
        [RequiredField] public LayoutElement ContentLayoutElement;
 | 
						|
 | 
						|
        public GameObject[] DisableOnReadOnly;
 | 
						|
 | 
						|
        [RequiredField] public SRSpinner Spinner;
 | 
						|
 | 
						|
        [RequiredField] public Text Title;
 | 
						|
 | 
						|
        [RequiredField] public Text Value;
 | 
						|
 | 
						|
        protected override void Start()
 | 
						|
        {
 | 
						|
            base.Start();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnBind(string propertyName, Type t)
 | 
						|
        {
 | 
						|
            base.OnBind(propertyName, t);
 | 
						|
 | 
						|
            Title.text = propertyName;
 | 
						|
 | 
						|
            Spinner.interactable = !IsReadOnly;
 | 
						|
 | 
						|
            if (DisableOnReadOnly != null)
 | 
						|
            {
 | 
						|
                foreach (var child in DisableOnReadOnly)
 | 
						|
                {
 | 
						|
                    child.SetActive(!IsReadOnly);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            _names = Enum.GetNames(t);
 | 
						|
            _values = Enum.GetValues(t);
 | 
						|
 | 
						|
            var longestName = "";
 | 
						|
 | 
						|
            for (var i = 0; i < _names.Length; i++)
 | 
						|
            {
 | 
						|
                if (_names[i].Length > longestName.Length)
 | 
						|
                {
 | 
						|
                    longestName = _names[i];
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (_names.Length == 0)
 | 
						|
            {
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            // Set preferred width of content to the largest possible value size
 | 
						|
 | 
						|
            var width = Value.cachedTextGeneratorForLayout.GetPreferredWidth(longestName,
 | 
						|
                Value.GetGenerationSettings(new Vector2(float.MaxValue, Value.preferredHeight)));
 | 
						|
 | 
						|
            ContentLayoutElement.preferredWidth = width;
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnValueUpdated(object newValue)
 | 
						|
        {
 | 
						|
            _lastValue = newValue;
 | 
						|
            Value.text = newValue.ToString();
 | 
						|
        }
 | 
						|
 | 
						|
        public override bool CanBind(Type type, bool isReadOnly)
 | 
						|
        {
 | 
						|
#if NETFX_CORE
 | 
						|
			return type.GetTypeInfo().IsEnum;
 | 
						|
#else
 | 
						|
            return type.IsEnum;
 | 
						|
#endif
 | 
						|
        }
 | 
						|
 | 
						|
        private void SetIndex(int i)
 | 
						|
        {
 | 
						|
            UpdateValue(_values.GetValue(i));
 | 
						|
            Refresh();
 | 
						|
        }
 | 
						|
 | 
						|
        public void GoToNext()
 | 
						|
        {
 | 
						|
            var currentIndex = Array.IndexOf(_values, _lastValue);
 | 
						|
            SetIndex(SRMath.Wrap(_values.Length, currentIndex + 1));
 | 
						|
        }
 | 
						|
 | 
						|
        public void GoToPrevious()
 | 
						|
        {
 | 
						|
            var currentIndex = Array.IndexOf(_values, _lastValue);
 | 
						|
            SetIndex(SRMath.Wrap(_values.Length, currentIndex - 1));
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |