| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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;
- }
- }
|