Nav apraksta
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

NotificationBar.cs 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. static void DrawCloseButton(NotificationBar notificationBar)
  51. {
  52. GUILayout.BeginVertical();
  53. GUILayout.FlexibleSpace();
  54. if (GUILayout.Button(
  55. new GUIContent(Images.GetCloseIcon()),
  56. UnityStyles.StatusBar.NotificationPanelCloseButton))
  57. {
  58. notificationBar.SetVisibility(false);
  59. }
  60. GUILayout.FlexibleSpace();
  61. GUILayout.EndVertical();
  62. }
  63. class ActionPanel
  64. {
  65. internal bool HasNotification { get; private set; }
  66. internal void SetAction(
  67. CloudServerInfo cloudServerInfo,
  68. CloudOrganizationHelpActionsResponse.Action action,
  69. bool isContactSupportAction)
  70. {
  71. if (action == null)
  72. {
  73. HasNotification = false;
  74. return;
  75. }
  76. mCloudServerInfo = cloudServerInfo;
  77. mActionButton = action.Button;
  78. mIsContactSupportAction = isContactSupportAction;
  79. HasNotification = true;
  80. mLabelText = action.Message;
  81. SetButton(action.Button);
  82. }
  83. internal void OnGUI()
  84. {
  85. DrawLabel(mLabelText);
  86. if (!mIsButtonVisible)
  87. return;
  88. DrawButton(
  89. mCloudServerInfo, mActionButton.Url,
  90. mIsContactSupportAction, mButtonText);
  91. }
  92. void SetButton(
  93. CloudOrganizationHelpActionsResponse.ActionButton actionButton)
  94. {
  95. if (actionButton == null)
  96. {
  97. mButtonText = string.Empty;
  98. mIsButtonVisible = false;
  99. return;
  100. }
  101. mButtonText = actionButton.Caption;
  102. mIsButtonVisible = true;
  103. }
  104. static void DrawLabel(string text)
  105. {
  106. GUILayout.BeginVertical();
  107. GUILayout.FlexibleSpace();
  108. GUILayout.Label(
  109. text,
  110. UnityStyles.StatusBar.Label);
  111. GUILayout.FlexibleSpace();
  112. GUILayout.EndVertical();
  113. }
  114. static void DrawButton(
  115. CloudServerInfo cloudServerInfo,
  116. string actionButtonUrl,
  117. bool isContactSupportAction,
  118. string buttonText)
  119. {
  120. GUILayout.BeginVertical();
  121. GUILayout.FlexibleSpace();
  122. if (GUILayout.Button(
  123. buttonText,
  124. UnityStyles.StatusBar.LinkLabel))
  125. {
  126. LaunchNotificationAction.For(
  127. cloudServerInfo,
  128. actionButtonUrl,
  129. isContactSupportAction);
  130. }
  131. GUILayout.FlexibleSpace();
  132. GUILayout.EndVertical();
  133. }
  134. bool mIsButtonVisible;
  135. string mButtonText;
  136. string mLabelText;
  137. bool mIsContactSupportAction;
  138. CloudOrganizationHelpActionsResponse.ActionButton mActionButton;
  139. CloudServerInfo mCloudServerInfo;
  140. }
  141. ActionPanel mSubscriptionPanel;
  142. ActionPanel mContactPanel;
  143. }
  144. }