No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

NotificationBar.cs 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. using UnityEditor;
  2. using UnityEngine;
  3. using PlasticGui.WebApi.Responses;
  4. using PlasticGui.WorkspaceWindow.NotificationBar;
  5. namespace Unity.PlasticSCM.Editor.UI.StatusBar
  6. {
  7. class NotificationBar : INotificationBar
  8. {
  9. internal bool HasNotification { get; private set; }
  10. internal bool IsVisible { get; private set; }
  11. internal NotificationBar()
  12. {
  13. mSubscriptionPanel = new ActionPanel();
  14. mContactPanel = new ActionPanel();
  15. IsVisible = EditorPrefs.GetBool(
  16. UnityConstants.SHOW_NOTIFICATION_KEY_NAME,
  17. true);
  18. }
  19. internal void SetVisibility(bool isVisible)
  20. {
  21. IsVisible = isVisible;
  22. EditorPrefs.SetBool(
  23. UnityConstants.SHOW_NOTIFICATION_KEY_NAME,
  24. isVisible);
  25. }
  26. internal void OnGUI()
  27. {
  28. GUILayout.BeginVertical();
  29. GUILayout.FlexibleSpace();
  30. GUILayout.BeginHorizontal(UnityStyles.StatusBar.NotificationPanel);
  31. if (mSubscriptionPanel.HasNotification)
  32. mSubscriptionPanel.OnGUI();
  33. GUILayout.FlexibleSpace();
  34. if (mContactPanel.HasNotification)
  35. mContactPanel.OnGUI();
  36. DrawCloseButton(this);
  37. GUILayout.EndHorizontal();
  38. GUILayout.FlexibleSpace();
  39. GUILayout.EndVertical();
  40. }
  41. void INotificationBar.SetActions(
  42. CloudServerInfo cloudServerInfo,
  43. CloudOrganizationHelpActionsResponse.Action subscriptionAction,
  44. CloudOrganizationHelpActionsResponse.Action contactAction)
  45. {
  46. mSubscriptionPanel.SetAction(cloudServerInfo, subscriptionAction, false);
  47. mContactPanel.SetAction(cloudServerInfo, contactAction, true);
  48. HasNotification = mSubscriptionPanel.HasNotification || mContactPanel.HasNotification;
  49. }
  50. void INotificationBar.CleanActions()
  51. {
  52. HasNotification = false;
  53. mSubscriptionPanel.SetAction(null, null, false);
  54. mContactPanel.SetAction(null, null, false);
  55. }
  56. static void DrawCloseButton(NotificationBar notificationBar)
  57. {
  58. GUILayout.BeginVertical();
  59. GUILayout.FlexibleSpace();
  60. if (GUILayout.Button(
  61. new GUIContent(Images.GetCloseIcon()),
  62. UnityStyles.StatusBar.NotificationPanelCloseButton))
  63. {
  64. notificationBar.SetVisibility(false);
  65. }
  66. GUILayout.FlexibleSpace();
  67. GUILayout.EndVertical();
  68. }
  69. class ActionPanel
  70. {
  71. internal bool HasNotification { get; private set; }
  72. internal void SetAction(
  73. CloudServerInfo cloudServerInfo,
  74. CloudOrganizationHelpActionsResponse.Action action,
  75. bool isContactSupportAction)
  76. {
  77. if (action == null)
  78. {
  79. HasNotification = false;
  80. return;
  81. }
  82. mCloudServerInfo = cloudServerInfo;
  83. mActionButton = action.Button;
  84. mIsContactSupportAction = isContactSupportAction;
  85. HasNotification = true;
  86. mLabelText = action.Message;
  87. SetButton(action.Button);
  88. }
  89. internal void OnGUI()
  90. {
  91. DrawLabel(mLabelText);
  92. if (!mIsButtonVisible)
  93. return;
  94. DrawButton(
  95. mCloudServerInfo, mActionButton.Url,
  96. mIsContactSupportAction, mButtonText);
  97. }
  98. void SetButton(
  99. CloudOrganizationHelpActionsResponse.ActionButton actionButton)
  100. {
  101. if (actionButton == null)
  102. {
  103. mButtonText = string.Empty;
  104. mIsButtonVisible = false;
  105. return;
  106. }
  107. mButtonText = actionButton.Caption;
  108. mIsButtonVisible = true;
  109. }
  110. static void DrawLabel(string text)
  111. {
  112. GUILayout.BeginVertical();
  113. GUILayout.FlexibleSpace();
  114. GUILayout.Label(
  115. text,
  116. UnityStyles.StatusBar.Label);
  117. GUILayout.FlexibleSpace();
  118. GUILayout.EndVertical();
  119. }
  120. static void DrawButton(
  121. CloudServerInfo cloudServerInfo,
  122. string actionButtonUrl,
  123. bool isContactSupportAction,
  124. string buttonText)
  125. {
  126. GUILayout.BeginVertical();
  127. GUILayout.FlexibleSpace();
  128. if (GUILayout.Button(
  129. buttonText,
  130. UnityStyles.StatusBar.LinkLabel))
  131. {
  132. LaunchNotificationAction.For(
  133. cloudServerInfo,
  134. actionButtonUrl,
  135. isContactSupportAction);
  136. }
  137. GUILayout.FlexibleSpace();
  138. GUILayout.EndVertical();
  139. }
  140. bool mIsButtonVisible;
  141. string mButtonText;
  142. string mLabelText;
  143. bool mIsContactSupportAction;
  144. CloudOrganizationHelpActionsResponse.ActionButton mActionButton;
  145. CloudServerInfo mCloudServerInfo;
  146. }
  147. ActionPanel mSubscriptionPanel;
  148. ActionPanel mContactPanel;
  149. }
  150. }