using UnityEditor; using UnityEngine.UIElements; using PlasticGui; namespace Unity.PlasticSCM.Editor.UI.UIElements { class ProgressControlsForDialogs : VisualElement, 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() { if (mData.IsWaitingAsyncResult) { mUndefinedProgress.Show(); mPercentageLabel.Show(); mLoadingSpinner.Start(); EditorApplication.update += UpdatePercent; } else { mUndefinedProgress.Collapse(); mPercentageLabel.Collapse(); mLoadingSpinner.Stop(); EditorApplication.update -= UpdatePercent; } mStatusLabel.text = mData.StatusMessage; mProgressLabel.text = mData.ProgressMessage; } internal void UpdatePercent() { if (mData.ProgressPercent >= 0) mPercentageLabel.text = string.Format("({0}%)", (int)(mData.ProgressPercent * 100)); else mPercentageLabel.text = ""; } internal ProgressControlsForDialogs( VisualElement[] actionControls) { mActionControls = actionControls; InitializeLayoutAndStyles(); BuildComponents(); } internal void EnableActionControls(bool enable) { if (mActionControls != null) foreach (var control in mActionControls) if (control != null) control.SetEnabled(enable); } void IProgressControls.HideProgress() { EnableActionControls(true); mData.IsWaitingAsyncResult = false; mData.ProgressMessage = string.Empty; ForcedUpdateProgress(); } void IProgressControls.ShowProgress(string message) { EnableActionControls(false); CleanStatusMessage(mData); mData.IsWaitingAsyncResult = true; mData.ProgressPercent = -1f; mData.ProgressMessage = message; ForcedUpdateProgress(); } void IProgressControls.ShowError(string message) { mData.StatusMessage = message; mData.StatusType = MessageType.Error; ForcedUpdateProgress(); } void IProgressControls.ShowNotification(string message) { mData.StatusMessage = message; mData.StatusType = MessageType.Info; ForcedUpdateProgress(); } void IProgressControls.ShowSuccess(string message) { mData.StatusMessage = message; mData.StatusType = MessageType.Info; ForcedUpdateProgress(); } void IProgressControls.ShowWarning(string message) { mData.StatusMessage = message; mData.StatusType = MessageType.Warning; ForcedUpdateProgress(); } void BuildComponents() { mUndefinedProgress = this.Q("UndefinedProgress"); mProgressLabel = this.Q