CheckinMergeNeededDialog.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. using UnityEditor;
  2. using UnityEngine;
  3. using Codice.CM.Common;
  4. using PlasticGui;
  5. using PlasticGui.WorkspaceWindow.PendingChanges;
  6. using Unity.PlasticSCM.Editor.UI;
  7. using Unity.PlasticSCM.Editor.UI.Progress;
  8. namespace Unity.PlasticSCM.Editor.Views.PendingChanges.Dialogs
  9. {
  10. internal class CheckinMergeNeededDialog : PlasticDialog
  11. {
  12. protected override Rect DefaultRect
  13. {
  14. get
  15. {
  16. var baseRect = base.DefaultRect;
  17. return new Rect(baseRect.x, baseRect.y, 650, 390);
  18. }
  19. }
  20. internal static CheckinMergeNeededData Merge(
  21. WorkspaceInfo wkInfo,
  22. EditorWindow parentWindow)
  23. {
  24. RepositorySpec repSpec = PlasticGui.Plastic.API.GetRepositorySpec(wkInfo);
  25. BranchInfo parentBranchInfo = PlasticGui.Plastic.API.GetWorkingBranch(wkInfo);
  26. CheckinMergeNeededDialog dialog = Create(
  27. repSpec, parentBranchInfo,
  28. new ProgressControlsForDialogs());
  29. ResponseType dialogResult = dialog.RunModal(parentWindow);
  30. CheckinMergeNeededData result = new CheckinMergeNeededData(
  31. repSpec, parentBranchInfo,
  32. dialog.mMergeNow, dialog.mChildBranchName);
  33. result.Result = dialogResult == ResponseType.Ok;
  34. return result;
  35. }
  36. protected override void OnModalGUI()
  37. {
  38. Title(PlasticLocalization.GetString(
  39. PlasticLocalization.Name.CheckinMergeRequest));
  40. Paragraph(PlasticLocalization.GetString(
  41. PlasticLocalization.Name.CheckinMergeRequestMessage));
  42. Paragraph(PlasticLocalization.GetString(
  43. PlasticLocalization.Name.CheckinMergeRequestQuestion));
  44. DoMergeNowArea();
  45. DoMergeLaterArea();
  46. GUILayout.Space(10);
  47. DrawProgressForDialogs.For(
  48. mProgressControls.ProgressData);
  49. GUILayout.Space(10);
  50. DoButtonsArea();
  51. mProgressControls.ForcedUpdateProgress(this);
  52. }
  53. protected override string GetTitle()
  54. {
  55. return PlasticLocalization.GetString(
  56. PlasticLocalization.Name.CheckinMergeTitle);
  57. }
  58. void DoMergeNowArea()
  59. {
  60. using (new EditorGUILayout.HorizontalScope())
  61. {
  62. GUILayout.Space(20);
  63. EditorGUI.BeginChangeCheck();
  64. bool mergeNowChecked = RadioToggle(PlasticLocalization.GetString(
  65. PlasticLocalization.Name.CheckinMergeNow), mMergeNow);
  66. if (EditorGUI.EndChangeCheck() && mergeNowChecked)
  67. {
  68. mMergeNow = mergeNowChecked; // Just check
  69. }
  70. GUILayout.FlexibleSpace();
  71. }
  72. using (new EditorGUILayout.HorizontalScope())
  73. {
  74. GUILayout.Space(45);
  75. Paragraph(PlasticLocalization.GetString(
  76. PlasticLocalization.Name.CheckinMergeNowMessage));
  77. }
  78. }
  79. void DoMergeLaterArea()
  80. {
  81. using (new EditorGUILayout.HorizontalScope())
  82. {
  83. GUILayout.Space(20);
  84. EditorGUI.BeginChangeCheck();
  85. bool mergeLaterChecked = RadioToggle(PlasticLocalization.GetString(
  86. PlasticLocalization.Name.CheckinMergeLater), !mMergeNow);
  87. if (EditorGUI.EndChangeCheck() && mergeLaterChecked)
  88. {
  89. mMergeNow = !mergeLaterChecked; // Just uncheck
  90. }
  91. GUILayout.FlexibleSpace();
  92. }
  93. using (new EditorGUILayout.HorizontalScope())
  94. {
  95. GUILayout.Space(45);
  96. Paragraph(PlasticLocalization.GetString(
  97. PlasticLocalization.Name.CheckinMergeLaterMessage,
  98. mCurrentBranchInfo.BranchName));
  99. }
  100. using (new EditorGUILayout.HorizontalScope())
  101. {
  102. GUILayout.Space(60);
  103. GUILayout.Label(PlasticLocalization.GetString(
  104. PlasticLocalization.Name.CheckinMergeBranch), UnityStyles.Paragraph);
  105. GUILayout.Space(-10);
  106. using (new EditorGUILayout.VerticalScope())
  107. {
  108. GUILayout.Space(6);
  109. GUI.enabled = !mMergeNow;
  110. mChildBranchName = EditorGUILayout.TextField(
  111. string.Empty, mChildBranchName);
  112. GUI.enabled = true;
  113. }
  114. }
  115. }
  116. void DoButtonsArea()
  117. {
  118. using (new EditorGUI.DisabledScope(
  119. mProgressControls.ProgressData.IsWaitingAsyncResult))
  120. using (new EditorGUILayout.HorizontalScope())
  121. {
  122. GUILayout.FlexibleSpace();
  123. if (Application.platform == RuntimePlatform.WindowsEditor)
  124. {
  125. DoMergeButton();
  126. DoCancelButton();
  127. return;
  128. }
  129. DoCancelButton();
  130. DoMergeButton();
  131. }
  132. }
  133. void DoMergeButton()
  134. {
  135. if (!AcceptButton(PlasticLocalization.GetString(
  136. PlasticLocalization.Name.MergeButton)))
  137. return;
  138. MergeButtonAction();
  139. }
  140. void DoCancelButton()
  141. {
  142. if (!NormalButton(PlasticLocalization.GetString(
  143. PlasticLocalization.Name.CancelButton)))
  144. return;
  145. CancelButtonAction();
  146. }
  147. void MergeButtonAction()
  148. {
  149. CheckinMergeNeededData data = new CheckinMergeNeededData(
  150. mRepSpec, mCurrentBranchInfo, mMergeNow, mChildBranchName);
  151. CheckinMergeNeededValidation.AsyncValidation(
  152. data, this, mProgressControls);
  153. }
  154. bool RadioToggle(string text, bool isOn)
  155. {
  156. var rect = GUILayoutUtility.GetRect(
  157. new GUIContent(text), UnityStyles.Dialog.RadioToggle);
  158. bool isOnAfter = EditorGUI.Toggle(
  159. rect, isOn, UnityStyles.Dialog.RadioToggle);
  160. GUI.Label(
  161. new Rect(
  162. rect.x + rect.height, rect.y,
  163. rect.xMax - rect.height, rect.height),
  164. text, UnityStyles.Paragraph);
  165. return isOnAfter;
  166. }
  167. static CheckinMergeNeededDialog Create(
  168. RepositorySpec repSpec,
  169. BranchInfo currentBranchInfo,
  170. ProgressControlsForDialogs progressControls)
  171. {
  172. var instance = CreateInstance<CheckinMergeNeededDialog>();
  173. instance.mRepSpec = repSpec;
  174. instance.mCurrentBranchInfo = currentBranchInfo;
  175. instance.mProgressControls = progressControls;
  176. instance.mEnterKeyAction = instance.MergeButtonAction;
  177. instance.mEscapeKeyAction = instance.CancelButtonAction;
  178. return instance;
  179. }
  180. [SerializeField]
  181. bool mMergeNow = true;
  182. [SerializeField]
  183. string mChildBranchName = DEFAULT_BRANCH_NAME;
  184. ProgressControlsForDialogs mProgressControls;
  185. BranchInfo mCurrentBranchInfo;
  186. RepositorySpec mRepSpec;
  187. const string DEFAULT_BRANCH_NAME = "task000";
  188. }
  189. }