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