A game about forced loneliness, made by TACStudios
at master 138 lines 4.8 kB view raw
1using System.Collections.Generic; 2 3using UnityEngine; 4 5using Codice.CM.Common; 6using PlasticGui; 7using PlasticGui.WorkspaceWindow.Open; 8using PlasticGui.WorkspaceWindow.PendingChanges; 9using PlasticGui.WorkspaceWindow.PendingChanges.Changelists; 10using Unity.PlasticSCM.Editor.Views.PendingChanges.Changelists; 11 12namespace Unity.PlasticSCM.Editor.Views.PendingChanges 13{ 14 internal class PendingChangesViewMenu 15 { 16 internal interface IGetSelectedNodes 17 { 18 List<IPlasticTreeNode> GetSelectedNodes(); 19 } 20 21 internal PendingChangesViewMenu( 22 WorkspaceInfo wkInfo, 23 IPendingChangesMenuOperations pendingChangesViewOperations, 24 IFilesFilterPatternsMenuOperations filterMenuOperations, 25 IOpenMenuOperations openMenuOperations, 26 PendingChangesViewPendingChangeMenu.IMetaMenuOperations metaMenuOperations, 27 PendingChangesViewPendingChangeMenu.IAdvancedUndoMenuOperations advancedUndoMenuOperations, 28 IChangelistMenuOperations changelistMenuOperations, 29 IGetSelectedNodes getSelectedNodes, 30 bool isGluonMode) 31 { 32 mWkInfo = wkInfo; 33 mPendingChangesViewOperations = pendingChangesViewOperations; 34 mFilterMenuOperations = filterMenuOperations; 35 mOpenMenuOperations = openMenuOperations; 36 mMetaMenuOperations = metaMenuOperations; 37 mAdvancedUndoMenuOperations = advancedUndoMenuOperations; 38 mChangelistMenuOperations = changelistMenuOperations; 39 mGetSelectedNodes = getSelectedNodes; 40 mIsGluonMode = isGluonMode; 41 } 42 43 internal void Popup() 44 { 45 List<IPlasticTreeNode> selectedNodes = mGetSelectedNodes.GetSelectedNodes(); 46 47 if (AreAllChangelists(selectedNodes)) 48 { 49 GetChangelistMenu().Popup(); 50 return; 51 } 52 53 if (AreAllPendingChanges(selectedNodes)) 54 { 55 GetPendingChangeMenu().Popup(); 56 return; 57 } 58 } 59 60 internal bool ProcessKeyActionIfNeeded(Event e) 61 { 62 List<IPlasticTreeNode> selectedNodes = mGetSelectedNodes.GetSelectedNodes(); 63 64 if (AreAllChangelists(selectedNodes)) 65 { 66 return GetChangelistMenu().ProcessKeyActionIfNeeded(e); 67 } 68 69 if (AreAllPendingChanges(selectedNodes)) 70 { 71 return GetPendingChangeMenu().ProcessKeyActionIfNeeded(e); 72 } 73 74 return false; 75 } 76 77 PendingChangesViewPendingChangeMenu GetPendingChangeMenu() 78 { 79 if (mPendingChangeMenu == null) 80 { 81 mPendingChangeMenu = new PendingChangesViewPendingChangeMenu( 82 mWkInfo, 83 mPendingChangesViewOperations, 84 mChangelistMenuOperations, 85 mOpenMenuOperations, 86 mMetaMenuOperations, 87 mAdvancedUndoMenuOperations, 88 mFilterMenuOperations, 89 mIsGluonMode); 90 } 91 92 return mPendingChangeMenu; 93 } 94 95 ChangelistMenu GetChangelistMenu() 96 { 97 if (mChangelistMenu == null) 98 mChangelistMenu = new ChangelistMenu( 99 mChangelistMenuOperations, 100 mIsGluonMode); 101 102 return mChangelistMenu; 103 } 104 105 static bool AreAllChangelists(List<IPlasticTreeNode> selectedNodes) 106 { 107 foreach (IPlasticTreeNode node in selectedNodes) 108 { 109 if (!(node is ChangelistNode)) 110 return false; 111 } 112 return true; 113 } 114 115 static bool AreAllPendingChanges(List<IPlasticTreeNode> selectedNodes) 116 { 117 foreach (IPlasticTreeNode node in selectedNodes) 118 { 119 if (!(node is PendingChangeInfo)) 120 return false; 121 } 122 return true; 123 } 124 125 PendingChangesViewPendingChangeMenu mPendingChangeMenu; 126 ChangelistMenu mChangelistMenu; 127 128 readonly WorkspaceInfo mWkInfo; 129 readonly IPendingChangesMenuOperations mPendingChangesViewOperations; 130 readonly IFilesFilterPatternsMenuOperations mFilterMenuOperations; 131 readonly IOpenMenuOperations mOpenMenuOperations; 132 readonly PendingChangesViewPendingChangeMenu.IMetaMenuOperations mMetaMenuOperations; 133 readonly PendingChangesViewPendingChangeMenu.IAdvancedUndoMenuOperations mAdvancedUndoMenuOperations; 134 readonly IChangelistMenuOperations mChangelistMenuOperations; 135 readonly IGetSelectedNodes mGetSelectedNodes; 136 readonly bool mIsGluonMode; 137 } 138}