MessageList.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using UnityEditor;
  2. using UnityEngine;
  3. using System.Collections.Generic;
  4. namespace AssetBundleBrowser
  5. {
  6. internal class MessageList
  7. {
  8. private Vector2 m_ScrollPosition = Vector2.zero;
  9. private GUIStyle[] m_Style = new GUIStyle[2];
  10. IEnumerable<AssetBundleModel.AssetInfo> m_Selecteditems;
  11. List<MessageSystem.Message> m_Messages;
  12. Vector2 m_Dimensions = new Vector2(0, 0);
  13. const float k_ScrollbarPadding = 16f;
  14. const float k_BorderSize = 1f;
  15. internal MessageList()
  16. {
  17. Init();
  18. }
  19. private void Init()
  20. {
  21. m_Style[0] = "OL EntryBackOdd";
  22. m_Style[1] = "OL EntryBackEven";
  23. m_Style[0].wordWrap = true;
  24. m_Style[1].wordWrap = true;
  25. m_Style[0].padding = new RectOffset(32, 0, 1, 4);
  26. m_Style[1].padding = new RectOffset(32, 0, 1, 4);
  27. m_Messages = new List<MessageSystem.Message>();
  28. }
  29. internal void OnGUI(Rect fullPos)
  30. {
  31. DrawOutline(fullPos, 1f);
  32. Rect pos = new Rect(fullPos.x + k_BorderSize, fullPos.y + k_BorderSize, fullPos.width - 2 * k_BorderSize, fullPos.height - 2 * k_BorderSize);
  33. if (m_Dimensions.y == 0 || m_Dimensions.x != pos.width - k_ScrollbarPadding)
  34. {
  35. //recalculate height.
  36. m_Dimensions.x = pos.width - k_ScrollbarPadding;
  37. m_Dimensions.y = 0;
  38. foreach (var message in m_Messages)
  39. {
  40. m_Dimensions.y += m_Style[0].CalcHeight(new GUIContent(message.message), m_Dimensions.x);
  41. }
  42. }
  43. m_ScrollPosition = GUI.BeginScrollView(pos, m_ScrollPosition, new Rect(0, 0, m_Dimensions.x, m_Dimensions.y));
  44. int counter = 0;
  45. float runningHeight = 0.0f;
  46. foreach (var message in m_Messages)
  47. {
  48. int index = counter % 2;
  49. var content = new GUIContent(message.message);
  50. float height = m_Style[index].CalcHeight(content, m_Dimensions.x);
  51. GUI.Box(new Rect(0, runningHeight, m_Dimensions.x, height), content, m_Style[index]);
  52. GUI.DrawTexture(new Rect(0, runningHeight, 32f, 32f), message.icon);
  53. //TODO - cleanup formatting issues and switch to HelpBox
  54. //EditorGUI.HelpBox(new Rect(0, runningHeight, m_dimensions.x, height), message.message, (MessageType)message.severity);
  55. counter++;
  56. runningHeight += height;
  57. }
  58. GUI.EndScrollView();
  59. }
  60. internal void SetItems(IEnumerable<AssetBundleModel.AssetInfo> items)
  61. {
  62. m_Selecteditems = items;
  63. CollectMessages();
  64. }
  65. internal void CollectMessages()
  66. {
  67. m_Messages.Clear();
  68. m_Dimensions.y = 0f;
  69. if(m_Selecteditems != null)
  70. {
  71. foreach (var asset in m_Selecteditems)
  72. {
  73. m_Messages.AddRange(asset.GetMessages());
  74. }
  75. }
  76. }
  77. internal void DrawOutline(Rect rect, float size)
  78. {
  79. Color color = new Color(0.6f, 0.6f, 0.6f, 1.333f);
  80. if(EditorGUIUtility.isProSkin)
  81. {
  82. color.r = 0.12f;
  83. color.g = 0.12f;
  84. color.b = 0.12f;
  85. }
  86. if (Event.current.type != EventType.Repaint)
  87. return;
  88. Color orgColor = GUI.color;
  89. GUI.color = GUI.color * color;
  90. GUI.DrawTexture(new Rect(rect.x, rect.y, rect.width, size), EditorGUIUtility.whiteTexture);
  91. GUI.DrawTexture(new Rect(rect.x, rect.yMax - size, rect.width, size), EditorGUIUtility.whiteTexture);
  92. GUI.DrawTexture(new Rect(rect.x, rect.y + 1, size, rect.height - 2 * size), EditorGUIUtility.whiteTexture);
  93. GUI.DrawTexture(new Rect(rect.xMax - size, rect.y + 1, size, rect.height - 2 * size), EditorGUIUtility.whiteTexture);
  94. GUI.color = orgColor;
  95. }
  96. }
  97. }