113 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			113 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								namespace SRDebugger.UI.Controls
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    using System;
							 | 
						|||
| 
								 | 
							
								    using Services;
							 | 
						|||
| 
								 | 
							
								    using SRF;
							 | 
						|||
| 
								 | 
							
								    using SRF.UI;
							 | 
						|||
| 
								 | 
							
								    using SRF.UI.Layout;
							 | 
						|||
| 
								 | 
							
								    using UnityEngine;
							 | 
						|||
| 
								 | 
							
								    using UnityEngine.UI;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    [RequireComponent(typeof (RectTransform))]
							 | 
						|||
| 
								 | 
							
								    public class ConsoleEntryView : SRMonoBehaviourEx, IVirtualView
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        public const string ConsoleBlobInfo = "Console_Info_Blob";
							 | 
						|||
| 
								 | 
							
								        public const string ConsoleBlobWarning = "Console_Warning_Blob";
							 | 
						|||
| 
								 | 
							
								        public const string ConsoleBlobError = "Console_Error_Blob";
							 | 
						|||
| 
								 | 
							
								        private int _count;
							 | 
						|||
| 
								 | 
							
								        private bool _hasCount;
							 | 
						|||
| 
								 | 
							
								        private ConsoleEntry _prevData;
							 | 
						|||
| 
								 | 
							
								        private RectTransform _rectTransform;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        [RequiredField] public Text Count;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        [RequiredField] public CanvasGroup CountContainer;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        [RequiredField] public StyleComponent ImageStyle;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        [RequiredField] public Text Message;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        [RequiredField] public Text StackTrace;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public void SetDataContext(object data)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var msg = data as ConsoleEntry;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (msg == null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                throw new Exception("Data should be a ConsoleEntry");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // Always check for updates on "Count", as it can change
							 | 
						|||
| 
								 | 
							
								            if (msg.Count > 1)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (!_hasCount)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    CountContainer.alpha = 1f;
							 | 
						|||
| 
								 | 
							
								                    _hasCount = true;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (msg.Count != _count)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    Count.text = Internal.SRDebuggerUtil.GetNumberString(msg.Count, 999, "999+");
							 | 
						|||
| 
								 | 
							
								                    _count = msg.Count;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else if (_hasCount)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                CountContainer.alpha = 0f;
							 | 
						|||
| 
								 | 
							
								                _hasCount = false;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // Only update everything else if data context has changed, not just for an update
							 | 
						|||
| 
								 | 
							
								            if (msg == _prevData)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            _prevData = msg;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Message.text = msg.MessagePreview;
							 | 
						|||
| 
								 | 
							
								            StackTrace.text = msg.StackTracePreview;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (string.IsNullOrEmpty(StackTrace.text))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Message.rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 2,
							 | 
						|||
| 
								 | 
							
								                    _rectTransform.rect.height - 4);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Message.rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 12,
							 | 
						|||
| 
								 | 
							
								                    _rectTransform.rect.height - 14);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            switch (msg.LogType)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                case LogType.Log:
							 | 
						|||
| 
								 | 
							
								                    ImageStyle.StyleKey = ConsoleBlobInfo;
							 | 
						|||
| 
								 | 
							
								                    break;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                case LogType.Warning:
							 | 
						|||
| 
								 | 
							
								                    ImageStyle.StyleKey = ConsoleBlobWarning;
							 | 
						|||
| 
								 | 
							
								                    break;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                case LogType.Exception:
							 | 
						|||
| 
								 | 
							
								                case LogType.Assert:
							 | 
						|||
| 
								 | 
							
								                case LogType.Error:
							 | 
						|||
| 
								 | 
							
								                    ImageStyle.StyleKey = ConsoleBlobError;
							 | 
						|||
| 
								 | 
							
								                    break;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        protected override void Awake()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            base.Awake();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            _rectTransform = CachedTransform as RectTransform;
							 | 
						|||
| 
								 | 
							
								            CountContainer.alpha = 0f;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Message.supportRichText = Settings.Instance.RichTextInConsole;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |