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; | |||
|  |         } | |||
|  |     } | |||
|  | } |