116 lines
3.3 KiB
C#
116 lines
3.3 KiB
C#
using System;
|
|
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
using PlasticGui;
|
|
|
|
namespace Unity.PlasticSCM.Editor.UI.Progress
|
|
{
|
|
class ProgressControlsForDialogs : IProgressControls
|
|
{
|
|
internal class Data
|
|
{
|
|
internal bool IsWaitingAsyncResult;
|
|
internal float ProgressPercent;
|
|
internal string ProgressMessage;
|
|
|
|
internal MessageType StatusType;
|
|
internal string StatusMessage;
|
|
|
|
internal void CopyInto(Data other)
|
|
{
|
|
other.IsWaitingAsyncResult = IsWaitingAsyncResult;
|
|
other.ProgressPercent = ProgressPercent;
|
|
other.ProgressMessage = ProgressMessage;
|
|
other.StatusType = StatusType;
|
|
other.StatusMessage = StatusMessage;
|
|
}
|
|
}
|
|
|
|
internal Data ProgressData { get { return mData; } }
|
|
|
|
internal void ForcedUpdateProgress(EditorWindow dialog)
|
|
{
|
|
double updateTime;
|
|
float progressPercent;
|
|
GetUpdateProgress(
|
|
mLastUpdateTime, mData.ProgressPercent,
|
|
out updateTime, out progressPercent);
|
|
|
|
mLastUpdateTime = updateTime;
|
|
|
|
if (!mData.IsWaitingAsyncResult)
|
|
return;
|
|
|
|
mData.ProgressPercent = progressPercent;
|
|
|
|
if (Event.current.type == EventType.Repaint)
|
|
dialog.Repaint();
|
|
}
|
|
|
|
void IProgressControls.HideProgress()
|
|
{
|
|
mData.IsWaitingAsyncResult = false;
|
|
mData.ProgressMessage = string.Empty;
|
|
}
|
|
|
|
void IProgressControls.ShowProgress(string message)
|
|
{
|
|
CleanStatusMessage(mData);
|
|
|
|
mData.IsWaitingAsyncResult = true;
|
|
mData.ProgressPercent = 0f;
|
|
mData.ProgressMessage = message;
|
|
}
|
|
|
|
void IProgressControls.ShowError(string message)
|
|
{
|
|
mData.StatusMessage = message;
|
|
mData.StatusType = MessageType.Error;
|
|
}
|
|
|
|
void IProgressControls.ShowNotification(string message)
|
|
{
|
|
mData.StatusMessage = message;
|
|
mData.StatusType = MessageType.Info;
|
|
}
|
|
|
|
void IProgressControls.ShowSuccess(string message)
|
|
{
|
|
mData.StatusMessage = message;
|
|
mData.StatusType = MessageType.Info;
|
|
}
|
|
|
|
void IProgressControls.ShowWarning(string message)
|
|
{
|
|
mData.StatusMessage = message;
|
|
mData.StatusType = MessageType.Warning;
|
|
}
|
|
|
|
static void CleanStatusMessage(Data data)
|
|
{
|
|
data.StatusMessage = string.Empty;
|
|
data.StatusType = MessageType.None;
|
|
}
|
|
|
|
static void GetUpdateProgress(
|
|
double lastUpdateTime, float lastProgressPercent,
|
|
out double updateTime, out float progressPercent)
|
|
{
|
|
updateTime = EditorApplication.timeSinceStartup;
|
|
|
|
double deltaTime = Math.Min(0.1, updateTime - lastUpdateTime);
|
|
double deltaPercent = (deltaTime / 0.1) * PERCENT_PER_SECONDS;
|
|
|
|
progressPercent = Mathf.Repeat(
|
|
lastProgressPercent + (float)deltaPercent, 1f);
|
|
}
|
|
|
|
double mLastUpdateTime = 0.0;
|
|
|
|
Data mData = new Data();
|
|
|
|
const double PERCENT_PER_SECONDS = 0.06;
|
|
}
|
|
} |