- 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));
- }
- }
- }