217 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C#
		
	
	
	
//#define SR_CONSOLE_DEBUG
 | 
						|
 | 
						|
namespace SRDebugger.UI.Tabs
 | 
						|
{
 | 
						|
    using System;
 | 
						|
    using Controls;
 | 
						|
    using Internal;
 | 
						|
    using Services;
 | 
						|
    using SRF;
 | 
						|
    using UnityEngine;
 | 
						|
    using UnityEngine.UI;
 | 
						|
 | 
						|
    public class ConsoleTabController : SRMonoBehaviourEx
 | 
						|
    {
 | 
						|
        private const int MaxLength = 2600;
 | 
						|
 | 
						|
        private Canvas _consoleCanvas;
 | 
						|
        private bool _isDirty;
 | 
						|
 | 
						|
        [RequiredField]
 | 
						|
        public ConsoleLogControl ConsoleLogControl;
 | 
						|
 | 
						|
        [RequiredField]
 | 
						|
        public Toggle PinToggle;
 | 
						|
        //public bool IsListening = true;
 | 
						|
 | 
						|
        [RequiredField]
 | 
						|
        public ScrollRect StackTraceScrollRect;
 | 
						|
        [RequiredField]
 | 
						|
        public Text StackTraceText;
 | 
						|
        [RequiredField]
 | 
						|
        public Toggle ToggleErrors;
 | 
						|
        [RequiredField]
 | 
						|
        public Text ToggleErrorsText;
 | 
						|
        [RequiredField]
 | 
						|
        public Toggle ToggleInfo;
 | 
						|
        [RequiredField]
 | 
						|
        public Text ToggleInfoText;
 | 
						|
        [RequiredField]
 | 
						|
        public Toggle ToggleWarnings;
 | 
						|
        [RequiredField]
 | 
						|
        public Text ToggleWarningsText;
 | 
						|
 | 
						|
        [RequiredField]
 | 
						|
        public Toggle FilterToggle;
 | 
						|
        [RequiredField]
 | 
						|
        public InputField FilterField;
 | 
						|
        [RequiredField]
 | 
						|
        public GameObject FilterBarContainer;
 | 
						|
 | 
						|
        protected override void Start()
 | 
						|
        {
 | 
						|
            base.Start();
 | 
						|
 | 
						|
            _consoleCanvas = GetComponent<Canvas>();
 | 
						|
 | 
						|
            ToggleErrors.onValueChanged.AddListener(isOn => _isDirty = true);
 | 
						|
            ToggleWarnings.onValueChanged.AddListener(isOn => _isDirty = true);
 | 
						|
            ToggleInfo.onValueChanged.AddListener(isOn => _isDirty = true);
 | 
						|
 | 
						|
            PinToggle.onValueChanged.AddListener(PinToggleValueChanged);
 | 
						|
 | 
						|
            FilterToggle.onValueChanged.AddListener(FilterToggleValueChanged);
 | 
						|
            FilterBarContainer.SetActive(FilterToggle.isOn);
 | 
						|
 | 
						|
#if UNITY_5_3_OR_NEWER
 | 
						|
            FilterField.onValueChanged.AddListener(FilterValueChanged);
 | 
						|
#else
 | 
						|
            FilterField.onValueChange.AddListener(FilterValueChanged);
 | 
						|
#endif
 | 
						|
 | 
						|
            ConsoleLogControl.SelectedItemChanged = ConsoleLogSelectedItemChanged;
 | 
						|
 | 
						|
            Service.Console.Updated += ConsoleOnUpdated;
 | 
						|
            Service.Panel.VisibilityChanged += PanelOnVisibilityChanged;
 | 
						|
 | 
						|
            StackTraceText.supportRichText = Settings.Instance.RichTextInConsole;
 | 
						|
            PopulateStackTraceArea(null);
 | 
						|
 | 
						|
            Refresh();
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        private void FilterToggleValueChanged(bool isOn)
 | 
						|
        {
 | 
						|
            if (isOn)
 | 
						|
            {
 | 
						|
                FilterBarContainer.SetActive(true);
 | 
						|
                ConsoleLogControl.Filter = FilterField.text;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                ConsoleLogControl.Filter = null;
 | 
						|
                FilterBarContainer.SetActive(false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        private void FilterValueChanged(string filterText)
 | 
						|
        {
 | 
						|
            if (FilterToggle.isOn && !string.IsNullOrEmpty(filterText) && filterText.Trim().Length != 0)
 | 
						|
            {
 | 
						|
                ConsoleLogControl.Filter = filterText;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                ConsoleLogControl.Filter = null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void PanelOnVisibilityChanged(IDebugPanelService debugPanelService, bool b)
 | 
						|
        {
 | 
						|
            if (_consoleCanvas == null)
 | 
						|
            {
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            if (b)
 | 
						|
            {
 | 
						|
                _consoleCanvas.enabled = true;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                _consoleCanvas.enabled = false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void PinToggleValueChanged(bool isOn)
 | 
						|
        {
 | 
						|
            Service.DockConsole.IsVisible = isOn;
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnDestroy()
 | 
						|
        {
 | 
						|
            if (Service.Console != null)
 | 
						|
            {
 | 
						|
                Service.Console.Updated -= ConsoleOnUpdated;
 | 
						|
            }
 | 
						|
 | 
						|
            base.OnDestroy();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnEnable()
 | 
						|
        {
 | 
						|
            base.OnEnable();
 | 
						|
 | 
						|
            _isDirty = true;
 | 
						|
        }
 | 
						|
 | 
						|
        private void ConsoleLogSelectedItemChanged(object item)
 | 
						|
        {
 | 
						|
            var log = item as ConsoleEntry;
 | 
						|
            PopulateStackTraceArea(log);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void Update()
 | 
						|
        {
 | 
						|
            base.Update();
 | 
						|
 | 
						|
            if (_isDirty)
 | 
						|
            {
 | 
						|
                Refresh();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void PopulateStackTraceArea(ConsoleEntry entry)
 | 
						|
        {
 | 
						|
            if (entry == null)
 | 
						|
            {
 | 
						|
                StackTraceText.text = "";
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                var text = entry.Message + Environment.NewLine +
 | 
						|
                           (!string.IsNullOrEmpty(entry.StackTrace)
 | 
						|
                               ? entry.StackTrace
 | 
						|
                               : SRDebugStrings.Current.Console_NoStackTrace);
 | 
						|
 | 
						|
                if (text.Length > MaxLength)
 | 
						|
                {
 | 
						|
                    text = text.Substring(0, MaxLength);
 | 
						|
                    text += "\n" + SRDebugStrings.Current.Console_MessageTruncated;
 | 
						|
                }
 | 
						|
 | 
						|
                StackTraceText.text = text;
 | 
						|
            }
 | 
						|
 | 
						|
            StackTraceScrollRect.normalizedPosition = new Vector2(0, 1);
 | 
						|
        }
 | 
						|
 | 
						|
        private void Refresh()
 | 
						|
        {
 | 
						|
            // Update total counts labels
 | 
						|
            ToggleInfoText.text = SRDebuggerUtil.GetNumberString(Service.Console.InfoCount, 999, "999+");
 | 
						|
            ToggleWarningsText.text = SRDebuggerUtil.GetNumberString(Service.Console.WarningCount, 999, "999+");
 | 
						|
            ToggleErrorsText.text = SRDebuggerUtil.GetNumberString(Service.Console.ErrorCount, 999, "999+");
 | 
						|
 | 
						|
            ConsoleLogControl.ShowErrors = ToggleErrors.isOn;
 | 
						|
            ConsoleLogControl.ShowWarnings = ToggleWarnings.isOn;
 | 
						|
            ConsoleLogControl.ShowInfo = ToggleInfo.isOn;
 | 
						|
 | 
						|
            PinToggle.isOn = Service.DockConsole.IsVisible;
 | 
						|
 | 
						|
            _isDirty = false;
 | 
						|
        }
 | 
						|
 | 
						|
        private void ConsoleOnUpdated(IConsoleService console)
 | 
						|
        {
 | 
						|
            _isDirty = true;
 | 
						|
        }
 | 
						|
 | 
						|
        public void Clear()
 | 
						|
        {
 | 
						|
            Service.Console.Clear();
 | 
						|
            _isDirty = true;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |