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.

ConfirmContinueWithPendingChangesDialog.cs 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. using UnityEditor;
  2. using UnityEngine;
  3. using Codice.Client.Common;
  4. using Codice.Client.Commands;
  5. using PlasticGui;
  6. using PlasticGui.WorkspaceWindow.Update;
  7. using Unity.PlasticSCM.Editor.UI;
  8. namespace Unity.PlasticSCM.Editor.Views
  9. {
  10. internal class ContinueWithPendingChangesQuestionerBuilder :
  11. SwitchController.IContinueWithPendingChangesQuestionerBuilder
  12. {
  13. internal ContinueWithPendingChangesQuestionerBuilder(
  14. IViewSwitcher viewSwitcher,
  15. EditorWindow parentWindow)
  16. {
  17. mViewSwitcher = viewSwitcher;
  18. mParentWindow = parentWindow;
  19. }
  20. public IContinueWithPendingChangesQuestioner Get(string title, string explanation)
  21. {
  22. return new ContinueWithPendingChangesQuestioner(
  23. title,
  24. explanation,
  25. mViewSwitcher,
  26. mParentWindow);
  27. }
  28. IViewSwitcher mViewSwitcher;
  29. EditorWindow mParentWindow;
  30. }
  31. internal class ContinueWithPendingChangesQuestioner : IContinueWithPendingChangesQuestioner
  32. {
  33. internal ContinueWithPendingChangesQuestioner(
  34. string title,
  35. string explanation,
  36. IViewSwitcher viewSwitcher,
  37. EditorWindow parentWindow)
  38. {
  39. mTitle = title;
  40. mExplanation = explanation;
  41. mViewSwitcher = viewSwitcher;
  42. mParentWindow = parentWindow;
  43. }
  44. public bool ContinueWithPendingChanges()
  45. {
  46. bool result = false;
  47. GUIActionRunner.RunGUIAction(() =>
  48. {
  49. result = ConfirmContinueWithPendingChangesDialog.ConfirmContinue(
  50. mTitle,
  51. mExplanation,
  52. mViewSwitcher,
  53. mParentWindow);
  54. });
  55. return result;
  56. }
  57. string mTitle;
  58. string mExplanation;
  59. IViewSwitcher mViewSwitcher;
  60. EditorWindow mParentWindow;
  61. }
  62. internal class ConfirmContinueWithPendingChangesDialog : PlasticDialog
  63. {
  64. protected override Rect DefaultRect
  65. {
  66. get
  67. {
  68. var baseRect = base.DefaultRect;
  69. return new Rect(baseRect.x, baseRect.y, 500, 287);
  70. }
  71. }
  72. internal static bool ConfirmContinue(
  73. string title,
  74. string explanation,
  75. IViewSwitcher viewSwitcher,
  76. EditorWindow parentWindow)
  77. {
  78. ConfirmContinueWithPendingChangesDialog dialog = Create(
  79. title,
  80. explanation,
  81. viewSwitcher);
  82. if (dialog.RunModal(parentWindow) != ResponseType.Ok)
  83. return false;
  84. if (dialog.mIsSwitchToConfirmationChecked)
  85. SavePreference();
  86. return true;
  87. }
  88. static ConfirmContinueWithPendingChangesDialog Create(
  89. string title,
  90. string explanation,
  91. IViewSwitcher viewSwitcher)
  92. {
  93. var instance = CreateInstance<ConfirmContinueWithPendingChangesDialog>();
  94. instance.mTitle = title;
  95. instance.mExplanation = explanation;
  96. instance.mViewSwitcher = viewSwitcher;
  97. return instance;
  98. }
  99. static void SavePreference()
  100. {
  101. ClientConfigData data = ClientConfig.Get().GetClientConfigData();
  102. data.SetPendingChangesOnSwitchAction(UserAction.None);
  103. ClientConfig.Get().Save(data);
  104. }
  105. protected override string GetTitle()
  106. {
  107. return mTitle;
  108. }
  109. protected override void OnModalGUI()
  110. {
  111. Title(mTitle);
  112. Paragraph(mExplanation);
  113. DoSwitchToConfirmationCheckButton();
  114. GUILayout.Space(10);
  115. DoButtonsArea();
  116. }
  117. void DoSwitchToConfirmationCheckButton()
  118. {
  119. using (new EditorGUILayout.HorizontalScope())
  120. {
  121. GUILayout.FlexibleSpace();
  122. mIsSwitchToConfirmationChecked = TitleToggle(
  123. PlasticLocalization.GetString(
  124. PlasticLocalization.Name.SwitchToConfirmationCheckButton),
  125. mIsSwitchToConfirmationChecked);
  126. }
  127. }
  128. void DoButtonsArea()
  129. {
  130. using (new EditorGUILayout.HorizontalScope())
  131. {
  132. GUILayout.FlexibleSpace();
  133. if (Application.platform == RuntimePlatform.WindowsEditor)
  134. {
  135. DoContinueButton();
  136. DoCancelAndViewPendingChangesButton();
  137. DoCancelButton();
  138. return;
  139. }
  140. DoCancelButton();
  141. DoCancelAndViewPendingChangesButton();
  142. DoContinueButton();
  143. }
  144. }
  145. void DoContinueButton()
  146. {
  147. if (!NormalButton(PlasticLocalization.GetString(
  148. PlasticLocalization.Name.SwitchToConfirmationContinueButton)))
  149. return;
  150. OkButtonAction();
  151. }
  152. void DoCancelButton()
  153. {
  154. if (!NormalButton(PlasticLocalization.GetString(
  155. PlasticLocalization.Name.CancelButton)))
  156. return;
  157. CancelButtonAction();
  158. }
  159. void DoCancelAndViewPendingChangesButton()
  160. {
  161. if (!NormalButton(PlasticLocalization.GetString(
  162. PlasticLocalization.Name.SwitchToConfirmationCancelViewChangesButton)))
  163. return;
  164. mViewSwitcher.ShowPendingChanges();
  165. CancelButtonAction();
  166. }
  167. string mTitle;
  168. string mExplanation;
  169. IViewSwitcher mViewSwitcher;
  170. bool mIsSwitchToConfirmationChecked;
  171. }
  172. }