| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- 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.RemoveFromClassList("display-none");
- mPercentageLabel.RemoveFromClassList("display-none");
- mLoadingSpinner.Start();
- EditorApplication.update += UpdatePercent;
- }
- else
- {
- mUndefinedProgress.AddToClassList("display-none");
- mPercentageLabel.AddToClassList("display-none");
- 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<VisualElement>("UndefinedProgress");
- mProgressLabel = this.Q<Label>("Progress");
- mStatusLabel = this.Q<Label>("Status");
- mPercentageLabel = this.Q<Label>("Percentage");
- mLoadingSpinner = new LoadingSpinner();
- mUndefinedProgress.Add(mLoadingSpinner);
- }
- void InitializeLayoutAndStyles()
- {
- this.LoadLayout(typeof(ProgressControlsForDialogs).Name);
- this.LoadStyle(typeof(ProgressControlsForDialogs).Name);
- }
- static void CleanStatusMessage(Data data)
- {
- data.StatusMessage = string.Empty;
- data.StatusType = MessageType.None;
- }
- Data mData = new Data();
- VisualElement mUndefinedProgress;
- Label mProgressLabel;
- Label mStatusLabel;
- Label mPercentageLabel;
- VisualElement[] mActionControls;
- LoadingSpinner mLoadingSpinner;
- }
- }
|