333 lines
11 KiB
C#
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";
|
|||
|
}
|
|||
|
}
|