123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- using System;
-
- using UnityEditor.VersionControl;
-
- using Codice;
- using Codice.Client.Commands.WkTree;
- using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
- using Unity.PlasticSCM.Editor.AssetsOverlays;
- using Unity.PlasticSCM.Editor.AssetUtils;
-
- namespace Unity.PlasticSCM.Editor.AssetMenu
- {
- [Flags]
- internal enum AssetMenuOperations : byte
- {
- None = 0,
- Checkout = 1 << 0,
- Diff = 1 << 1,
- History = 1 << 2,
- Add = 1 << 3,
- Checkin = 1 << 4,
- Undo = 1 << 5,
- }
-
- internal class SelectedAssetGroupInfo
- {
- internal int SelectedCount;
-
- internal bool IsControlledSelection;
- internal bool IsCheckedInSelection;
- internal bool IsCheckedOutSelection;
- internal bool IsPrivateSelection;
- internal bool IsAddedSelection;
- internal bool IsFileSelection;
- internal bool HasAnyAddedInSelection;
- internal bool HasAnyRemoteLockedInSelection;
-
- internal static SelectedAssetGroupInfo BuildFromAssetList(
- string wkPath,
- AssetList assetList,
- IAssetStatusCache statusCache)
- {
- bool isCheckedInSelection = true;
- bool isControlledSelection = true;
- bool isCheckedOutSelection = true;
- bool isPrivateSelection = true;
- bool isAddedSelection = true;
- bool isFileSelection = true;
- bool hasAnyAddedInSelection = false;
- bool hasAnyRemoteLockedInSelection = false;
-
- int selectedCount = 0;
-
- foreach (Asset asset in assetList)
- {
- string fullPath = AssetsPath.GetFullPathUnderWorkspace.
- ForAsset(wkPath, asset.path);
-
- if (fullPath == null)
- continue;
-
- SelectedAssetGroupInfo singleFileGroupInfo = BuildFromSingleFile(
- fullPath, asset.isFolder, statusCache);
-
- if (!singleFileGroupInfo.IsCheckedInSelection)
- isCheckedInSelection = false;
-
- if (!singleFileGroupInfo.IsControlledSelection)
- isControlledSelection = false;
-
- if (!singleFileGroupInfo.IsCheckedOutSelection)
- isCheckedOutSelection = false;
-
- if (!singleFileGroupInfo.IsPrivateSelection)
- isPrivateSelection = false;
-
- if (!singleFileGroupInfo.IsAddedSelection)
- isAddedSelection = false;
-
- if (!singleFileGroupInfo.IsFileSelection)
- isFileSelection = false;
-
- if (singleFileGroupInfo.HasAnyAddedInSelection)
- hasAnyAddedInSelection = true;
-
- if (singleFileGroupInfo.HasAnyRemoteLockedInSelection)
- hasAnyRemoteLockedInSelection = true;
-
- selectedCount++;
- }
-
- return new SelectedAssetGroupInfo()
- {
- IsCheckedInSelection = isCheckedInSelection,
- IsCheckedOutSelection = isCheckedOutSelection,
- IsControlledSelection = isControlledSelection,
- IsPrivateSelection = isPrivateSelection,
- IsAddedSelection = isAddedSelection,
- IsFileSelection = isFileSelection,
- HasAnyAddedInSelection = hasAnyAddedInSelection,
- HasAnyRemoteLockedInSelection = hasAnyRemoteLockedInSelection,
- SelectedCount = selectedCount,
- };
- }
-
- internal static SelectedAssetGroupInfo BuildFromSingleFile(
- string fullPath,
- bool isDirectory,
- IAssetStatusCache statusCache)
- {
- bool isCheckedInSelection = true;
- bool isControlledSelection = true;
- bool isCheckedOutSelection = true;
- bool isPrivateSelection = true;
- bool isAddedSelection = true;
- bool isFileSelection = true;
- bool hasAnyAddedInSelection = false;
- bool hasAnyRemoteLockedInSelection = false;
-
- WorkspaceTreeNode wkTreeNode =
- PlasticGui.Plastic.API.GetWorkspaceTreeNode(fullPath);
-
- if (isDirectory)
- isFileSelection = false;
-
- if (CheckWorkspaceTreeNodeStatus.IsPrivate(wkTreeNode))
- isControlledSelection = false;
- else
- isPrivateSelection = false;
-
- if (CheckWorkspaceTreeNodeStatus.IsCheckedOut(wkTreeNode))
- isCheckedInSelection = false;
- else
- isCheckedOutSelection = false;
-
- if (CheckWorkspaceTreeNodeStatus.IsAdded(wkTreeNode))
- hasAnyAddedInSelection = true;
- else
- isAddedSelection = false;
-
- AssetStatus assetStatus = statusCache.GetStatus(fullPath);
-
- if (ClassifyAssetStatus.IsLockedRemote(assetStatus))
- hasAnyRemoteLockedInSelection = true;
-
- return new SelectedAssetGroupInfo()
- {
- IsCheckedInSelection = isCheckedInSelection,
- IsCheckedOutSelection = isCheckedOutSelection,
- IsControlledSelection = isControlledSelection,
- IsPrivateSelection = isPrivateSelection,
- IsAddedSelection = isAddedSelection,
- IsFileSelection = isFileSelection,
- HasAnyAddedInSelection = hasAnyAddedInSelection,
- HasAnyRemoteLockedInSelection = hasAnyRemoteLockedInSelection,
- SelectedCount = 1,
- };
- }
- }
-
- internal interface IAssetMenuOperations
- {
- void ShowPendingChanges();
- void Add();
- void Checkout();
- void Checkin();
- void Undo();
- void ShowDiff();
- void ShowHistory();
- }
-
- internal static class AssetMenuUpdater
- {
- internal static AssetMenuOperations GetAvailableMenuOperations(
- SelectedAssetGroupInfo info)
- {
- AssetMenuOperations result = AssetMenuOperations.None;
-
- if (info.SelectedCount == 0)
- {
- return result;
- }
-
- if (info.IsControlledSelection &&
- info.IsCheckedInSelection &&
- info.IsFileSelection &&
- !info.HasAnyRemoteLockedInSelection)
- {
- result |= AssetMenuOperations.Checkout;
- }
-
- if (info.IsFileSelection &&
- info.IsPrivateSelection)
- {
- result |= AssetMenuOperations.Add;
- }
-
- if (info.IsFileSelection &&
- info.IsControlledSelection &&
- info.IsCheckedOutSelection)
- {
- result |= AssetMenuOperations.Checkin;
- result |= AssetMenuOperations.Undo;
- }
-
- if (info.SelectedCount == 1 &&
- info.IsControlledSelection &&
- !info.HasAnyAddedInSelection &&
- info.IsFileSelection)
- {
- result |= AssetMenuOperations.Diff;
- }
-
- if (info.SelectedCount == 1 &&
- info.IsControlledSelection &&
- !info.HasAnyAddedInSelection)
- {
- result |= AssetMenuOperations.History;
- }
-
- return result;
- }
- }
- }
|