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