DrawIncomingChangesNotificationPanel.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. using UnityEditor;
  2. using UnityEngine;
  3. using Codice.CM.Common;
  4. using PlasticGui;
  5. using PlasticGui.Gluon;
  6. using PlasticGui.WorkspaceWindow.PendingChanges;
  7. using Unity.PlasticSCM.Editor.UI;
  8. using GluonShowIncomingChanges = PlasticGui.Gluon.WorkspaceWindow.ShowIncomingChanges;
  9. namespace Unity.PlasticSCM.Editor
  10. {
  11. internal class NotificationPanelData
  12. {
  13. internal enum StyleType
  14. {
  15. None,
  16. Red,
  17. Green,
  18. }
  19. internal bool HasUpdateAction;
  20. internal string InfoText;
  21. internal string ActionText;
  22. internal string TooltipText;
  23. internal StyleType NotificationStyle;
  24. internal void Clear()
  25. {
  26. HasUpdateAction = false;
  27. InfoText = string.Empty;
  28. ActionText = string.Empty;
  29. TooltipText = string.Empty;
  30. NotificationStyle = StyleType.None;
  31. }
  32. }
  33. interface IIncomingChangesNotificationPanel
  34. {
  35. bool IsVisible
  36. {
  37. get;
  38. }
  39. NotificationPanelData Data
  40. {
  41. get;
  42. }
  43. }
  44. internal static class DrawIncomingChangesNotificationPanel
  45. {
  46. internal static void ForMode(
  47. WorkspaceInfo workspaceInfo,
  48. WorkspaceWindow workspaceWindow,
  49. IMergeViewLauncher mergeViewLauncher,
  50. IGluonViewSwitcher gluonSwitcher,
  51. bool isGluonMode,
  52. bool isVisible,
  53. NotificationPanelData notificationPanelData)
  54. {
  55. if (!isVisible)
  56. return;
  57. GUIContent labelContent = new GUIContent(
  58. notificationPanelData.InfoText, notificationPanelData.TooltipText);
  59. GUIContent buttonContent = new GUIContent(
  60. notificationPanelData.ActionText, notificationPanelData.TooltipText);
  61. float panelWidth = GetPanelWidth(
  62. labelContent, buttonContent,
  63. UnityStyles.Notification.Label, EditorStyles.miniButton);
  64. EditorGUILayout.BeginHorizontal(
  65. GetStyle(notificationPanelData.NotificationStyle),
  66. GUILayout.Width(panelWidth));
  67. GUILayout.Label(labelContent, UnityStyles.Notification.Label);
  68. DoActionButton(
  69. workspaceInfo, workspaceWindow,
  70. mergeViewLauncher, gluonSwitcher, isGluonMode,
  71. notificationPanelData.HasUpdateAction,
  72. buttonContent, EditorStyles.miniButton);
  73. EditorGUILayout.EndHorizontal();
  74. }
  75. static void DoActionButton(
  76. WorkspaceInfo workspaceInfo,
  77. WorkspaceWindow workspaceWindow,
  78. IMergeViewLauncher mergeViewLauncher,
  79. IGluonViewSwitcher gluonSwitcher,
  80. bool isGluonMode,
  81. bool isUpdateAction,
  82. GUIContent buttonContent,
  83. GUIStyle buttonStyle)
  84. {
  85. if (!GUILayout.Button(
  86. buttonContent, buttonStyle,
  87. GUILayout.ExpandHeight(true),
  88. GUILayout.MinWidth(40)))
  89. return;
  90. if (isUpdateAction)
  91. {
  92. workspaceWindow.UpdateWorkspace();
  93. return;
  94. }
  95. ShowIncomingChangesForMode(
  96. workspaceInfo, mergeViewLauncher,
  97. gluonSwitcher, isGluonMode);
  98. }
  99. static void ShowIncomingChangesForMode(
  100. WorkspaceInfo workspaceInfo,
  101. IMergeViewLauncher mergeViewLauncher,
  102. IGluonViewSwitcher gluonSwitcher,
  103. bool isGluonMode)
  104. {
  105. if (isGluonMode)
  106. {
  107. GluonShowIncomingChanges.FromNotificationBar(
  108. workspaceInfo, gluonSwitcher);
  109. return;
  110. }
  111. ShowIncomingChanges.FromNotificationBar(
  112. workspaceInfo, mergeViewLauncher);
  113. }
  114. static GUIStyle GetStyle(
  115. NotificationPanelData.StyleType styleType)
  116. {
  117. if (styleType == NotificationPanelData.StyleType.Red)
  118. return UnityStyles.Notification.RedNotification;
  119. return UnityStyles.Notification.GreenNotification;
  120. }
  121. static float GetPanelWidth(
  122. GUIContent labelContent, GUIContent buttonContent,
  123. GUIStyle labelStyle, GUIStyle buttonStyle)
  124. {
  125. return labelStyle.CalcSize(labelContent).x +
  126. buttonStyle.CalcSize(buttonContent).x + 12;
  127. }
  128. }
  129. }