You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

198 lines
6.9 KiB
C#

using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
using Codice.Client.BaseCommands.EventTracking;
using Codice.Client.Common;
using Codice.CM.Common;
using PlasticGui;
using Unity.PlasticSCM.Editor.UI.UIElements;
using Unity.PlasticSCM.Editor.Views.Welcome;
using Unity.PlasticSCM.Editor.Tool;
namespace Unity.PlasticSCM.Editor.Views
{
internal class DownloadPlasticExeWindow :
EditorWindow,
DownloadAndInstallOperation.INotify
{
internal bool IsPlasticInstalling { get { return mIsPlasticInstalling; } }
internal static void ShowWindow(
RepositorySpec repSpec,
bool isGluonMode,
string installCloudFrom,
string installEnterpriseFrom,
string cancelInstallFrom)
{
DownloadPlasticExeWindow window = GetWindow<DownloadPlasticExeWindow>();
window.mRepSpec = repSpec;
window.mIsGluonMode = isGluonMode;
window.mInstallCloudFrom = installCloudFrom;
window.mInstallEnterpriseFrom = installEnterpriseFrom;
window.mCancelInstallFrom = cancelInstallFrom;
window.titleContent = new GUIContent(
PlasticLocalization.GetString(PlasticLocalization.Name.UnityVersionControl));
if (EditionToken.IsCloudEdition())
window.minSize = window.maxSize = new Vector2(700, 160);
else
window.minSize = window.maxSize = new Vector2(700, 230);
window.Show();
}
void DownloadAndInstallOperation.INotify.InstallationStarted()
{
mIsPlasticInstalling = true;
}
void DownloadAndInstallOperation.INotify.InstallationFinished()
{
mIsPlasticInstalling = false;
}
void OnEnable()
{
BuildComponents();
mInstallerFile = GetInstallerTmpFileName.ForPlatform();
}
void OnDestroy()
{
Dispose();
}
void Dispose()
{
mDownloadCloudEditionButton.clicked -= DownloadCloudEditionButton_Clicked;
if (!EditionToken.IsCloudEdition())
mDownloadEnterpriseButton.clicked -= DownloadEnterpriseEditionButton_Clicked;
mCancelButton.clicked -= CancelButton_Clicked;
EditorApplication.update -= CheckForPlasticExe;
}
void DownloadCloudEditionButton_Clicked()
{
TrackFeatureUseEvent.For(mRepSpec, mInstallCloudFrom);
DownloadAndInstallOperation.Run(
Edition.Cloud,
mInstallerFile,
mProgressControls,
this);
EditorApplication.update += CheckForPlasticExe;
}
void DownloadEnterpriseEditionButton_Clicked()
{
TrackFeatureUseEvent.For(mRepSpec, mInstallEnterpriseFrom);
DownloadAndInstallOperation.Run(
Edition.Enterprise,
mInstallerFile,
mProgressControls,
this);
}
void CancelButton_Clicked()
{
if (!IsExeAvailable.ForMode(mIsGluonMode))
TrackFeatureUseEvent.For(mRepSpec, mCancelInstallFrom);
Close();
}
void CheckForPlasticExe()
{
// executable becomes available halfway through the install
// we do not want to say install is done too early
// when progress control finishes, cancel button will be enabled
// then we can check for exe existing
if (mCancelButton.enabledSelf && IsExeAvailable.ForMode(mIsGluonMode))
{
mMessageLabel.text = "Unity Version Control installed. You can now use the feature.";
mCancelButton.text =
PlasticLocalization.GetString(PlasticLocalization.Name.CloseButton);
mRequireMessageLabel.Collapse();
mDownloadCloudEditionButton.Collapse();
mDownloadEnterpriseButton.Collapse();
}
}
void BuildComponents()
{
VisualElement root = rootVisualElement;
root.Clear();
InitializeLayoutAndStyles();
mRequireMessageLabel = root.Q<Label>("requireMessage");
mMessageLabel = root.Q<Label>("message");
mDownloadCloudEditionButton = root.Q<Button>("downloadCloudEdition");
mDownloadEnterpriseButton = root.Q<Button>("downloadEnterpriseEdition");
mCancelButton = root.Q<Button>("cancel");
mProgressControlsContainer = root.Q<VisualElement>("progressControlsContainer");
root.Q<Label>("title").text =
PlasticLocalization.GetString(PlasticLocalization.Name.InstallUnityVersionControl);
mDownloadCloudEditionButton.text =
PlasticLocalization.GetString(PlasticLocalization.Name.DownloadCloudEdition);
mDownloadCloudEditionButton.clicked += DownloadCloudEditionButton_Clicked;
if (EditionToken.IsCloudEdition())
{
mDownloadEnterpriseButton.Collapse();
DownloadPlasticExeWindow window = GetWindow<DownloadPlasticExeWindow>();
}
else
{
mMessageLabel.text =
PlasticLocalization.GetString(
PlasticLocalization.Name.WhichVersionInstall);
mDownloadEnterpriseButton.text =
PlasticLocalization.GetString(
PlasticLocalization.Name.DownloadEnterpriseEdition);
mDownloadEnterpriseButton.clicked += DownloadEnterpriseEditionButton_Clicked;
}
mCancelButton.text =
PlasticLocalization.GetString(PlasticLocalization.Name.CancelButton);
mCancelButton.clicked += CancelButton_Clicked;
mProgressControls = new ProgressControlsForDialogs(
new VisualElement[] {
mDownloadCloudEditionButton,
mDownloadEnterpriseButton,
mCancelButton
});
mProgressControlsContainer.Add(mProgressControls);
}
void InitializeLayoutAndStyles()
{
rootVisualElement.LoadLayout(typeof(DownloadPlasticExeWindow).Name);
rootVisualElement.LoadStyle(typeof(DownloadPlasticExeWindow).Name);
}
bool mIsGluonMode;
string mInstallCloudFrom;
string mInstallEnterpriseFrom;
string mCancelInstallFrom;
RepositorySpec mRepSpec;
string mInstallerFile;
bool mIsPlasticInstalling = false;
Label mRequireMessageLabel;
Label mMessageLabel;
Button mDownloadCloudEditionButton;
Button mDownloadEnterpriseButton;
Button mCancelButton;
VisualElement mProgressControlsContainer;
ProgressControlsForDialogs mProgressControls;
}
}