CheckinConflictsDialog.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using UnityEditor;
  5. using UnityEngine;
  6. using Codice.Client.GameUI.Checkin;
  7. using PlasticGui;
  8. using Unity.PlasticSCM.Editor.UI;
  9. namespace Unity.PlasticSCM.Editor.Views.PendingChanges.Dialogs
  10. {
  11. internal class CheckinConflictsDialog : PlasticDialog
  12. {
  13. protected override Rect DefaultRect
  14. {
  15. get
  16. {
  17. var baseRect = base.DefaultRect;
  18. return new Rect(baseRect.x, baseRect.y, 600, 418);
  19. }
  20. }
  21. internal static ResponseType Show(
  22. IList<CheckinConflict> conflicts,
  23. PlasticLocalization.Name dialogTitle,
  24. PlasticLocalization.Name dialogExplanation,
  25. PlasticLocalization.Name okButtonCaption,
  26. EditorWindow parentWindow)
  27. {
  28. CheckinConflictsDialog dialog = Create(
  29. PlasticLocalization.GetString(dialogTitle),
  30. PlasticLocalization.GetString(dialogExplanation),
  31. GetConflictsText(conflicts),
  32. PlasticLocalization.GetString(okButtonCaption));
  33. return dialog.RunModal(parentWindow);
  34. }
  35. protected override void OnModalGUI()
  36. {
  37. Title(mDialogTitle);
  38. Paragraph(mDialogExplanation);
  39. Title(PlasticLocalization.GetString(PlasticLocalization.Name.ItemColumn));
  40. ConflictsArea();
  41. GUILayout.Space(20);
  42. DoButtonsArea();
  43. }
  44. protected override string GetTitle()
  45. {
  46. return PlasticLocalization.GetString(
  47. PlasticLocalization.Name.CheckinConflictsTitle);
  48. }
  49. void ConflictsArea()
  50. {
  51. mScrollPosition = EditorGUILayout.BeginScrollView(
  52. mScrollPosition, EditorStyles.helpBox, GUILayout.Height(205));
  53. using (new EditorGUILayout.HorizontalScope())
  54. {
  55. GUILayout.Space(6);
  56. Paragraph(mConflictsText);
  57. }
  58. EditorGUILayout.EndScrollView();
  59. }
  60. void DoButtonsArea()
  61. {
  62. using (new EditorGUILayout.HorizontalScope())
  63. {
  64. GUILayout.FlexibleSpace();
  65. if (Application.platform == RuntimePlatform.WindowsEditor)
  66. {
  67. DoOkButton();
  68. DoCancelButton();
  69. return;
  70. }
  71. DoCancelButton();
  72. DoOkButton();
  73. }
  74. }
  75. void DoOkButton()
  76. {
  77. if (!AcceptButton(mOkButtonCaption))
  78. return;
  79. OkButtonAction();
  80. }
  81. void DoCancelButton()
  82. {
  83. if (!NormalButton(PlasticLocalization.GetString(
  84. PlasticLocalization.Name.CancelButton)))
  85. return;
  86. CancelButtonAction();
  87. }
  88. static string GetConflictsText(IList<CheckinConflict> conflicts)
  89. {
  90. StringBuilder sb = new StringBuilder();
  91. foreach (CheckinConflict conflict in conflicts)
  92. {
  93. sb.AppendFormat(
  94. "{0} {1}{2}",
  95. conflict.Description,
  96. conflict.ActionMessage,
  97. Environment.NewLine);
  98. }
  99. return sb.ToString();
  100. }
  101. static CheckinConflictsDialog Create(
  102. string dialogTitle,
  103. string dialogExplanation,
  104. string conflictsText,
  105. string okButtonCaption)
  106. {
  107. var instance = CreateInstance<CheckinConflictsDialog>();
  108. instance.mDialogTitle = dialogTitle;
  109. instance.mDialogExplanation = dialogExplanation;
  110. instance.mConflictsText = conflictsText;
  111. instance.mOkButtonCaption = okButtonCaption;
  112. instance.mEnterKeyAction = instance.OkButtonAction;
  113. instance.mEscapeKeyAction = instance.CancelButtonAction;
  114. return instance;
  115. }
  116. Vector2 mScrollPosition;
  117. string mDialogTitle;
  118. string mDialogExplanation;
  119. string mConflictsText;
  120. string mOkButtonCaption;
  121. }
  122. }