暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

EncryptionConfigurationDialog.cs 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. using UnityEditor;
  2. using UnityEngine;
  3. using Codice.Utils;
  4. using PlasticGui;
  5. using Unity.PlasticSCM.Editor.UI;
  6. namespace Unity.PlasticSCM.Editor.Configuration
  7. {
  8. internal class EncryptionConfigurationDialog : PlasticDialog
  9. {
  10. protected override Rect DefaultRect
  11. {
  12. get
  13. {
  14. var baseRect = base.DefaultRect;
  15. return new Rect(baseRect.x, baseRect.y, 650, 425);
  16. }
  17. }
  18. internal static EncryptionConfigurationDialogData RequestEncryptionPassword(
  19. string server,
  20. EditorWindow parentWindow)
  21. {
  22. EncryptionConfigurationDialog dialog = Create(server);
  23. ResponseType dialogResult = dialog.RunModal(parentWindow);
  24. EncryptionConfigurationDialogData result =
  25. dialog.BuildEncryptionConfigurationData();
  26. result.Result = dialogResult == ResponseType.Ok;
  27. return result;
  28. }
  29. protected override void OnModalGUI()
  30. {
  31. Title(PlasticLocalization.GetString(
  32. PlasticLocalization.Name.EncryptionConfiguration));
  33. GUILayout.Space(20);
  34. Paragraph(PlasticLocalization.GetString(
  35. PlasticLocalization.Name.EncryptionConfigurationExplanation, mServer));
  36. DoPasswordArea();
  37. Paragraph(PlasticLocalization.GetString(
  38. PlasticLocalization.Name.EncryptionConfigurationRemarks, mServer));
  39. GUILayout.Space(10);
  40. DoNotificationArea();
  41. GUILayout.Space(10);
  42. DoButtonsArea();
  43. }
  44. protected override string GetTitle()
  45. {
  46. return PlasticLocalization.GetString(
  47. PlasticLocalization.Name.EncryptionConfiguration);
  48. }
  49. EncryptionConfigurationDialogData BuildEncryptionConfigurationData()
  50. {
  51. return new EncryptionConfigurationDialogData(
  52. CryptoServices.GetEncryptedPassword(mPassword.Trim()));
  53. }
  54. void DoPasswordArea()
  55. {
  56. Paragraph(PlasticLocalization.GetString(
  57. PlasticLocalization.Name.EncryptionConfigurationEnterPassword));
  58. GUILayout.Space(5);
  59. mPassword = PasswordEntry(PlasticLocalization.GetString(
  60. PlasticLocalization.Name.Password), mPassword,
  61. PASSWORD_TEXT_WIDTH, PASSWORD_TEXT_X);
  62. GUILayout.Space(5);
  63. mRetypePassword = PasswordEntry(PlasticLocalization.GetString(
  64. PlasticLocalization.Name.RetypePassword), mRetypePassword,
  65. PASSWORD_TEXT_WIDTH, PASSWORD_TEXT_X);
  66. GUILayout.Space(18f);
  67. }
  68. void DoNotificationArea()
  69. {
  70. if (string.IsNullOrEmpty(mErrorMessage))
  71. return;
  72. var rect = GUILayoutUtility.GetRect(
  73. GUILayoutUtility.GetLastRect().width, 30);
  74. EditorGUI.HelpBox(rect, mErrorMessage, MessageType.Error);
  75. }
  76. void DoButtonsArea()
  77. {
  78. using (new EditorGUILayout.HorizontalScope())
  79. {
  80. GUILayout.FlexibleSpace();
  81. if (Application.platform == RuntimePlatform.WindowsEditor)
  82. {
  83. DoOkButton();
  84. DoCancelButton();
  85. return;
  86. }
  87. DoCancelButton();
  88. DoOkButton();
  89. }
  90. }
  91. void DoOkButton()
  92. {
  93. if (!AcceptButton(PlasticLocalization.GetString(
  94. PlasticLocalization.Name.OkButton)))
  95. return;
  96. OkButtonWithValidationAction();
  97. }
  98. void DoCancelButton()
  99. {
  100. if (!NormalButton(PlasticLocalization.GetString(
  101. PlasticLocalization.Name.CancelButton)))
  102. return;
  103. CancelButtonAction();
  104. }
  105. void OkButtonWithValidationAction()
  106. {
  107. if (IsValidPassword(
  108. mPassword.Trim(), mRetypePassword.Trim(),
  109. out mErrorMessage))
  110. {
  111. mErrorMessage = string.Empty;
  112. OkButtonAction();
  113. return;
  114. }
  115. mPassword = string.Empty;
  116. mRetypePassword = string.Empty;
  117. }
  118. static bool IsValidPassword(
  119. string password, string retypePassword,
  120. out string errorMessage)
  121. {
  122. errorMessage = string.Empty;
  123. if (string.IsNullOrEmpty(password))
  124. {
  125. errorMessage = PlasticLocalization.GetString(
  126. PlasticLocalization.Name.InvalidEmptyPassword);
  127. return false;
  128. }
  129. if (!password.Equals(retypePassword))
  130. {
  131. errorMessage = PlasticLocalization.GetString(
  132. PlasticLocalization.Name.PasswordDoesntMatch);
  133. return false;
  134. }
  135. return true;
  136. }
  137. static EncryptionConfigurationDialog Create(string server)
  138. {
  139. var instance = CreateInstance<EncryptionConfigurationDialog>();
  140. instance.mServer = server;
  141. instance.mEnterKeyAction = instance.OkButtonWithValidationAction;
  142. instance.mEscapeKeyAction = instance.CancelButtonAction;
  143. return instance;
  144. }
  145. string mPassword = string.Empty;
  146. string mRetypePassword = string.Empty;
  147. string mErrorMessage = string.Empty;
  148. string mServer = string.Empty;
  149. const float PASSWORD_TEXT_WIDTH = 250f;
  150. const float PASSWORD_TEXT_X = 200f;
  151. }
  152. }