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

WelcomeView.cs 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. using UnityEditor;
  2. using UnityEngine;
  3. using Codice.Client.Common;
  4. using PlasticGui;
  5. using PlasticGui.WebApi;
  6. using Unity.PlasticSCM.Editor.AssetUtils;
  7. using Unity.PlasticSCM.Editor.UI;
  8. using Unity.PlasticSCM.Editor.Views.CreateWorkspace;
  9. using Unity.PlasticSCM.Editor.UI.Progress;
  10. using Unity.PlasticSCM.Editor.Configuration.CloudEdition.Welcome;
  11. using Codice.Client.BaseCommands;
  12. using Unity.PlasticSCM.Editor.Configuration.TeamEdition;
  13. using Codice.CM.Common;
  14. namespace Unity.PlasticSCM.Editor.Views.Welcome
  15. {
  16. internal class WelcomeView
  17. {
  18. internal WelcomeView(
  19. PlasticWindow parentWindow,
  20. CreateWorkspaceView.ICreateWorkspaceListener createWorkspaceListener,
  21. IPlasticAPI plasticApi,
  22. IPlasticWebRestApi plasticWebRestApi,
  23. CmConnection cmConnection)
  24. {
  25. mParentWindow = parentWindow;
  26. mCreateWorkspaceListener = createWorkspaceListener;
  27. mPlasticApi = plasticApi;
  28. mPlasticWebRestApi = plasticWebRestApi;
  29. mCmConnection = cmConnection;
  30. mGuiMessage = new UnityPlasticGuiMessage();
  31. mConfigureProgress = new ProgressControlsForViews();
  32. mInstallerFile = GetInstallerTmpFileName.ForPlatform();
  33. autoLoginState = AutoLogin.State.Off;
  34. }
  35. internal void Update()
  36. {
  37. if (mCreateWorkspaceView != null)
  38. mCreateWorkspaceView.Update();
  39. mConfigureProgress.UpdateDeterminateProgress(mParentWindow);
  40. }
  41. internal void OnGUI(bool clientNeedsConfiguration)
  42. {
  43. GUILayout.BeginHorizontal();
  44. GUILayout.Space(LEFT_MARGIN);
  45. DoContentViewArea(
  46. clientNeedsConfiguration,
  47. mIsCreateWorkspaceButtonClicked,
  48. mInstallerFile,
  49. mGuiMessage,
  50. mConfigureProgress);
  51. GUILayout.EndHorizontal();
  52. }
  53. internal void OnUserClosedConfigurationWindow()
  54. {
  55. ((IProgressControls)mConfigureProgress).HideProgress();
  56. ClientConfig.Reset();
  57. CmConnection.Reset();
  58. ClientHandlers.Register();
  59. }
  60. void DoContentViewArea(
  61. bool clientNeedsConfiguration,
  62. bool isCreateWorkspaceButtonClicked,
  63. string installerFile,
  64. GuiMessage.IGuiMessage guiMessage,
  65. ProgressControlsForViews configureProgress)
  66. {
  67. GUILayout.BeginVertical();
  68. GUILayout.Space(TOP_MARGIN);
  69. if (isCreateWorkspaceButtonClicked)
  70. GetCreateWorkspaceView().OnGUI();
  71. else
  72. DoSetupViewArea(
  73. clientNeedsConfiguration,
  74. mInstallerFile,
  75. mGuiMessage,
  76. mConfigureProgress);
  77. GUILayout.EndVertical();
  78. }
  79. void DoSetupViewArea(
  80. bool clientNeedsConfiguration,
  81. string installerFile,
  82. GuiMessage.IGuiMessage guiMessage,
  83. ProgressControlsForViews configureProgress)
  84. {
  85. DoTitleLabel();
  86. GUILayout.Space(STEPS_TOP_MARGIN);
  87. bool isStep1Completed =
  88. !clientNeedsConfiguration &&
  89. !configureProgress.ProgressData.IsOperationRunning;
  90. DoStepsArea(isStep1Completed, configureProgress.ProgressData);
  91. GUILayout.Space(BUTTON_MARGIN);
  92. DoActionButtonsArea(
  93. isStep1Completed,
  94. installerFile,
  95. guiMessage,
  96. configureProgress);
  97. DoNotificationArea(configureProgress.ProgressData);
  98. }
  99. void DoActionButtonsArea(
  100. bool isStep1Completed,
  101. string installerFile,
  102. GuiMessage.IGuiMessage guiMessage,
  103. ProgressControlsForViews configureProgress)
  104. {
  105. DoActionButton(
  106. isStep1Completed,
  107. installerFile,
  108. guiMessage,
  109. configureProgress);
  110. }
  111. void DoActionButton(
  112. bool isStep1Completed,
  113. string installerFile,
  114. GuiMessage.IGuiMessage guiMessage,
  115. ProgressControlsForViews configureProgress)
  116. {
  117. if (!isStep1Completed)
  118. {
  119. DoConfigureButton(configureProgress);
  120. return;
  121. }
  122. if (GUILayout.Button(
  123. PlasticLocalization.GetString(PlasticLocalization.Name.CreateWorkspace),
  124. GUILayout.Width(BUTTON_WIDTH)))
  125. mIsCreateWorkspaceButtonClicked = true;
  126. }
  127. void DoConfigureButton(ProgressControlsForViews configureProgress)
  128. {
  129. bool isAutoLoginRunning = autoLoginState > AutoLogin.State.Running && autoLoginState <= AutoLogin.State.InitializingPlastic;
  130. GUI.enabled = !(configureProgress.ProgressData.IsOperationRunning || isAutoLoginRunning);
  131. if (GUILayout.Button(PlasticLocalization.GetString(
  132. PlasticLocalization.Name.LoginOrSignUp),
  133. GUILayout.Width(BUTTON_WIDTH)))
  134. {
  135. if (autoLoginState > AutoLogin.State.Off && autoLoginState <= AutoLogin.State.InitializingPlastic)
  136. {
  137. autoLoginState = AutoLogin.State.Running;
  138. AutoLogin autoLogin = new AutoLogin();
  139. autoLogin.Run();
  140. return;
  141. }
  142. ((IProgressControls)configureProgress).ShowProgress(string.Empty);
  143. // Login button defaults to Cloud sign up
  144. CloudEditionWelcomeWindow.ShowWindow(
  145. mPlasticWebRestApi,
  146. mCmConnection,
  147. this);
  148. GUIUtility.ExitGUI();
  149. }
  150. // If client configuration cannot be determined, keep login button default as Cloud
  151. // sign in window, but show Enterprise option as well
  152. GUILayout.FlexibleSpace();
  153. var anchorStyle = new GUIStyle(GUI.skin.label);
  154. anchorStyle.normal.textColor = new Color(0.129f, 0.588f, 0.953f);
  155. anchorStyle.hover.textColor = new Color(0.239f, 0.627f, 0.949f);
  156. anchorStyle.active.textColor = new Color(0.239f, 0.627f, 0.949f);
  157. if (GUILayout.Button(
  158. PlasticLocalization.GetString(
  159. PlasticLocalization.Name.NeedEnterprise),
  160. anchorStyle,
  161. GUILayout.Width(BUTTON_WIDTH),
  162. GUILayout.Height(20)))
  163. TeamEditionConfigurationWindow.ShowWindow(mPlasticWebRestApi, this);
  164. GUILayout.Space(BUTTON_MARGIN);
  165. GUI.enabled = true;
  166. }
  167. static void DoStepsArea(
  168. bool isStep1Completed,
  169. ProgressControlsForViews.Data configureProgressData)
  170. {
  171. DoLoginOrSignUpStep(isStep1Completed, configureProgressData);
  172. DoCreatePlasticWorkspaceStep();
  173. }
  174. static void DoLoginOrSignUpStep(
  175. bool isStep1Completed,
  176. ProgressControlsForViews.Data progressData)
  177. {
  178. Texture2D stepImage = (isStep1Completed) ? Images.GetStepOkIcon() : Images.GetStep1Icon();
  179. string stepText = GetConfigurationStepText(progressData, isStep1Completed);
  180. GUIStyle style = new GUIStyle(EditorStyles.label);
  181. style.richText = true;
  182. GUILayout.BeginHorizontal();
  183. DoStepLabel(stepText, stepImage, style);
  184. GUILayout.EndHorizontal();
  185. }
  186. static void DoCreatePlasticWorkspaceStep()
  187. {
  188. GUILayout.BeginHorizontal();
  189. DoStepLabel(
  190. PlasticLocalization.GetString(PlasticLocalization.Name.CreateAPlasticWorkspace),
  191. Images.GetStep2Icon(),
  192. EditorStyles.label);
  193. GUILayout.EndHorizontal();
  194. }
  195. static void DoStepLabel(
  196. string text,
  197. Texture2D image,
  198. GUIStyle style)
  199. {
  200. GUILayout.Space(STEPS_LEFT_MARGIN);
  201. GUIContent stepLabelContent = new GUIContent(
  202. string.Format(" {0}", text),
  203. image);
  204. GUILayout.Label(
  205. stepLabelContent,
  206. style,
  207. GUILayout.Height(STEP_LABEL_HEIGHT));
  208. }
  209. static void DoTitleLabel()
  210. {
  211. GUIContent labelContent = new GUIContent(
  212. PlasticLocalization.GetString(PlasticLocalization.Name.NextStepsToSetup),
  213. Images.GetInfoIcon());
  214. GUILayout.Label(labelContent, EditorStyles.boldLabel);
  215. }
  216. static void DoNotificationArea(ProgressControlsForViews.Data configureProgressData)
  217. {
  218. if (!string.IsNullOrEmpty(configureProgressData.NotificationMessage))
  219. DrawProgressForViews.ForNotificationArea(configureProgressData);
  220. }
  221. static string GetConfigurationStepText(
  222. ProgressControlsForViews.Data progressData,
  223. bool isStep1Completed)
  224. {
  225. string result = PlasticLocalization.GetString(
  226. PlasticLocalization.Name.LoginOrSignUpPlastic);
  227. if (isStep1Completed)
  228. return result;
  229. if (!progressData.IsOperationRunning)
  230. return result;
  231. return string.Format("<b>{0}</b>", result);
  232. }
  233. CreateWorkspaceView GetCreateWorkspaceView()
  234. {
  235. if (mCreateWorkspaceView != null)
  236. return mCreateWorkspaceView;
  237. string workspacePath = ProjectPath.FromApplicationDataPath(
  238. ApplicationDataPath.Get());
  239. mCreateWorkspaceView = new CreateWorkspaceView(
  240. mParentWindow,
  241. mCreateWorkspaceListener,
  242. mPlasticApi,
  243. mPlasticWebRestApi,
  244. workspacePath);
  245. return mCreateWorkspaceView;
  246. }
  247. internal AutoLogin.State autoLoginState = AutoLogin.State.Off;
  248. string mInstallerFile;
  249. bool mIsCreateWorkspaceButtonClicked = false;
  250. CreateWorkspaceView mCreateWorkspaceView;
  251. readonly ProgressControlsForViews mConfigureProgress;
  252. readonly GuiMessage.IGuiMessage mGuiMessage;
  253. readonly CmConnection mCmConnection;
  254. readonly IPlasticAPI mPlasticApi;
  255. readonly IPlasticWebRestApi mPlasticWebRestApi;
  256. readonly CreateWorkspaceView.ICreateWorkspaceListener mCreateWorkspaceListener;
  257. readonly PlasticWindow mParentWindow;
  258. const int LEFT_MARGIN = 30;
  259. const int TOP_MARGIN = 20;
  260. const int STEPS_TOP_MARGIN = 5;
  261. const int STEPS_LEFT_MARGIN = 12;
  262. const int BUTTON_MARGIN = 10;
  263. const int STEP_LABEL_HEIGHT = 20;
  264. const int BUTTON_WIDTH = 170;
  265. const string DOWNLOAD_URL = @"https://www.plasticscm.com/download";
  266. }
  267. }