ProjektMWS/Projekt MWS/Library/PackageCache/com.unity.collab-proxy@1.3.9/Editor/Views/MainPageView.cs
2021-06-28 19:31:12 +02:00

203 lines
6.7 KiB
C#

using System;
using JetBrains.Annotations;
using Unity.Cloud.Collaborate.Assets;
using Unity.Cloud.Collaborate.Components;
using Unity.Cloud.Collaborate.Presenters;
using Unity.Cloud.Collaborate.UserInterface;
using UnityEditor;
using UnityEngine;
using UnityEngine.Assertions;
using UnityEngine.UIElements;
namespace Unity.Cloud.Collaborate.Views
{
internal class MainPageView : PageComponent, IMainView
{
IMainPresenter m_Presenter;
public const string UssClassName = "main-page-view";
public const string TopBarUssClassName = UssClassName + "__top-bar";
public const string AlertBoxUssClassName = UssClassName + "__alert-box";
public const string TabViewUssClassName = UssClassName + "__tab-view";
public const string ContainerUssClassName = UssClassName + "__container";
// WARNING - These are hard-coded values. If you do anything to change the order
// these tabs are initialized, you'll need to change these
public const int ChangesTabIndex = 0;
public const int HistoryTabIndex = 1;
static readonly string k_LayoutPath = $"{CollaborateWindow.LayoutPath}/{nameof(MainPageView)}.uxml";
static readonly string k_StylePath = $"{CollaborateWindow.StylePath}/{nameof(MainPageView)}.uss";
readonly AlertBox m_AlertBox;
readonly TabView m_TabView;
readonly HistoryTabPageView m_HistoryView;
readonly ChangesTabPageView m_ChangesView;
readonly VisualElement m_Container;
readonly TopBar m_TopBar;
ProgressView m_ProgressView;
DisplayMode m_DisplayMode;
public MainPageView()
{
AddToClassList(UssClassName);
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(k_LayoutPath).CloneTree(this);
styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>(k_StylePath));
m_TopBar = this.Q<TopBar>(className: TopBarUssClassName);
m_AlertBox = this.Q<AlertBox>(className: AlertBoxUssClassName);
m_TabView = this.Q<TabView>(className: TabViewUssClassName);
m_Container = this.Q<VisualElement>(className: ContainerUssClassName);
m_ChangesView = new ChangesTabPageView();
m_HistoryView = new HistoryTabPageView();
m_TabView.AddTab(StringAssets.changes, m_ChangesView);
m_TabView.AddTab(StringAssets.history, m_HistoryView);
// Set the current display mode.
m_DisplayMode = DisplayMode.TabView;
}
/// <inheritdoc />
public IMainPresenter Presenter
{
set
{
m_Presenter = value;
m_Presenter.AssignHistoryPresenter(m_HistoryView);
m_Presenter.AssignChangesPresenter(m_ChangesView);
m_TabView.TabSwitched += OnTabSwitched;
m_TopBar.BackButtonClicked += OnBackButtonClicked;
// If page active before presenter has been added, call start once we have it.
if (Active)
{
m_Presenter.Start();
}
}
}
/// <inheritdoc />
protected override void SetActive()
{
// Set TabView active if it's currently being displayed.
if (m_DisplayMode == DisplayMode.TabView)
{
m_TabView.SetActive();
}
m_Presenter?.Start();
}
/// <inheritdoc />
protected override void SetInactive()
{
// Set TabView inactive if it's current being displayed.
if (m_DisplayMode == DisplayMode.TabView)
{
m_TabView.SetInactive();
}
m_Presenter?.Stop();
}
/// <inheritdoc />
public void AddAlert(string id, AlertBox.AlertLevel level, string message, (string text, Action action)? button = null)
{
m_AlertBox.QueueAlert(id, level, message, button);
}
/// <inheritdoc />
public void RemoveAlert(string id)
{
m_AlertBox.DequeueAlert(id);
}
/// <inheritdoc />
public void SetTab(int index)
{
m_TabView.SwitchTab(index);
}
/// <inheritdoc />
public void AddOperationProgress()
{
SetDisplay(DisplayMode.ProgressView);
}
/// <inheritdoc />
public void RemoveOperationProgress()
{
SetDisplay(DisplayMode.TabView);
}
/// <inheritdoc />
public void SetOperationProgress(string title, string details, int percentage, int completed, int total, bool isPercentage, bool canCancel)
{
Assert.IsNotNull(m_ProgressView);
if (m_ProgressView == null) return;
var progress = isPercentage ? $"{percentage}%" : $"({completed} of {total})";
m_ProgressView.SetText($"{title}\n\n{details}", progress);
m_ProgressView.SetPercentComplete(percentage);
m_ProgressView.SetCancelButtonActive(canCancel);
}
/// <inheritdoc />
public void ClearBackNavigation()
{
m_TopBar.HideBackNavigation();
}
/// <inheritdoc />
public void DisplayBackNavigation(string text)
{
m_TopBar.DisplayBackNavigation(text);
}
void SetDisplay(DisplayMode mode)
{
Assert.AreNotEqual(m_DisplayMode, mode, "Cannot switch to the current display mode.");
m_DisplayMode = mode;
// Switch into tab or progress view.
if (m_DisplayMode == DisplayMode.TabView)
{
m_ProgressView?.AddToClassList(UiConstants.ussHidden);
m_TabView.RemoveFromClassList(UiConstants.ussHidden);
m_TabView.SetActive();
}
else
{
if (m_ProgressView == null)
{
m_ProgressView = new ProgressView();
m_ProgressView.SetCancelCallback(m_Presenter.RequestCancelJob);
m_Container.Add(m_ProgressView);
}
m_ProgressView.RemoveFromClassList(UiConstants.ussHidden);
m_TabView.AddToClassList(UiConstants.ussHidden);
m_TabView.SetInactive();
}
}
void OnTabSwitched(int index)
{
m_Presenter.UpdateTabIndex(index);
}
void OnBackButtonClicked()
{
m_Presenter.NavigateBack();
}
[UsedImplicitly]
public new class UxmlFactory : UxmlFactory<MainPageView> { }
enum DisplayMode
{
TabView,
ProgressView
}
}
}