Singularity/Library/PackageCache/com.unity.collab-proxy@2.0.3/Editor/PlasticSCM/Views/Welcome/WelcomeView.cs
2024-05-06 11:45:45 -07:00

333 lines
11 KiB
C#

using UnityEditor;
using UnityEngine;
using Codice.Client.Common;
using PlasticGui;
using PlasticGui.WebApi;
using Unity.PlasticSCM.Editor.AssetUtils;
using Unity.PlasticSCM.Editor.UI;
using Unity.PlasticSCM.Editor.Views.CreateWorkspace;
using Unity.PlasticSCM.Editor.UI.Progress;
using Unity.PlasticSCM.Editor.Configuration.CloudEdition.Welcome;
using Codice.Client.BaseCommands;
using Unity.PlasticSCM.Editor.Configuration.TeamEdition;
using Codice.CM.Common;
namespace Unity.PlasticSCM.Editor.Views.Welcome
{
internal class WelcomeView
{
internal WelcomeView(
PlasticWindow parentWindow,
CreateWorkspaceView.ICreateWorkspaceListener createWorkspaceListener,
IPlasticAPI plasticApi,
IPlasticWebRestApi plasticWebRestApi,
CmConnection cmConnection)
{
mParentWindow = parentWindow;
mCreateWorkspaceListener = createWorkspaceListener;
mPlasticApi = plasticApi;
mPlasticWebRestApi = plasticWebRestApi;
mCmConnection = cmConnection;
mGuiMessage = new UnityPlasticGuiMessage();
mConfigureProgress = new ProgressControlsForViews();
mInstallerFile = GetInstallerTmpFileName.ForPlatform();
autoLoginState = AutoLogin.State.Off;
}
internal void Update()
{
if (mCreateWorkspaceView != null)
mCreateWorkspaceView.Update();
mConfigureProgress.UpdateDeterminateProgress(mParentWindow);
}
internal void OnGUI(bool clientNeedsConfiguration)
{
GUILayout.BeginHorizontal();
GUILayout.Space(LEFT_MARGIN);
DoContentViewArea(
clientNeedsConfiguration,
mIsCreateWorkspaceButtonClicked,
mInstallerFile,
mGuiMessage,
mConfigureProgress);
GUILayout.EndHorizontal();
}
internal void OnUserClosedConfigurationWindow()
{
((IProgressControls)mConfigureProgress).HideProgress();
ClientConfig.Reset();
CmConnection.Reset();
ClientHandlers.Register();
}
void DoContentViewArea(
bool clientNeedsConfiguration,
bool isCreateWorkspaceButtonClicked,
string installerFile,
GuiMessage.IGuiMessage guiMessage,
ProgressControlsForViews configureProgress)
{
GUILayout.BeginVertical();
GUILayout.Space(TOP_MARGIN);
if (isCreateWorkspaceButtonClicked)
GetCreateWorkspaceView().OnGUI();
else
DoSetupViewArea(
clientNeedsConfiguration,
mInstallerFile,
mGuiMessage,
mConfigureProgress);
GUILayout.EndVertical();
}
void DoSetupViewArea(
bool clientNeedsConfiguration,
string installerFile,
GuiMessage.IGuiMessage guiMessage,
ProgressControlsForViews configureProgress)
{
DoTitleLabel();
GUILayout.Space(STEPS_TOP_MARGIN);
bool isStep1Completed =
!clientNeedsConfiguration &&
!configureProgress.ProgressData.IsOperationRunning;
DoStepsArea(isStep1Completed, configureProgress.ProgressData);
GUILayout.Space(BUTTON_MARGIN);
DoActionButtonsArea(
isStep1Completed,
installerFile,
guiMessage,
configureProgress);
DoNotificationArea(configureProgress.ProgressData);
}
void DoActionButtonsArea(
bool isStep1Completed,
string installerFile,
GuiMessage.IGuiMessage guiMessage,
ProgressControlsForViews configureProgress)
{
DoActionButton(
isStep1Completed,
installerFile,
guiMessage,
configureProgress);
}
void DoActionButton(
bool isStep1Completed,
string installerFile,
GuiMessage.IGuiMessage guiMessage,
ProgressControlsForViews configureProgress)
{
if (!isStep1Completed)
{
DoConfigureButton(configureProgress);
return;
}
if (GUILayout.Button(
PlasticLocalization.GetString(PlasticLocalization.Name.CreateWorkspace),
GUILayout.Width(BUTTON_WIDTH)))
mIsCreateWorkspaceButtonClicked = true;
}
void DoConfigureButton(ProgressControlsForViews configureProgress)
{
bool isAutoLoginRunning = autoLoginState > AutoLogin.State.Running && autoLoginState <= AutoLogin.State.InitializingPlastic;
GUI.enabled = !(configureProgress.ProgressData.IsOperationRunning || isAutoLoginRunning);
if (GUILayout.Button(PlasticLocalization.GetString(
PlasticLocalization.Name.LoginOrSignUp),
GUILayout.Width(BUTTON_WIDTH)))
{
if (autoLoginState > AutoLogin.State.Off && autoLoginState <= AutoLogin.State.InitializingPlastic)
{
autoLoginState = AutoLogin.State.Running;
AutoLogin autoLogin = new AutoLogin();
autoLogin.Run();
return;
}
((IProgressControls)configureProgress).ShowProgress(string.Empty);
// Login button defaults to Cloud sign up
CloudEditionWelcomeWindow.ShowWindow(
mPlasticWebRestApi,
mCmConnection,
this);
GUIUtility.ExitGUI();
}
// If client configuration cannot be determined, keep login button default as Cloud
// sign in window, but show Enterprise option as well
GUILayout.FlexibleSpace();
var anchorStyle = new GUIStyle(GUI.skin.label);
anchorStyle.normal.textColor = new Color(0.129f, 0.588f, 0.953f);
anchorStyle.hover.textColor = new Color(0.239f, 0.627f, 0.949f);
anchorStyle.active.textColor = new Color(0.239f, 0.627f, 0.949f);
if (GUILayout.Button(
PlasticLocalization.GetString(
PlasticLocalization.Name.NeedEnterprise),
anchorStyle,
GUILayout.Width(BUTTON_WIDTH),
GUILayout.Height(20)))
TeamEditionConfigurationWindow.ShowWindow(mPlasticWebRestApi, this);
GUILayout.Space(BUTTON_MARGIN);
GUI.enabled = true;
}
static void DoStepsArea(
bool isStep1Completed,
ProgressControlsForViews.Data configureProgressData)
{
DoLoginOrSignUpStep(isStep1Completed, configureProgressData);
DoCreatePlasticWorkspaceStep();
}
static void DoLoginOrSignUpStep(
bool isStep1Completed,
ProgressControlsForViews.Data progressData)
{
Texture2D stepImage = (isStep1Completed) ? Images.GetStepOkIcon() : Images.GetStep1Icon();
string stepText = GetConfigurationStepText(progressData, isStep1Completed);
GUIStyle style = new GUIStyle(EditorStyles.label);
style.richText = true;
GUILayout.BeginHorizontal();
DoStepLabel(stepText, stepImage, style);
GUILayout.EndHorizontal();
}
static void DoCreatePlasticWorkspaceStep()
{
GUILayout.BeginHorizontal();
DoStepLabel(
PlasticLocalization.GetString(PlasticLocalization.Name.CreateAUnityVersionControlWorkspace),
Images.GetStep2Icon(),
EditorStyles.label);
GUILayout.EndHorizontal();
}
static void DoStepLabel(
string text,
Texture2D image,
GUIStyle style)
{
GUILayout.Space(STEPS_LEFT_MARGIN);
GUIContent stepLabelContent = new GUIContent(
string.Format(" {0}", text),
image);
GUILayout.Label(
stepLabelContent,
style,
GUILayout.Height(STEP_LABEL_HEIGHT));
}
static void DoTitleLabel()
{
GUIContent labelContent = new GUIContent(
PlasticLocalization.GetString(PlasticLocalization.Name.NextStepsToSetup),
Images.GetInfoIcon());
GUILayout.Label(labelContent, EditorStyles.boldLabel);
}
static void DoNotificationArea(ProgressControlsForViews.Data configureProgressData)
{
if (!string.IsNullOrEmpty(configureProgressData.NotificationMessage))
DrawProgressForViews.ForNotificationArea(configureProgressData);
}
static string GetConfigurationStepText(
ProgressControlsForViews.Data progressData,
bool isStep1Completed)
{
string result = PlasticLocalization.GetString(
PlasticLocalization.Name.LoginOrSignUpUnityVersionControl);
if (isStep1Completed)
return result;
if (!progressData.IsOperationRunning)
return result;
return string.Format("<b>{0}</b>", result);
}
CreateWorkspaceView GetCreateWorkspaceView()
{
if (mCreateWorkspaceView != null)
return mCreateWorkspaceView;
string workspacePath = ProjectPath.FromApplicationDataPath(
ApplicationDataPath.Get());
mCreateWorkspaceView = new CreateWorkspaceView(
mParentWindow,
mCreateWorkspaceListener,
mPlasticApi,
mPlasticWebRestApi,
workspacePath);
return mCreateWorkspaceView;
}
internal AutoLogin.State autoLoginState = AutoLogin.State.Off;
string mInstallerFile;
bool mIsCreateWorkspaceButtonClicked = false;
CreateWorkspaceView mCreateWorkspaceView;
readonly ProgressControlsForViews mConfigureProgress;
readonly GuiMessage.IGuiMessage mGuiMessage;
readonly CmConnection mCmConnection;
readonly IPlasticAPI mPlasticApi;
readonly IPlasticWebRestApi mPlasticWebRestApi;
readonly CreateWorkspaceView.ICreateWorkspaceListener mCreateWorkspaceListener;
readonly PlasticWindow mParentWindow;
const int LEFT_MARGIN = 30;
const int TOP_MARGIN = 20;
const int STEPS_TOP_MARGIN = 5;
const int STEPS_LEFT_MARGIN = 12;
const int BUTTON_MARGIN = 10;
const int STEP_LABEL_HEIGHT = 20;
const int BUTTON_WIDTH = 170;
const string DOWNLOAD_URL = @"https://www.plasticscm.com/download";
}
}