NotificationDrawer.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace Unity.PlasticSCM.Editor.UI
  6. {
  7. internal class NotificationDrawer
  8. {
  9. private struct NotifyMessage
  10. {
  11. internal string Message { get; private set; }
  12. internal MessageType MessageType { get; private set; }
  13. internal Images.Name ImageName { get; private set; }
  14. internal NotifyMessage(string message, MessageType messageType, Images.Name imageName) :this()
  15. {
  16. this.Message = message;
  17. this.MessageType = messageType;
  18. this.ImageName = imageName;
  19. }
  20. }
  21. public NotificationDrawer()
  22. {
  23. notifications = new Queue<NotifyMessage>();
  24. }
  25. internal void Notify(string message, MessageType type, Images.Name imageName)
  26. {
  27. NotifyMessage notifyMessage = new NotifyMessage(message, type, imageName);
  28. notifications.Enqueue(notifyMessage);
  29. Task.Delay(AUTO_HIDE_DELAY).ContinueWith(t => notifications.Dequeue());
  30. }
  31. internal void DoDrawer()
  32. {
  33. foreach (NotifyMessage notifyMessage in notifications)
  34. {
  35. if (notifyMessage.MessageType!= MessageType.None)
  36. {
  37. EditorGUILayout.HelpBox(notifyMessage.Message, notifyMessage.MessageType);
  38. }
  39. else
  40. {
  41. if (notifyMessage.ImageName != Images.Name.None)
  42. {
  43. GUIStyle style = new GUIStyle(EditorStyles.helpBox);
  44. style.richText = true;
  45. style.fontSize=14;
  46. GUIContent stepLabelContent = new GUIContent(
  47. string.Format(" {0}", notifyMessage.Message),
  48. Images.GetImage(notifyMessage.ImageName));
  49. GUILayout.Label(
  50. stepLabelContent,
  51. style,
  52. GUILayout.Height(40));
  53. }
  54. }
  55. }
  56. }
  57. private Queue<NotifyMessage> notifications;
  58. const int AUTO_HIDE_DELAY = 5000;
  59. }
  60. }