123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
-
- using Codice.Client.BaseCommands;
- using Codice.Client.Commands;
- using Codice.CM.Common;
- using PlasticGui;
- using PlasticGui.WorkspaceWindow.PendingChanges;
- using PlasticGui.WorkspaceWindow.PendingChanges.Changelists;
-
- 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<string> result = new List<string>();
-
- foreach (ChangeInfo change in GetSelectedChanges(treeView))
- {
- 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(
- string wkPath, PendingChangesTreeView treeView)
- {
- return SelectedChangesGroupInfo.BuildFromChangeInfos(
- wkPath,
- treeView.GetSelectedChanges(false),
- GetInvolvedChangelists(treeView.GetSelectedPendingChangeInfos()));
- }
-
- internal static List<ChangeInfo> GetSelectedChanges(
- PendingChangesTreeView treeView)
- {
- return treeView.GetSelectedChanges(true);
- }
-
- internal static List<ChangeListInfo> GetSelectedChangeListInfos(
- PendingChangesTreeView treeView)
- {
- List<ChangeListInfo> result = new List<ChangeListInfo>();
- List<ChangelistNode> nodes = treeView.GetSelectedChangelistNodes();
-
- foreach (ChangelistNode node in nodes)
- result.Add(node.ChangelistInfo);
-
- return result;
- }
-
- internal static ChangeListInfo GetSelectedChangeListInfo(
- PendingChangesTreeView treeView)
- {
- List<ChangeListInfo> changeListInfos = GetSelectedChangeListInfos(treeView);
-
- if (changeListInfos.Count == 0)
- return null;
-
- return changeListInfos[0];
- }
-
- internal static List<ChangelistNode> GetSelectedChangelistNodes(
- PendingChangesTreeView treeView)
- {
- return treeView.GetSelectedChangelistNodes();
- }
-
- internal static ChangeInfo GetSelectedChange(
- PendingChangesTreeView treeView)
- {
- return treeView.GetSelectedRow();
- }
-
- static List<ChangeListInfo> GetInvolvedChangelists(List<PendingChangeInfo> changes)
- {
- List<ChangeListInfo> result = new List<ChangeListInfo>();
-
- foreach (PendingChangeInfo pendingChangeInfo in changes)
- {
- ChangelistNode changelistNode = GetChangelistAncestor.ForNode(pendingChangeInfo);
-
- if (changelistNode == null)
- continue;
-
- result.Add(changelistNode.ChangelistInfo);
- }
-
- return result;
- }
-
- static bool IsAddedFile(ChangeInfo change)
- {
- return ChangeTypesClassifier.IsInAddedCategory(change.ChangeTypes)
- && !(Directory.Exists(change.Path) || File.Exists(change.Path));
- }
- }
- }
|