DrawProgressForOperations.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using UnityEditor;
  2. using UnityEngine;
  3. namespace Unity.PlasticSCM.Editor.UI.Progress
  4. {
  5. internal static class DrawProgressForOperations
  6. {
  7. internal static void For(
  8. WorkspaceWindow workspaceWindow,
  9. OperationProgressData operationProgressData,
  10. float width)
  11. {
  12. EditorGUILayout.BeginVertical(
  13. EditorStyles.helpBox, GUILayout.Height(60));
  14. GUILayout.Label(
  15. operationProgressData.ProgressHeader ?? string.Empty,
  16. EditorStyles.miniLabel);
  17. DoProgressBar(
  18. operationProgressData.TotalProgressMessage,
  19. (float)operationProgressData.TotalProgressPercent,
  20. operationProgressData.CanCancelProgress, width);
  21. if (operationProgressData.CanCancelProgress)
  22. DoCancelButton(workspaceWindow);
  23. if (operationProgressData.ShowCurrentBlock)
  24. {
  25. GUILayout.Space(6);
  26. DoProgressBar(
  27. operationProgressData.CurrentBlockProgressMessage,
  28. (float)operationProgressData.CurrentBlockProgressPercent,
  29. operationProgressData.CanCancelProgress, width);
  30. }
  31. EditorGUILayout.EndVertical();
  32. }
  33. static void DoProgressBar(
  34. string message,
  35. float progressPercent,
  36. bool canCancel,
  37. float width)
  38. {
  39. Rect progressRect = GUILayoutUtility.GetRect(width, 15);
  40. if (canCancel)
  41. progressRect.width -= UnityConstants.CANCEL_BUTTON_SIZE + 2;
  42. EditorGUI.ProgressBar(progressRect, progressPercent, string.Empty);
  43. progressRect.xMin += 4;
  44. GUI.Label(progressRect, message, EditorStyles.miniLabel);
  45. }
  46. static void DoCancelButton(
  47. WorkspaceWindow workspaceWindow)
  48. {
  49. Rect beginRect = GUILayoutUtility.GetLastRect();
  50. Rect endRect = GUILayoutUtility.GetLastRect();
  51. float freeVerticalSpace = endRect.yMax - beginRect.yMin;
  52. Rect cancelButtonRect = new Rect(
  53. endRect.xMax - UnityConstants.CANCEL_BUTTON_SIZE + 1,
  54. beginRect.yMin + (freeVerticalSpace - UnityConstants.CANCEL_BUTTON_SIZE) / 2,
  55. UnityConstants.CANCEL_BUTTON_SIZE, UnityConstants.CANCEL_BUTTON_SIZE);
  56. if (!GUI.Button(cancelButtonRect, GUIContent.none, UnityStyles.CancelButton))
  57. return;
  58. workspaceWindow.CancelCurrentOperation();
  59. }
  60. }
  61. }