DownloadPlasticExeWindow.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using UnityEditor;
  2. using UnityEngine;
  3. using UnityEngine.UIElements;
  4. using Codice.CM.Common;
  5. using PlasticGui;
  6. using Unity.PlasticSCM.Editor.UI.UIElements;
  7. using Unity.PlasticSCM.Editor.Views.Welcome;
  8. using Codice.Client.Common;
  9. using Unity.PlasticSCM.Editor.Tool;
  10. namespace Unity.PlasticSCM.Editor.Views
  11. {
  12. internal class DownloadPlasticExeWindow :
  13. EditorWindow
  14. {
  15. internal static void ShowWindow(bool isGluonMode)
  16. {
  17. sIsGluonMode = isGluonMode;
  18. DownloadPlasticExeWindow window = GetWindow<DownloadPlasticExeWindow>();
  19. window.titleContent = new GUIContent(
  20. PlasticLocalization.GetString(PlasticLocalization.Name.PlasticSCM));
  21. if (EditionToken.IsCloudEdition())
  22. window.minSize = window.maxSize = new Vector2(700, 160);
  23. else
  24. window.minSize = window.maxSize = new Vector2(700, 230);
  25. window.Show();
  26. }
  27. void OnEnable()
  28. {
  29. BuildComponents();
  30. mInstallerFile = GetInstallerTmpFileName.ForPlatform();
  31. }
  32. void OnDestroy()
  33. {
  34. Dispose();
  35. }
  36. void Dispose()
  37. {
  38. mDownloadCloudEditionButton.clicked -= DownloadCloudEditionButton_Clicked;
  39. if (!EditionToken.IsCloudEdition())
  40. mDownloadEnterpriseButton.clicked -= DownloadEnterpriseEditionButton_Clicked;
  41. mCancelButton.clicked -= CancelButton_Clicked;
  42. EditorApplication.update -= CheckForPlasticExe;
  43. }
  44. void DownloadCloudEditionButton_Clicked()
  45. {
  46. DownloadAndInstallOperation.Run(
  47. Edition.Cloud,
  48. mInstallerFile,
  49. mProgressControls);
  50. EditorApplication.update += CheckForPlasticExe;
  51. }
  52. void DownloadEnterpriseEditionButton_Clicked()
  53. {
  54. DownloadAndInstallOperation.Run(
  55. Edition.Enterprise,
  56. mInstallerFile,
  57. mProgressControls);
  58. }
  59. void CancelButton_Clicked()
  60. {
  61. Close();
  62. }
  63. void CheckForPlasticExe()
  64. {
  65. // executable becomes available halfway through the install
  66. // we do not want to say install is done too early
  67. // when progress control finishes, cancel button will be enabled
  68. // then we can check for exe existing
  69. if (mCancelButton.enabledSelf && IsExeAvailable.ForMode(sIsGluonMode))
  70. {
  71. mMessageLabel.text = "Plastic SCM installed. You can now use the feature.";
  72. mCancelButton.text =
  73. PlasticLocalization.GetString(PlasticLocalization.Name.CloseButton);
  74. mRequireMessageLabel.AddToClassList("display-none");
  75. mDownloadCloudEditionButton.AddToClassList("display-none");
  76. mDownloadEnterpriseButton.AddToClassList("display-none");
  77. }
  78. }
  79. void BuildComponents()
  80. {
  81. VisualElement root = rootVisualElement;
  82. root.Clear();
  83. InitializeLayoutAndStyles();
  84. mRequireMessageLabel = root.Q<Label>("requireMessage");
  85. mMessageLabel = root.Q<Label>("message");
  86. mDownloadCloudEditionButton = root.Q<Button>("downloadCloudEdition");
  87. mDownloadEnterpriseButton = root.Q<Button>("downloadEnterpriseEdition");
  88. mCancelButton = root.Q<Button>("cancel");
  89. mProgressControlsContainer = root.Q<VisualElement>("progressControlsContainer");
  90. root.Q<Label>("title").text =
  91. PlasticLocalization.GetString(PlasticLocalization.Name.InstallPlasticSCM);
  92. mDownloadCloudEditionButton.text =
  93. PlasticLocalization.GetString(PlasticLocalization.Name.DownloadCloudEdition);
  94. mDownloadCloudEditionButton.clicked += DownloadCloudEditionButton_Clicked;
  95. if (EditionToken.IsCloudEdition())
  96. {
  97. mDownloadEnterpriseButton.AddToClassList("display-none");
  98. DownloadPlasticExeWindow window = GetWindow<DownloadPlasticExeWindow>();
  99. }
  100. else
  101. {
  102. mMessageLabel.text =
  103. PlasticLocalization.GetString(
  104. PlasticLocalization.Name.WhichVersionInstall);
  105. mDownloadEnterpriseButton.text =
  106. PlasticLocalization.GetString(
  107. PlasticLocalization.Name.DownloadEnterpriseEdition);
  108. mDownloadEnterpriseButton.clicked += DownloadEnterpriseEditionButton_Clicked;
  109. }
  110. mCancelButton.text =
  111. PlasticLocalization.GetString(PlasticLocalization.Name.CancelButton);
  112. mCancelButton.clicked += CancelButton_Clicked;
  113. mProgressControls = new ProgressControlsForDialogs(
  114. new VisualElement[] {
  115. mDownloadCloudEditionButton,
  116. mDownloadEnterpriseButton,
  117. mCancelButton
  118. });
  119. mProgressControlsContainer.Add(mProgressControls);
  120. }
  121. void InitializeLayoutAndStyles()
  122. {
  123. rootVisualElement.LoadLayout(typeof(DownloadPlasticExeWindow).Name);
  124. rootVisualElement.LoadStyle(typeof(DownloadPlasticExeWindow).Name);
  125. }
  126. static bool sIsGluonMode;
  127. string mInstallerFile;
  128. Label mRequireMessageLabel;
  129. Label mMessageLabel;
  130. Button mDownloadCloudEditionButton;
  131. Button mDownloadEnterpriseButton;
  132. Button mCancelButton;
  133. VisualElement mProgressControlsContainer;
  134. ProgressControlsForDialogs mProgressControls;
  135. }
  136. }