暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

PendingChangesSelection.cs 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Linq;
  4. using Codice.Client.BaseCommands;
  5. using Codice.Client.Commands;
  6. using Codice.CM.Common;
  7. using PlasticGui;
  8. using PlasticGui.WorkspaceWindow.PendingChanges;
  9. using PlasticGui.WorkspaceWindow.PendingChanges.Changelists;
  10. namespace Unity.PlasticSCM.Editor.Views.PendingChanges
  11. {
  12. internal static class PendingChangesSelection
  13. {
  14. internal static void SelectChanges(
  15. PendingChangesTreeView treeView,
  16. List<ChangeInfo> changesToSelect)
  17. {
  18. if (changesToSelect == null || changesToSelect.Count == 0)
  19. {
  20. treeView.SelectFirstPendingChangeOnTree();
  21. return;
  22. }
  23. treeView.SelectPreviouslySelectedPendingChanges(changesToSelect);
  24. if (treeView.HasSelection())
  25. return;
  26. treeView.SelectFirstPendingChangeOnTree();
  27. }
  28. internal static List<string> GetSelectedPathsWithoutMeta(
  29. PendingChangesTreeView treeView)
  30. {
  31. return treeView.GetSelectedChanges(false)
  32. .Select(change => change.GetFullPath()).ToList();
  33. }
  34. internal static List<string> GetSelectedPaths(
  35. PendingChangesTreeView treeView)
  36. {
  37. return treeView.GetSelectedChanges(true)
  38. .Select(change => change.GetFullPath()).ToList();
  39. }
  40. internal static List<string> GetSelectedMetaPaths(
  41. PendingChangesTreeView treeView)
  42. {
  43. List<string> result = new List<string>();
  44. foreach (ChangeInfo change in GetSelectedChanges(treeView))
  45. {
  46. string path = change.GetFullPath();
  47. if (!MetaPath.IsMetaPath(path))
  48. continue;
  49. result.Add(path);
  50. }
  51. return result;
  52. }
  53. internal static List<ChangeInfo> GetAllChanges(
  54. PendingChangesTreeView treeView)
  55. {
  56. return treeView.GetAllChanges();
  57. }
  58. internal static List<ChangeInfo> GetChangesToFocus(
  59. PendingChangesTreeView treeView)
  60. {
  61. List<ChangeInfo> selectedChanges = treeView.GetSelectedChanges(true);
  62. if (selectedChanges.Count == 0)
  63. return selectedChanges;
  64. List<ChangeInfo> changesToFocus =
  65. selectedChanges.Where(change => !IsAddedFile(change)).ToList();
  66. if (changesToFocus.Count() == 0)
  67. {
  68. ChangeInfo nearestAddedChange = treeView.GetNearestAddedChange();
  69. if (nearestAddedChange != null)
  70. changesToFocus.Add(nearestAddedChange);
  71. }
  72. return changesToFocus;
  73. }
  74. internal static SelectedChangesGroupInfo GetSelectedChangesGroupInfo(
  75. string wkPath, PendingChangesTreeView treeView)
  76. {
  77. return SelectedChangesGroupInfo.BuildFromChangeInfos(
  78. wkPath,
  79. treeView.GetSelectedChanges(false),
  80. GetInvolvedChangelists(treeView.GetSelectedPendingChangeInfos()));
  81. }
  82. internal static List<ChangeInfo> GetSelectedChanges(
  83. PendingChangesTreeView treeView)
  84. {
  85. return treeView.GetSelectedChanges(true);
  86. }
  87. internal static List<ChangeListInfo> GetSelectedChangeListInfos(
  88. PendingChangesTreeView treeView)
  89. {
  90. List<ChangeListInfo> result = new List<ChangeListInfo>();
  91. List<ChangelistNode> nodes = treeView.GetSelectedChangelistNodes();
  92. foreach (ChangelistNode node in nodes)
  93. result.Add(node.ChangelistInfo);
  94. return result;
  95. }
  96. internal static ChangeListInfo GetSelectedChangeListInfo(
  97. PendingChangesTreeView treeView)
  98. {
  99. List<ChangeListInfo> changeListInfos = GetSelectedChangeListInfos(treeView);
  100. if (changeListInfos.Count == 0)
  101. return null;
  102. return changeListInfos[0];
  103. }
  104. internal static List<ChangelistNode> GetSelectedChangelistNodes(
  105. PendingChangesTreeView treeView)
  106. {
  107. return treeView.GetSelectedChangelistNodes();
  108. }
  109. internal static ChangeInfo GetSelectedChange(
  110. PendingChangesTreeView treeView)
  111. {
  112. return treeView.GetSelectedRow();
  113. }
  114. static List<ChangeListInfo> GetInvolvedChangelists(List<PendingChangeInfo> changes)
  115. {
  116. List<ChangeListInfo> result = new List<ChangeListInfo>();
  117. foreach (PendingChangeInfo pendingChangeInfo in changes)
  118. {
  119. ChangelistNode changelistNode = GetChangelistAncestor.ForNode(pendingChangeInfo);
  120. if (changelistNode == null)
  121. continue;
  122. result.Add(changelistNode.ChangelistInfo);
  123. }
  124. return result;
  125. }
  126. static bool IsAddedFile(ChangeInfo change)
  127. {
  128. return ChangeTypesClassifier.IsInAddedCategory(change.ChangeTypes)
  129. && !(Directory.Exists(change.Path) || File.Exists(change.Path));
  130. }
  131. }
  132. }