IncomingChangesViewMenu.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. using UnityEngine;
  2. using UnityEditor;
  3. using PlasticGui;
  4. using PlasticGui.Gluon.WorkspaceWindow.Views.IncomingChanges;
  5. using Unity.PlasticSCM.Editor.UI;
  6. using Unity.PlasticSCM.Editor.Tool;
  7. namespace Unity.PlasticSCM.Editor.Views.IncomingChanges.Gluon
  8. {
  9. internal class IncomingChangesViewMenu
  10. {
  11. internal interface IMetaMenuOperations
  12. {
  13. void DiffIncomingChanges();
  14. void DiffYoursWithIncoming();
  15. bool SelectionHasMeta();
  16. }
  17. internal IncomingChangesViewMenu(
  18. IIncomingChangesViewMenuOperations incomingChangesViewMenuOperations,
  19. IMetaMenuOperations incomingChangesMetaMenuOperations)
  20. {
  21. mIncomingChangesViewMenuOperations = incomingChangesViewMenuOperations;
  22. mIncomingChangesMetaMenuOperations = incomingChangesMetaMenuOperations;
  23. BuildComponents();
  24. }
  25. internal void Popup()
  26. {
  27. GenericMenu menu = new GenericMenu();
  28. UpdateMenuItems(menu);
  29. menu.ShowAsContext();
  30. }
  31. void MergeSelectedFilesMenuItem_Click()
  32. {
  33. if (LaunchTool.ShowDownloadPlasticExeWindow(false))
  34. return;
  35. mIncomingChangesViewMenuOperations.MergeContributors();
  36. }
  37. void MergeKeepingSourceChangesMenuItem_Click()
  38. {
  39. mIncomingChangesViewMenuOperations.MergeKeepingSourceChanges();
  40. }
  41. void MergeKeepingWorkspaceChangesMenuItem_Click()
  42. {
  43. mIncomingChangesViewMenuOperations.MergeKeepingWorkspaceChanges();
  44. }
  45. void DiffYoursWithIncomingMenuItem_Click()
  46. {
  47. mIncomingChangesViewMenuOperations.DiffYoursWithIncoming();
  48. }
  49. void DiffIncomingChangesMenuItem_Click()
  50. {
  51. mIncomingChangesViewMenuOperations.DiffIncomingChanges();
  52. }
  53. void DiffMetaYoursWithIncomingMenuItem_Click()
  54. {
  55. mIncomingChangesMetaMenuOperations.DiffYoursWithIncoming();
  56. }
  57. void DiffMetaIncomingChangesMenuItem_Click()
  58. {
  59. mIncomingChangesMetaMenuOperations.DiffIncomingChanges();
  60. }
  61. void UpdateMenuItems(GenericMenu menu)
  62. {
  63. SelectedIncomingChangesGroupInfo info =
  64. mIncomingChangesViewMenuOperations.GetSelectedIncomingChangesGroupInfo();
  65. IncomingChangesMenuOperations operations =
  66. UpdateIncomingChangesMenu.GetAvailableMenuOperations(info);
  67. if (operations == IncomingChangesMenuOperations.None)
  68. {
  69. menu.AddDisabledItem(GetNoActionMenuItemContent());
  70. return;
  71. }
  72. AddMergeActions(menu, operations);
  73. menu.AddSeparator(string.Empty);
  74. AddDiffActions(menu, operations);
  75. if (!mIncomingChangesMetaMenuOperations.SelectionHasMeta())
  76. return;
  77. menu.AddSeparator(string.Empty);
  78. AddMetaActions(menu, operations);
  79. }
  80. void AddMergeActions(
  81. GenericMenu menu,
  82. IncomingChangesMenuOperations operations)
  83. {
  84. if (operations.HasFlag(IncomingChangesMenuOperations.MergeContributors))
  85. menu.AddItem(mMergeSelectedFilesMenuItemContent, false,
  86. MergeSelectedFilesMenuItem_Click);
  87. else
  88. menu.AddDisabledItem(mMergeSelectedFilesMenuItemContent);
  89. if (operations.HasFlag(IncomingChangesMenuOperations.MergeKeepingSourceChanges))
  90. menu.AddItem(mMergeKeepingSourceChangesMenuItemContent, false,
  91. MergeKeepingSourceChangesMenuItem_Click);
  92. else
  93. menu.AddDisabledItem(mMergeKeepingSourceChangesMenuItemContent);
  94. if (operations.HasFlag(IncomingChangesMenuOperations.MergeKeepingWorkspaceChanges))
  95. menu.AddItem(mMergeKeepingWorkspaceChangesMenuItemContent, false,
  96. MergeKeepingWorkspaceChangesMenuItem_Click);
  97. else
  98. menu.AddDisabledItem(mMergeKeepingWorkspaceChangesMenuItemContent);
  99. }
  100. void AddDiffActions(GenericMenu menu, IncomingChangesMenuOperations operations)
  101. {
  102. if (operations.HasFlag(IncomingChangesMenuOperations.DiffYoursWithIncoming))
  103. menu.AddItem(mDiffYoursWithIncomingMenuItemContent, false,
  104. DiffYoursWithIncomingMenuItem_Click);
  105. else
  106. menu.AddDisabledItem(mDiffYoursWithIncomingMenuItemContent);
  107. if (operations.HasFlag(IncomingChangesMenuOperations.DiffIncomingChanges))
  108. menu.AddItem(mDiffIncomingChangesMenuItemContent, false,
  109. DiffIncomingChangesMenuItem_Click);
  110. else
  111. menu.AddDisabledItem(mDiffIncomingChangesMenuItemContent);
  112. }
  113. void AddMetaActions(GenericMenu menu, IncomingChangesMenuOperations operations)
  114. {
  115. if (operations.HasFlag(IncomingChangesMenuOperations.DiffYoursWithIncoming))
  116. menu.AddItem(mDiffMetaYoursWithIncomingMenuItemContent, false,
  117. DiffMetaYoursWithIncomingMenuItem_Click);
  118. else
  119. menu.AddDisabledItem(mDiffMetaYoursWithIncomingMenuItemContent);
  120. if (operations.HasFlag(IncomingChangesMenuOperations.DiffIncomingChanges))
  121. menu.AddItem(mDiffMetaIncomingChangesMenuItemContent, false,
  122. DiffMetaIncomingChangesMenuItem_Click);
  123. else
  124. menu.AddDisabledItem(mDiffMetaIncomingChangesMenuItemContent);
  125. }
  126. GUIContent GetNoActionMenuItemContent()
  127. {
  128. if (mNoActionMenuItemContent == null)
  129. {
  130. mNoActionMenuItemContent = new GUIContent(
  131. PlasticLocalization.GetString(PlasticLocalization.
  132. Name.NoActionMenuItem));
  133. }
  134. return mNoActionMenuItemContent;
  135. }
  136. void BuildComponents()
  137. {
  138. mMergeSelectedFilesMenuItemContent = new GUIContent(
  139. PlasticLocalization.GetString(PlasticLocalization.
  140. Name.MergeSelectedFiles));
  141. mMergeKeepingSourceChangesMenuItemContent = new GUIContent(
  142. UnityMenuItem.EscapedText(
  143. PlasticLocalization.GetString(PlasticLocalization.
  144. Name.IncomingChangesMenuItemMergeKeepingSourceChanges)));
  145. mMergeKeepingWorkspaceChangesMenuItemContent = new GUIContent(
  146. UnityMenuItem.EscapedText(
  147. PlasticLocalization.GetString(PlasticLocalization.
  148. Name.IncomingChangesMenuItemMergeKeepingWorkspaceChanges)));
  149. string diffYoursWithIncomingText = UnityMenuItem.EscapedText(
  150. PlasticLocalization.GetString(PlasticLocalization.
  151. Name.IncomingChangesMenuItemDiffYoursWithIncoming));
  152. string diffIncomingChangesText = UnityMenuItem.EscapedText(
  153. PlasticLocalization.GetString(PlasticLocalization.
  154. Name.IncomingChangesMenuItemDiffIncomingChanges));
  155. mDiffYoursWithIncomingMenuItemContent = new GUIContent(
  156. diffYoursWithIncomingText);
  157. mDiffIncomingChangesMenuItemContent = new GUIContent(
  158. diffIncomingChangesText);
  159. mDiffMetaYoursWithIncomingMenuItemContent = new GUIContent(
  160. string.Format(
  161. "{0}/{1}",
  162. MetaPath.META_EXTENSION,
  163. diffYoursWithIncomingText));
  164. mDiffMetaIncomingChangesMenuItemContent = new GUIContent(
  165. string.Format(
  166. "{0}/{1}",
  167. MetaPath.META_EXTENSION,
  168. diffIncomingChangesText));
  169. }
  170. GUIContent mNoActionMenuItemContent;
  171. GUIContent mMergeSelectedFilesMenuItemContent;
  172. GUIContent mMergeKeepingSourceChangesMenuItemContent;
  173. GUIContent mMergeKeepingWorkspaceChangesMenuItemContent;
  174. GUIContent mDiffYoursWithIncomingMenuItemContent;
  175. GUIContent mDiffIncomingChangesMenuItemContent;
  176. GUIContent mDiffMetaYoursWithIncomingMenuItemContent;
  177. GUIContent mDiffMetaIncomingChangesMenuItemContent;
  178. readonly IIncomingChangesViewMenuOperations mIncomingChangesViewMenuOperations;
  179. readonly IMetaMenuOperations mIncomingChangesMetaMenuOperations;
  180. }
  181. }