78 lines
2.6 KiB
C#
78 lines
2.6 KiB
C#
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Unity.PlasticSCM.Editor.UI.Progress
|
|
{
|
|
internal static class DrawProgressForOperations
|
|
{
|
|
internal static void For(
|
|
WorkspaceWindow workspaceWindow,
|
|
OperationProgressData operationProgressData,
|
|
float width)
|
|
{
|
|
EditorGUILayout.BeginVertical(
|
|
EditorStyles.helpBox, GUILayout.Height(60));
|
|
|
|
GUILayout.Label(
|
|
operationProgressData.ProgressHeader ?? string.Empty,
|
|
EditorStyles.miniLabel);
|
|
|
|
DoProgressBar(
|
|
operationProgressData.TotalProgressMessage,
|
|
(float)operationProgressData.TotalProgressPercent,
|
|
operationProgressData.CanCancelProgress, width);
|
|
|
|
if (operationProgressData.CanCancelProgress)
|
|
DoCancelButton(workspaceWindow);
|
|
|
|
if (operationProgressData.ShowCurrentBlock)
|
|
{
|
|
GUILayout.Space(6);
|
|
DoProgressBar(
|
|
operationProgressData.CurrentBlockProgressMessage,
|
|
(float)operationProgressData.CurrentBlockProgressPercent,
|
|
operationProgressData.CanCancelProgress, width);
|
|
}
|
|
|
|
EditorGUILayout.EndVertical();
|
|
}
|
|
|
|
static void DoProgressBar(
|
|
string message,
|
|
float progressPercent,
|
|
bool canCancel,
|
|
float width)
|
|
{
|
|
Rect progressRect = GUILayoutUtility.GetRect(width, 15);
|
|
|
|
if (canCancel)
|
|
progressRect.width -= UnityConstants.CANCEL_BUTTON_SIZE + 2;
|
|
|
|
EditorGUI.ProgressBar(progressRect, progressPercent, string.Empty);
|
|
|
|
progressRect.xMin += 4;
|
|
|
|
GUI.Label(progressRect, message, EditorStyles.miniLabel);
|
|
}
|
|
|
|
static void DoCancelButton(
|
|
WorkspaceWindow workspaceWindow)
|
|
{
|
|
Rect beginRect = GUILayoutUtility.GetLastRect();
|
|
Rect endRect = GUILayoutUtility.GetLastRect();
|
|
|
|
float freeVerticalSpace = endRect.yMax - beginRect.yMin;
|
|
|
|
Rect cancelButtonRect = new Rect(
|
|
endRect.xMax - UnityConstants.CANCEL_BUTTON_SIZE + 1,
|
|
beginRect.yMin + (freeVerticalSpace - UnityConstants.CANCEL_BUTTON_SIZE) / 2,
|
|
UnityConstants.CANCEL_BUTTON_SIZE, UnityConstants.CANCEL_BUTTON_SIZE);
|
|
|
|
if (!GUI.Button(cancelButtonRect, GUIContent.none, UnityStyles.CancelButton))
|
|
return;
|
|
|
|
workspaceWindow.CancelCurrentOperation();
|
|
}
|
|
}
|
|
}
|