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