PendingChangesSelection.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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 PlasticGui.WorkspaceWindow.Diff;
  7. using PlasticGui.WorkspaceWindow.PendingChanges;
  8. namespace Unity.PlasticSCM.Editor.Views.PendingChanges
  9. {
  10. internal static class PendingChangesSelection
  11. {
  12. internal static void SelectChanges(
  13. PendingChangesTreeView treeView,
  14. List<ChangeInfo> changesToSelect)
  15. {
  16. if (changesToSelect == null || changesToSelect.Count == 0)
  17. {
  18. treeView.SelectFirstPendingChangeOnTree();
  19. return;
  20. }
  21. treeView.SelectPreviouslySelectedPendingChanges(changesToSelect);
  22. if (treeView.HasSelection())
  23. return;
  24. treeView.SelectFirstPendingChangeOnTree();
  25. }
  26. internal static List<string> GetSelectedPathsWithoutMeta(
  27. PendingChangesTreeView treeView)
  28. {
  29. return treeView.GetSelectedChanges(false)
  30. .Select(change => change.GetFullPath()).ToList();
  31. }
  32. internal static List<string> GetSelectedPaths(
  33. PendingChangesTreeView treeView)
  34. {
  35. return treeView.GetSelectedChanges(true)
  36. .Select(change => change.GetFullPath()).ToList();
  37. }
  38. internal static List<string> GetSelectedMetaPaths(
  39. PendingChangesTreeView treeView)
  40. {
  41. List<ChangeInfo> selectedChanges = PendingChangesSelection
  42. .GetSelectedChanges(treeView);
  43. List<string> result = new List<string>();
  44. foreach (ChangeInfo change in selectedChanges)
  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. PendingChangesTreeView treeView)
  76. {
  77. SelectedChangesGroupInfo result = treeView.GetSelectedChangesGroupInfo();
  78. result.IsApplicableDiffWorkspaceContent = IsApplicableDiffWorkspaceContent(treeView);
  79. return result;
  80. }
  81. internal static List<ChangeInfo> GetSelectedChanges(
  82. PendingChangesTreeView treeView)
  83. {
  84. return treeView.GetSelectedChanges(true);
  85. }
  86. internal static ChangeInfo GetSelectedChange(
  87. PendingChangesTreeView treeView)
  88. {
  89. return treeView.GetSelectedRow();
  90. }
  91. static bool IsApplicableDiffWorkspaceContent(
  92. PendingChangesTreeView treeView)
  93. {
  94. ChangeInfo selectedRow = GetSelectedChange(treeView);
  95. if (selectedRow == null)
  96. return false;
  97. return DiffOperation.IsApplicableDiffWorkspaceContent(selectedRow);
  98. }
  99. static bool IsAddedFile(ChangeInfo change)
  100. {
  101. return ChangeTypesClassifier.IsInAddedCategory(change.ChangeTypes)
  102. && !(Directory.Exists(change.Path) || File.Exists(change.Path));
  103. }
  104. }
  105. }