TeamEditionConfigurationWindow.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. using System;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using UnityEngine.UIElements;
  5. using PlasticGui;
  6. using Codice.CM.Common;
  7. using Codice.Client.Common;
  8. using Unity.PlasticSCM.Editor.UI.UIElements;
  9. using PlasticGui.Configuration.TeamEdition;
  10. using PlasticGui.Configuration;
  11. using PlasticGui.WebApi;
  12. using Unity.PlasticSCM.Editor.Views.Welcome;
  13. namespace Unity.PlasticSCM.Editor.Configuration.TeamEdition
  14. {
  15. internal class TeamEditionConfigurationWindow : EditorWindow
  16. {
  17. internal static void ShowWindow(IPlasticWebRestApi restApi, WelcomeView welcomeView)
  18. {
  19. TeamEditionConfigurationWindow window = GetWindow<TeamEditionConfigurationWindow>();
  20. window.mRestApi = restApi;
  21. window.mWelcomeView = welcomeView;
  22. window.titleContent = new GUIContent(
  23. PlasticLocalization.GetString(PlasticLocalization.Name.WelcomeToPlasticSCM));
  24. window.minSize = window.maxSize = new Vector2(650, 300);
  25. window.Show();
  26. }
  27. void OnEnable()
  28. {
  29. InitializeLayoutAndStyles();
  30. BuildComponents();
  31. }
  32. void Dispose()
  33. {
  34. mConnectButton.clicked -= ConnectButton_Clicked;
  35. mCheckConnectionButton.clicked -= CheckConnectionButton_Clicked;
  36. mOkButton.clicked -= OkButton_Clicked;
  37. mCancelButton.clicked -= CancelButton_Clicked;
  38. mServerTextField.UnregisterValueChangedCallback(OnServerTextFieldChanged);
  39. mUseSslToggle.UnregisterValueChangedCallback(OnUseSslToggleChanged);
  40. mLoadingSpinner.Dispose();
  41. }
  42. void ConnectButton_Clicked()
  43. {
  44. ConfigurationConnectServerButtonClickEvent.Click(
  45. server: mUserAssistant.GetProposedServer(),
  46. HideValidation: HideValidation,
  47. ShowError: ShowServerValidationError,
  48. ShowProgress: ShowProgress,
  49. HideProgress: HideProgress,
  50. ShowNotification: ShowServerNotificationMessage,
  51. DisableButtons: () => { mConnectButton.SetEnabled(false); },
  52. EnableButtons: () => { mConnectButton.SetEnabled(true); },
  53. UpdatePasswordEntries: (bIsPasswordRequired, seidWorkingMode) =>
  54. {
  55. UpdatePasswordEntries(bIsPasswordRequired);
  56. },
  57. NotifyWorkingMode: (mode) => { mSEIDWorkingMode = mode; },
  58. NotifyConnectedStatus: (b) => { });
  59. mUserTextField.SetEnabled(true);
  60. }
  61. void OnDestroy()
  62. {
  63. Dispose();
  64. if (mWelcomeView != null)
  65. mWelcomeView.OnUserClosedConfigurationWindow();
  66. }
  67. void CheckConnectionButton_Clicked()
  68. {
  69. ConfigurationCheckCredentialsButtonClickEvent.Click(
  70. mSEIDWorkingMode,
  71. mUserTextField.value,
  72. mPasswordTextField.value,
  73. Edition.Team,
  74. mUserAssistant,
  75. HideCredentialsValidationError,
  76. ShowCheckCredentialsError,
  77. ShowProgress,
  78. HideProgress,
  79. ShowNotification: ShowCredentialsNotificationMessage,
  80. DisableButtons: () => { mCheckConnectionButton.SetEnabled(false); mConnectButton.SetEnabled(false); },
  81. EnableButtons: () => { mCheckConnectionButton.SetEnabled(true); mConnectButton.SetEnabled(true); },
  82. NotifyWorkingMode: (mode) => { mSEIDWorkingMode = mode; },
  83. NotifyConnectedStatus: (status) => { },
  84. restApi: mRestApi,
  85. cmConnection: CmConnection.Get());
  86. }
  87. void CancelButton_Clicked()
  88. {
  89. Close();
  90. }
  91. void OkButton_Clicked()
  92. {
  93. if (!ValidateServerAndCreds.IsValidInput(
  94. mUserAssistant.GetProposedServer(),
  95. mUserTextField.value,
  96. mSEIDWorkingMode,
  97. mPasswordTextField.value,
  98. ShowCheckCredentialsError))
  99. {
  100. return;
  101. }
  102. ConfigurationActions.SaveClientConfig(
  103. mServerTextField.value,
  104. mSEIDWorkingMode,
  105. mUserTextField.value,
  106. mPasswordTextField.value);
  107. Close();
  108. }
  109. void HideCredentialsValidationError()
  110. {
  111. mCredentialsLabel.RemoveFromClassList("error");
  112. mCredentialsLabel.AddToClassList("visibility-hidden");
  113. }
  114. void BuildComponents()
  115. {
  116. VisualElement root = rootVisualElement;
  117. root.Query<Label>("plasticConfigurationTitle").First().text =
  118. PlasticLocalization.GetString(PlasticLocalization.Name.PlasticConfigurationTitle);
  119. root.SetControlText<Label>(
  120. "plasticConfigurationExplanation",
  121. PlasticLocalization.Name.PlasticConfigurationExplanation);
  122. root.SetControlText<Label>("configurationServerInfo",
  123. PlasticLocalization.Name.PlasticSCMServerLabel);
  124. root.SetControlText<Button>(
  125. "connect",
  126. PlasticLocalization.Name.Connect);
  127. root.SetControlText<Label>("useSsl",
  128. PlasticLocalization.Name.UseSsl);
  129. root.SetControlText<Label>("configurationUserNameInfo",
  130. PlasticLocalization.Name.ConfigurationUserNameInfo);
  131. root.SetControlText<Label>("configurationCredentialsInfo",
  132. PlasticLocalization.Name.ConfigurationCredentialsInfo);
  133. root.SetControlText<Button>("check",
  134. PlasticLocalization.Name.Check);
  135. root.SetControlText<Label>("credentialsOk",
  136. PlasticLocalization.Name.CredentialsOK);
  137. root.SetControlText<Button>("okButton",
  138. PlasticLocalization.Name.OkButton);
  139. root.SetControlText<Button>("cancelButton",
  140. PlasticLocalization.Name.CancelButton);
  141. mSpinnerContainer = root.Query<VisualElement>("spinnerContainer").First();
  142. mSpinnerLabel = root.Query<Label>("spinnerLabel").First();
  143. mLoadingSpinner = new LoadingSpinner();
  144. mSpinnerContainer.Add(mLoadingSpinner);
  145. mSpinnerContainer.AddToClassList("visibility-hidden");
  146. mCheckConnectionButton = root.Query<Button>("check").First();
  147. mCheckConnectionButton.clicked += CheckConnectionButton_Clicked;
  148. mConnectButton = root.Query<Button>("connect").First();
  149. mConnectButton.clicked += ConnectButton_Clicked;
  150. mServerTextField = root.Query<TextField>("serverTextField").First();
  151. mServerTextField.RegisterValueChangedCallback(OnServerTextFieldChanged);
  152. mUseSslToggle = root.Query<Toggle>("useSslToogle").First();
  153. mUseSslToggle.RegisterValueChangedCallback(OnUseSslToggleChanged);
  154. mUserTextField = root.Query<TextField>("userTextField").First();
  155. mUserTextField.SetEnabled(false);
  156. mPasswordTextField = root.Query<TextField>("passwordTextField").First();
  157. mPasswordTextField.isPasswordField = true;
  158. mConnectedLabel = root.Query<Label>("connectedLabel").First();
  159. mCredentialsLabel = root.Query<Label>("credentialsOk").First();
  160. mOkButton = root.Query<Button>("okButton").First();
  161. mOkButton.clicked += OkButton_Clicked;
  162. mCancelButton = root.Query<Button>("cancelButton").First();
  163. mCancelButton.clicked += CancelButton_Clicked;
  164. }
  165. void OnUseSslToggleChanged(ChangeEvent<bool> evt)
  166. {
  167. mUserAssistant.OnSslChanged(mServerTextField.value, evt.newValue);
  168. mServerTextField.value = mUserAssistant.GetProposedServer();
  169. }
  170. void InitializeLayoutAndStyles()
  171. {
  172. VisualElement root = rootVisualElement;
  173. root.LoadLayout(typeof(TeamEditionConfigurationWindow).Name);
  174. root.LoadStyle(typeof(TeamEditionConfigurationWindow).Name);
  175. }
  176. void OnServerTextFieldChanged(ChangeEvent<string> evt)
  177. {
  178. mUserAssistant.OnServerChanged(evt.newValue);
  179. mUseSslToggle.value = mUserAssistant.IsSslServer(evt.newValue);
  180. }
  181. void ShowServerNotificationMessage(string message)
  182. {
  183. mConnectedLabel.text = message;
  184. mConnectedLabel.RemoveFromClassList("visibility-hidden");
  185. }
  186. void ShowServerValidationError(string message)
  187. {
  188. mConnectedLabel.text = message;
  189. mConnectedLabel.AddToClassList("error");
  190. mConnectedLabel.RemoveFromClassList("visibility-hidden");
  191. }
  192. void ShowCredentialsNotificationMessage(string message)
  193. {
  194. mCredentialsLabel.text = message;
  195. mCredentialsLabel.RemoveFromClassList("visibility-hidden");
  196. }
  197. void ShowCheckCredentialsError(string message)
  198. {
  199. mCredentialsLabel.text = message;
  200. mCredentialsLabel.AddToClassList("error");
  201. mCredentialsLabel.RemoveFromClassList("visibility-hidden");
  202. }
  203. void HideValidation()
  204. {
  205. mConnectedLabel.RemoveFromClassList("error");
  206. mConnectedLabel.AddToClassList("visibility-hidden");
  207. }
  208. void ShowProgress(string text)
  209. {
  210. mSpinnerLabel.text = text;
  211. mSpinnerContainer.RemoveFromClassList("visibility-hidden");
  212. mSpinnerLabel.RemoveFromClassList("visibility-hidden");
  213. mLoadingSpinner.Start();
  214. }
  215. void HideProgress()
  216. {
  217. mLoadingSpinner.Stop();
  218. mSpinnerContainer.AddToClassList("visibility-hidden");
  219. mSpinnerLabel.AddToClassList("visibility-hidden");
  220. }
  221. void UpdatePasswordEntries(bool bIsPasswordRequired)
  222. {
  223. if (!bIsPasswordRequired)
  224. {
  225. mPasswordTextField.AddToClassList("display-none");
  226. mUserTextField.SetEnabled(false);
  227. mUserTextField.value = Environment.UserName;
  228. return;
  229. }
  230. mUserTextField.SetEnabled(true);
  231. mPasswordTextField.RemoveFromClassList("display-none");
  232. mUserTextField.SelectAll();
  233. mUserTextField.FocusWorkaround();
  234. }
  235. Button mConnectButton;
  236. Label mConnectedLabel;
  237. TextField mServerTextField;
  238. TextField mPasswordTextField;
  239. Toggle mUseSslToggle;
  240. LoadingSpinner mLoadingSpinner;
  241. Label mSpinnerLabel;
  242. VisualElement mSpinnerContainer;
  243. Button mCheckConnectionButton;
  244. Label mCredentialsLabel;
  245. Button mOkButton;
  246. Button mCancelButton;
  247. SEIDWorkingMode mSEIDWorkingMode = SEIDWorkingMode.UPWorkingMode;
  248. ConfigurationDialogUserAssistant mUserAssistant =
  249. new ConfigurationDialogUserAssistant();
  250. IPlasticWebRestApi mRestApi;
  251. WelcomeView mWelcomeView;
  252. TextField mUserTextField;
  253. }
  254. }