ChangesetsViewMenu.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. using UnityEditor;
  2. using UnityEngine;
  3. using Codice.CM.Common;
  4. using PlasticGui.WorkspaceWindow.QueryViews.Changesets;
  5. using PlasticGui;
  6. using Unity.PlasticSCM.Editor.Tool;
  7. namespace Unity.PlasticSCM.Editor.Views.Changesets
  8. {
  9. internal class ChangesetsViewMenu
  10. {
  11. internal interface IMenuOperations
  12. {
  13. void DiffBranch();
  14. ChangesetExtendedInfo GetSelectedChangeset();
  15. }
  16. internal ChangesetsViewMenu(
  17. IChangesetMenuOperations changesetMenuOperations,
  18. IMenuOperations menuOperations,
  19. bool isGluonMode)
  20. {
  21. mChangesetMenuOperations = changesetMenuOperations;
  22. mMenuOperations = menuOperations;
  23. mIsGluonMode = isGluonMode;
  24. BuildComponents();
  25. }
  26. internal void Popup()
  27. {
  28. GenericMenu menu = new GenericMenu();
  29. UpdateMenuItems(menu);
  30. menu.ShowAsContext();
  31. }
  32. void DiffChangesetMenuItem_Click()
  33. {
  34. if (LaunchTool.ShowDownloadPlasticExeWindow(mIsGluonMode))
  35. return;
  36. mChangesetMenuOperations.DiffChangeset();
  37. }
  38. void DiffSelectedChangesetsMenuItem_Click()
  39. {
  40. if (LaunchTool.ShowDownloadPlasticExeWindow(mIsGluonMode))
  41. return;
  42. mChangesetMenuOperations.DiffSelectedChangesets();
  43. }
  44. void DiffBranchMenuItem_Click()
  45. {
  46. mMenuOperations.DiffBranch();
  47. }
  48. void UpdateMenuItems(GenericMenu menu)
  49. {
  50. ChangesetExtendedInfo singleSeletedChangeset = mMenuOperations.GetSelectedChangeset();
  51. ChangesetMenuOperations operations = ChangesetMenuUpdater.GetAvailableMenuOperations(
  52. mChangesetMenuOperations.GetSelectedChangesetsCount());
  53. AddDiffChangesetMenuItem(
  54. mDiffChangesetMenuItemContent,
  55. menu,
  56. singleSeletedChangeset,
  57. operations,
  58. DiffChangesetMenuItem_Click);
  59. AddDiffSelectedChangesetsMenuItem(
  60. mDiffSelectedChangesetsMenuItemContent,
  61. menu,
  62. operations,
  63. DiffSelectedChangesetsMenuItem_Click);
  64. if (IsOnMainBranch(singleSeletedChangeset))
  65. return;
  66. menu.AddSeparator(string.Empty);
  67. AddDiffBranchMenuItem(
  68. mDiffBranchMenuItemContent,
  69. menu,
  70. singleSeletedChangeset,
  71. operations,
  72. DiffBranchMenuItem_Click);
  73. }
  74. static void AddDiffChangesetMenuItem(
  75. GUIContent menuItemContent,
  76. GenericMenu menu,
  77. ChangesetExtendedInfo changeset,
  78. ChangesetMenuOperations operations,
  79. GenericMenu.MenuFunction menuFunction)
  80. {
  81. string changesetName =
  82. changeset != null ?
  83. changeset.ChangesetId.ToString() :
  84. string.Empty;
  85. menuItemContent.text =
  86. PlasticLocalization.GetString(PlasticLocalization.Name.AnnotateDiffChangesetMenuItem,
  87. changesetName);
  88. if (operations.HasFlag(ChangesetMenuOperations.DiffChangeset))
  89. {
  90. menu.AddItem(
  91. menuItemContent,
  92. false,
  93. menuFunction);
  94. return;
  95. }
  96. menu.AddDisabledItem(
  97. menuItemContent);
  98. }
  99. static void AddDiffSelectedChangesetsMenuItem(
  100. GUIContent menuItemContent,
  101. GenericMenu menu,
  102. ChangesetMenuOperations operations,
  103. GenericMenu.MenuFunction menuFunction)
  104. {
  105. if (operations.HasFlag(ChangesetMenuOperations.DiffSelectedChangesets))
  106. {
  107. menu.AddItem(
  108. menuItemContent,
  109. false,
  110. menuFunction);
  111. return;
  112. }
  113. menu.AddDisabledItem(menuItemContent);
  114. }
  115. static void AddDiffBranchMenuItem(
  116. GUIContent menuItemContent,
  117. GenericMenu menu,
  118. ChangesetExtendedInfo changeset,
  119. ChangesetMenuOperations operations,
  120. GenericMenu.MenuFunction menuFunction)
  121. {
  122. string branchName = GetBranchName(changeset);
  123. menuItemContent.text =
  124. PlasticLocalization.GetString(PlasticLocalization.Name.AnnotateDiffBranchMenuItem,
  125. branchName);
  126. if (operations.HasFlag(ChangesetMenuOperations.DiffChangeset))
  127. {
  128. menu.AddItem(
  129. menuItemContent,
  130. false,
  131. menuFunction);
  132. return;
  133. }
  134. menu.AddDisabledItem(
  135. menuItemContent);
  136. }
  137. void BuildComponents()
  138. {
  139. mDiffChangesetMenuItemContent = new GUIContent();
  140. mDiffSelectedChangesetsMenuItemContent = new GUIContent(
  141. PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemDiffSelected));
  142. mDiffBranchMenuItemContent = new GUIContent();
  143. }
  144. static string GetBranchName(ChangesetExtendedInfo changesetInfo)
  145. {
  146. if (changesetInfo == null)
  147. return string.Empty;
  148. string branchName = changesetInfo.BranchName;
  149. int lastIndex = changesetInfo.BranchName.LastIndexOf("/");
  150. if (lastIndex == -1)
  151. return branchName;
  152. return branchName.Substring(lastIndex + 1);
  153. }
  154. static bool IsOnMainBranch(ChangesetExtendedInfo singleSeletedChangeset)
  155. {
  156. if (singleSeletedChangeset == null)
  157. return false;
  158. return singleSeletedChangeset.BranchName == MAIN_BRANCH_NAME;
  159. }
  160. GUIContent mDiffChangesetMenuItemContent;
  161. GUIContent mDiffSelectedChangesetsMenuItemContent;
  162. GUIContent mDiffBranchMenuItemContent;
  163. readonly IChangesetMenuOperations mChangesetMenuOperations;
  164. readonly IMenuOperations mMenuOperations;
  165. readonly bool mIsGluonMode;
  166. const string MAIN_BRANCH_NAME = "/main";
  167. }
  168. }