Newer
Older
Simple-Multiplayer-Unity3D / Multiplayer Project / Library / PackageCache / com.unity.collab-proxy@2.7.1 / Editor / Views / ShelvePendingChangesDialog.cs
  1. using System;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using Codice.Client.Commands;
  5. using Codice.Client.Common;
  6. using PlasticGui;
  7. using Unity.PlasticSCM.Editor.UI;
  8. namespace Unity.PlasticSCM.Editor.Views
  9. {
  10. internal class ShelvePendingChangesQuestionerBuilder :
  11. IShelvePendingChangesQuestionerBuilder
  12. {
  13. internal ShelvePendingChangesQuestionerBuilder(EditorWindow window)
  14. {
  15. mWindow = window;
  16. }
  17. public IShelvePendingChangesQuestioner Get()
  18. {
  19. return new ShelvePendingChangesQuestioner(mWindow);
  20. }
  21. readonly EditorWindow mWindow;
  22. }
  23. internal class ShelvePendingChangesQuestioner : IShelvePendingChangesQuestioner
  24. {
  25. internal ShelvePendingChangesQuestioner(EditorWindow window)
  26. {
  27. mWindow = window;
  28. }
  29. ShelvePendingChangesAction IShelvePendingChangesQuestioner.ShelvePendingChanges(
  30. string srcObject,
  31. string dstObject,
  32. bool canBringPendingChanges,
  33. bool warnOverwriteExistingShelves)
  34. {
  35. ShelvePendingChangesAction result = ShelvePendingChangesAction.Cancel;
  36. GUIActionRunner.RunGUIAction(() =>
  37. {
  38. result = ShelvePendingChangesDialog.ConfirmContinue(
  39. mWindow,
  40. srcObject,
  41. dstObject,
  42. canBringPendingChanges,
  43. warnOverwriteExistingShelves);
  44. });
  45. return result;
  46. }
  47. readonly EditorWindow mWindow;
  48. }
  49. internal class ShelvePendingChangesDialog : PlasticDialog
  50. {
  51. protected override Rect DefaultRect
  52. {
  53. get
  54. {
  55. var baseRect = base.DefaultRect;
  56. return new Rect(baseRect.x, baseRect.y, 600, 300);
  57. }
  58. }
  59. internal static ShelvePendingChangesAction ConfirmContinue(
  60. EditorWindow window,
  61. string srcObject,
  62. string dstObject,
  63. bool canBringPendingChanges,
  64. bool warnOverwriteExistingShelves)
  65. {
  66. ShelvePendingChangesDialog dialog = Create(
  67. srcObject,
  68. dstObject,
  69. canBringPendingChanges,
  70. warnOverwriteExistingShelves);
  71. ResponseType result = dialog.RunModal(window);
  72. if (result == ResponseType.Ok)
  73. return ShelvePendingChangesAction.BringPendingChanges;
  74. if (result == ResponseType.None)
  75. return ShelvePendingChangesAction.ShelvePendingChanges;
  76. return ShelvePendingChangesAction.Cancel;
  77. }
  78. static ShelvePendingChangesDialog Create(
  79. string srcObject,
  80. string dstObject,
  81. bool canBringPendingChanges,
  82. bool warnOverwriteExistingShelves)
  83. {
  84. var instance = CreateInstance<ShelvePendingChangesDialog>();
  85. instance.mSrcObject = srcObject;
  86. instance.mDstObject = dstObject;
  87. instance.mCanBringPendingChanges = canBringPendingChanges;
  88. instance.mWarnOverwriteExistingShelves = warnOverwriteExistingShelves;
  89. return instance;
  90. }
  91. protected override string GetTitle()
  92. {
  93. return PlasticLocalization.Name.ShelveAndSwitchDialogTitle.GetString();
  94. }
  95. bool AskForOverwriteConfirmation()
  96. {
  97. return GuiMessage.ShowQuestion(
  98. PlasticLocalization.Name.OverwriteShelveDialogTitle.GetString(),
  99. PlasticLocalization.Name.OverwriteShelveDialogMessage.GetString(),
  100. PlasticLocalization.Name.OverwriteShelveDialogOverwriteButton.GetString(),
  101. PlasticLocalization.Name.CancelButton.GetString(),
  102. null) == GuiMessage.GuiMessageResponseButton.Positive;
  103. }
  104. protected override void OnModalGUI()
  105. {
  106. Title(PlasticLocalization.Name.ShelveAndSwitchDialogTitle.GetString());
  107. Paragraph(PlasticLocalization.Name.ShelveAndSwitchExplanation.GetString());
  108. DoRadioButtonsArea();
  109. GUILayout.Space(20);
  110. DoButtonsArea();
  111. }
  112. void DoRadioButtonsArea()
  113. {
  114. if (GUILayout.Toggle(
  115. mLeaveRadioToggle,
  116. PlasticLocalization.Name.LeaveChangesButton.GetString(mSrcObject),
  117. UnityStyles.Dialog.BoldRadioToggle))
  118. {
  119. mLeaveRadioToggle = true;
  120. mBringRadioToggle = false;
  121. }
  122. DrawTabbedContent(DrawLeaveRadioToggleExplanation);
  123. GUILayout.Space(10);
  124. GUI.enabled = mCanBringPendingChanges;
  125. if (GUILayout.Toggle(
  126. mBringRadioToggle,
  127. PlasticLocalization.Name.BringChangesButton.GetString(mDstObject),
  128. UnityStyles.Dialog.BoldRadioToggle))
  129. {
  130. mLeaveRadioToggle = false;
  131. mBringRadioToggle = true;
  132. }
  133. DrawTabbedContent(DrawBringRadioToggleExplanation);
  134. GUI.enabled = true;
  135. GUILayout.FlexibleSpace();
  136. if (!mWarnOverwriteExistingShelves || !mLeaveRadioToggle)
  137. return;
  138. GUILayout.Label(
  139. PlasticLocalization.Name.OverwriteExistingShelvesWarning.GetString(),
  140. UnityStyles.Dialog.BoldText);
  141. }
  142. void DrawLeaveRadioToggleExplanation()
  143. {
  144. GUILayout.Label(
  145. PlasticLocalization.Name.LeaveChangesExplanation.GetString(),
  146. UnityStyles.Dialog.MessageText);
  147. }
  148. void DrawBringRadioToggleExplanation()
  149. {
  150. GUILayout.Label(
  151. PlasticLocalization.Name.BringChangesExplanation.GetString(),
  152. UnityStyles.Dialog.MessageText);
  153. }
  154. void DoButtonsArea()
  155. {
  156. using (new EditorGUILayout.HorizontalScope())
  157. {
  158. GUILayout.FlexibleSpace();
  159. if (Application.platform == RuntimePlatform.WindowsEditor)
  160. {
  161. DoSwitchButton();
  162. DoCancelButton();
  163. return;
  164. }
  165. DoCancelButton();
  166. DoSwitchButton();
  167. }
  168. }
  169. void DoSwitchButton()
  170. {
  171. if (!NormalButton(PlasticLocalization.Name.SwitchButton.GetString()))
  172. return;
  173. if (mWarnOverwriteExistingShelves &&
  174. mLeaveRadioToggle &&
  175. !AskForOverwriteConfirmation())
  176. return;
  177. if (mLeaveRadioToggle)
  178. {
  179. CloseButtonAction();
  180. return;
  181. }
  182. OkButtonAction();
  183. }
  184. void DoCancelButton()
  185. {
  186. if (!NormalButton(PlasticLocalization.Name.CancelButton.GetString()))
  187. return;
  188. CancelButtonAction();
  189. }
  190. static void DrawTabbedContent(Action drawContent)
  191. {
  192. float originalLabelWidth = EditorGUIUtility.labelWidth;
  193. try
  194. {
  195. using (new EditorGUILayout.HorizontalScope())
  196. {
  197. EditorGUILayout.Space(21);
  198. EditorGUIUtility.labelWidth -= 21;
  199. using (new EditorGUILayout.VerticalScope())
  200. {
  201. GUILayout.Space(0);
  202. drawContent();
  203. }
  204. GUILayout.FlexibleSpace();
  205. }
  206. }
  207. finally
  208. {
  209. EditorGUIUtility.labelWidth = originalLabelWidth;
  210. }
  211. }
  212. bool mLeaveRadioToggle = true;
  213. bool mBringRadioToggle;
  214. string mSrcObject;
  215. string mDstObject;
  216. bool mCanBringPendingChanges;
  217. bool mWarnOverwriteExistingShelves;
  218. }
  219. }