ConsoleTabController.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. using System;
  2. using SRDebugger.Internal;
  3. using SRDebugger.Services;
  4. using SRDebugger.UI.Controls;
  5. using SRF;
  6. using UnityEngine;
  7. using UnityEngine.Events;
  8. using UnityEngine.UI;
  9. namespace SRDebugger.UI.Tabs
  10. {
  11. public class ConsoleTabController : SRMonoBehaviourEx
  12. {
  13. protected override void Start()
  14. {
  15. base.Start();
  16. this._consoleCanvas = base.GetComponent<Canvas>();
  17. this.ToggleErrors.onValueChanged.AddListener(delegate(bool isOn)
  18. {
  19. this._isDirty = true;
  20. });
  21. this.ToggleWarnings.onValueChanged.AddListener(delegate(bool isOn)
  22. {
  23. this._isDirty = true;
  24. });
  25. this.ToggleInfo.onValueChanged.AddListener(delegate(bool isOn)
  26. {
  27. this._isDirty = true;
  28. });
  29. this.PinToggle.onValueChanged.AddListener(new UnityAction<bool>(this.PinToggleValueChanged));
  30. this.FilterToggle.onValueChanged.AddListener(new UnityAction<bool>(this.FilterToggleValueChanged));
  31. this.FilterBarContainer.SetActive(this.FilterToggle.isOn);
  32. this.FilterField.onValueChanged.AddListener(new UnityAction<string>(this.FilterValueChanged));
  33. this.ConsoleLogControl.SelectedItemChanged = new Action<ConsoleEntry>(this.ConsoleLogSelectedItemChanged);
  34. Service.Console.Updated += this.ConsoleOnUpdated;
  35. Service.Panel.VisibilityChanged += this.PanelOnVisibilityChanged;
  36. this.StackTraceText.supportRichText = Settings.Instance.RichTextInConsole;
  37. this.PopulateStackTraceArea(null);
  38. this.Refresh();
  39. }
  40. private void FilterToggleValueChanged(bool isOn)
  41. {
  42. if (isOn)
  43. {
  44. this.FilterBarContainer.SetActive(true);
  45. this.ConsoleLogControl.Filter = this.FilterField.text;
  46. }
  47. else
  48. {
  49. this.ConsoleLogControl.Filter = null;
  50. this.FilterBarContainer.SetActive(false);
  51. }
  52. }
  53. private void FilterValueChanged(string filterText)
  54. {
  55. if (this.FilterToggle.isOn && !string.IsNullOrEmpty(filterText) && filterText.Trim().Length != 0)
  56. {
  57. this.ConsoleLogControl.Filter = filterText;
  58. }
  59. else
  60. {
  61. this.ConsoleLogControl.Filter = null;
  62. }
  63. }
  64. private void PanelOnVisibilityChanged(IDebugPanelService debugPanelService, bool b)
  65. {
  66. if (this._consoleCanvas == null)
  67. {
  68. return;
  69. }
  70. if (b)
  71. {
  72. this._consoleCanvas.enabled = true;
  73. }
  74. else
  75. {
  76. this._consoleCanvas.enabled = false;
  77. }
  78. }
  79. private void PinToggleValueChanged(bool isOn)
  80. {
  81. Service.DockConsole.IsVisible = isOn;
  82. }
  83. protected override void OnDestroy()
  84. {
  85. if (Service.Console != null)
  86. {
  87. Service.Console.Updated -= this.ConsoleOnUpdated;
  88. }
  89. base.OnDestroy();
  90. }
  91. protected override void OnEnable()
  92. {
  93. base.OnEnable();
  94. this._isDirty = true;
  95. }
  96. private void ConsoleLogSelectedItemChanged(object item)
  97. {
  98. ConsoleEntry entry = item as ConsoleEntry;
  99. this.PopulateStackTraceArea(entry);
  100. }
  101. protected override void Update()
  102. {
  103. base.Update();
  104. if (this._isDirty)
  105. {
  106. this.Refresh();
  107. }
  108. }
  109. private void PopulateStackTraceArea(ConsoleEntry entry)
  110. {
  111. if (entry == null)
  112. {
  113. this.StackTraceText.text = string.Empty;
  114. }
  115. else
  116. {
  117. string text = entry.Message + Environment.NewLine + (string.IsNullOrEmpty(entry.StackTrace) ? SRDebugStrings.Current.Console_NoStackTrace : entry.StackTrace);
  118. if (text.Length > 2600)
  119. {
  120. text = text.Substring(0, 2600);
  121. text = text + "\n" + SRDebugStrings.Current.Console_MessageTruncated;
  122. }
  123. this.StackTraceText.text = text;
  124. }
  125. this.StackTraceScrollRect.normalizedPosition = new Vector2(0f, 1f);
  126. }
  127. private void Refresh()
  128. {
  129. this.ToggleInfoText.text = SRDebuggerUtil.GetNumberString(Service.Console.InfoCount, 999, "999+");
  130. this.ToggleWarningsText.text = SRDebuggerUtil.GetNumberString(Service.Console.WarningCount, 999, "999+");
  131. this.ToggleErrorsText.text = SRDebuggerUtil.GetNumberString(Service.Console.ErrorCount, 999, "999+");
  132. this.ConsoleLogControl.ShowErrors = this.ToggleErrors.isOn;
  133. this.ConsoleLogControl.ShowWarnings = this.ToggleWarnings.isOn;
  134. this.ConsoleLogControl.ShowInfo = this.ToggleInfo.isOn;
  135. this.PinToggle.isOn = Service.DockConsole.IsVisible;
  136. this._isDirty = false;
  137. }
  138. private void ConsoleOnUpdated(IConsoleService console)
  139. {
  140. this._isDirty = true;
  141. }
  142. public void Clear()
  143. {
  144. Service.Console.Clear();
  145. this._isDirty = true;
  146. }
  147. private const int MaxLength = 2600;
  148. private Canvas _consoleCanvas;
  149. private bool _isDirty;
  150. [RequiredField]
  151. public ConsoleLogControl ConsoleLogControl;
  152. [RequiredField]
  153. public Toggle PinToggle;
  154. [RequiredField]
  155. public ScrollRect StackTraceScrollRect;
  156. [RequiredField]
  157. public Text StackTraceText;
  158. [RequiredField]
  159. public Toggle ToggleErrors;
  160. [RequiredField]
  161. public Text ToggleErrorsText;
  162. [RequiredField]
  163. public Toggle ToggleInfo;
  164. [RequiredField]
  165. public Text ToggleInfoText;
  166. [RequiredField]
  167. public Toggle ToggleWarnings;
  168. [RequiredField]
  169. public Text ToggleWarningsText;
  170. [RequiredField]
  171. public Toggle FilterToggle;
  172. [RequiredField]
  173. public InputField FilterField;
  174. [RequiredField]
  175. public GameObject FilterBarContainer;
  176. }
  177. }