123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- //#define SR_CONSOLE_DEBUG
- using System.Collections;
- 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;
- private static bool _hasWarnedAboutLogHandler;
- private static bool _hasWarnedAboutLoggingDisabled;
- [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 GameObject CopyToClipboardContainer;
- [RequiredField]
- public GameObject CopyToClipboardButton;
- [RequiredField]
- public GameObject CopyToClipboardMessage;
- [RequiredField]
- public CanvasGroup CopyToClipboardMessageCanvasGroup;
- [RequiredField]
- public GameObject LoggingIsDisabledCanvasGroup;
- [RequiredField]
- public GameObject LogHandlerHasBeenOverridenGroup;
- [RequiredField]
- public Toggle FilterToggle;
- [RequiredField]
- public InputField FilterField;
- [RequiredField]
- public GameObject FilterBarContainer;
- private ConsoleEntry _selectedItem;
- private Coroutine _fadeButtonCoroutine;
- 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;
- StopAnimations();
- }
- }
- private void PinToggleValueChanged(bool isOn)
- {
- Service.DockConsole.IsVisible = isOn;
- }
- protected override void OnDestroy()
- {
- StopAnimations();
- if (Service.Console != null)
- {
- Service.Console.Updated -= ConsoleOnUpdated;
- }
-
- base.OnDestroy();
- }
- protected override void OnEnable()
- {
- base.OnEnable();
- _isDirty = true;
- }
- protected override void OnDisable()
- {
- base.OnDisable();
- StopAnimations();
- }
- 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)
- {
- SetCopyToClipboardButtonState(CopyToClipboardStates.Hidden);
- StackTraceText.text = "";
- }
- else
- {
- if (SRDebug.CopyConsoleItemCallback != null)
- {
- SetCopyToClipboardButtonState(CopyToClipboardStates.Visible);
- }
- 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);
- _selectedItem = entry;
- }
- public void CopyToClipboard()
- {
- if (_selectedItem != null)
- {
- SetCopyToClipboardButtonState(CopyToClipboardStates.Activated);
- if (SRDebug.CopyConsoleItemCallback != null)
- {
- SRDebug.CopyConsoleItemCallback(_selectedItem);
- }
- else
- {
- Debug.LogError("[SRDebugger] Copy to clipboard is not available.");
- }
- }
- }
- public enum CopyToClipboardStates
- {
- Hidden,
- Visible,
- Activated
- }
- void SetCopyToClipboardButtonState(CopyToClipboardStates state)
- {
- StopAnimations();
- switch (state)
- {
- case CopyToClipboardStates.Hidden:
- CopyToClipboardContainer.SetActive(false);
- CopyToClipboardButton.SetActive(false);
- CopyToClipboardMessage.SetActive(false);
- break;
- case CopyToClipboardStates.Visible:
- CopyToClipboardContainer.SetActive(true);
- CopyToClipboardButton.SetActive(true);
- CopyToClipboardMessage.SetActive(false);
- break;
- case CopyToClipboardStates.Activated:
- CopyToClipboardMessageCanvasGroup.alpha = 1;
- CopyToClipboardContainer.SetActive(true);
- CopyToClipboardButton.SetActive(false);
- CopyToClipboardMessage.SetActive(true);
- _fadeButtonCoroutine = StartCoroutine(FadeCopyButton());
- break;
- default:
- throw new ArgumentOutOfRangeException("state", state, null);
- }
- }
- IEnumerator FadeCopyButton()
- {
- yield return new WaitForSecondsRealtime(2f);
- float startTime = Time.realtimeSinceStartup;
- float endTime = Time.realtimeSinceStartup + 1f;
- while (Time.realtimeSinceStartup < endTime)
- {
- float currentAlpha = Mathf.InverseLerp(endTime, startTime, Time.realtimeSinceStartup);
- CopyToClipboardMessageCanvasGroup.alpha = currentAlpha;
- yield return new WaitForEndOfFrame();
- }
- CopyToClipboardMessageCanvasGroup.alpha = 0;
- _fadeButtonCoroutine = null;
- }
- void StopAnimations()
- {
- if (_fadeButtonCoroutine != null)
- {
- StopCoroutine(_fadeButtonCoroutine);
- _fadeButtonCoroutine = null;
- CopyToClipboardMessageCanvasGroup.alpha = 0;
- }
- }
- 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;
- if (!_hasWarnedAboutLogHandler && Service.Console.LogHandlerIsOverriden)
- {
- LogHandlerHasBeenOverridenGroup.SetActive(true);
- _hasWarnedAboutLogHandler = true;
- }
- if (!_hasWarnedAboutLoggingDisabled && !Service.Console.LoggingEnabled)
- {
- LoggingIsDisabledCanvasGroup.SetActive(true);
- }
- }
- private void ConsoleOnUpdated(IConsoleService console)
- {
- _isDirty = true;
- }
- public void Clear()
- {
- Service.Console.Clear();
- _isDirty = true;
- }
- public void LogHandlerHasBeenOverridenOkayButtonPress()
- {
- _hasWarnedAboutLogHandler = true;
- LogHandlerHasBeenOverridenGroup.SetActive(false);
- }
- public void LoggingDisableCloseAndIgnorePressed()
- {
- LoggingIsDisabledCanvasGroup.SetActive(false);
- _hasWarnedAboutLoggingDisabled = true;
- }
-
- public void LoggingDisableReenablePressed()
- {
- Service.Console.LoggingEnabled = true;
- LoggingIsDisabledCanvasGroup.SetActive(false);
- Debug.Log("[SRDebugger] Re-enabled logging.");
- }
- }
- }
|