Editor/Window/Components/VerticalProgressBar.cs (79 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace AmazonGameLift.Editor
{
public class VerticalProgressBar : VisualElement
{
public new class UxmlFactory : UxmlFactory<VerticalProgressBar> { }
private static readonly Dictionary<VerticalProgressState, string> StateToIndicatorClassName = new()
{
{ VerticalProgressState.NotStarted, "progress-indicator--not-started" },
{ VerticalProgressState.InProgress, "progress-indicator--in-progress" },
{ VerticalProgressState.InProgressWarning, "progress-indicator--warning" },
{ VerticalProgressState.InProgressError, "progress-indicator--failure" },
{ VerticalProgressState.Completed, "progress-indicator--successful" },
{ VerticalProgressState.CompletedWarning, "progress-indicator--warning" },
};
private static readonly Dictionary<VerticalProgressState, string> StateToBarClassName = new()
{
{ VerticalProgressState.NotStarted, "progress-bar--empty" },
{ VerticalProgressState.InProgress, "progress-bar--empty" },
{ VerticalProgressState.InProgressWarning, "progress-bar--empty" },
{ VerticalProgressState.InProgressError, "progress-bar--empty" },
{ VerticalProgressState.Completed, "progress-bar--full" },
{ VerticalProgressState.CompletedWarning, "progress-bar--full" },
};
private static readonly string HiddenClassName = "hidden";
private VisualElement _indicator;
private VisualElement _progressbar;
private bool _hasNextStep;
public VerticalProgressState State { get; private set; }
public VerticalProgressBar()
{
var uxml = Resources.Load<VisualTreeAsset>("EditorWindow/Components/VerticalProgressBar");
uxml.CloneTree(this);
_indicator = this.Q<VisualElement>("Indicator");
_progressbar = this.Q<VisualElement>("ProgressBar");
}
public void Set(VerticalProgressState state, bool? hasNextStep = null)
{
Reset();
State = state;
if (hasNextStep.HasValue)
{
_hasNextStep = hasNextStep.Value;
}
_indicator.AddToClassList(StateToIndicatorClassName[state]);
if (_hasNextStep)
{
_progressbar.AddToClassList(StateToBarClassName[state]);
}
else
{
_progressbar.AddToClassList(HiddenClassName);
}
}
private void Reset()
{
foreach (var className in StateToIndicatorClassName.Values)
{
_indicator.RemoveFromClassList(className);
}
foreach (var className in StateToBarClassName.Values)
{
_progressbar.RemoveFromClassList(className);
}
_progressbar.RemoveFromClassList(HiddenClassName);
}
}
public enum VerticalProgressState
{
NotStarted,
InProgress,
InProgressWarning,
InProgressError,
Completed,
CompletedWarning,
}
}