163 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			163 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using UnityEditor; | ||
|  | using UnityEngine; | ||
|  | 
 | ||
|  | using PlasticGui; | ||
|  | using PlasticGui.WorkspaceWindow.QueryViews.Shelves; | ||
|  | using Unity.PlasticSCM.Editor.UI; | ||
|  | 
 | ||
|  | namespace Unity.PlasticSCM.Editor.Views.Shelves | ||
|  | { | ||
|  |     internal class ShelvesViewMenu | ||
|  |     { | ||
|  |         internal GenericMenu Menu { get { return mMenu; } } | ||
|  | 
 | ||
|  |         internal ShelvesViewMenu(IShelveMenuOperations shelveMenuOperations) | ||
|  |         { | ||
|  |             mShelveMenuOperations = shelveMenuOperations; | ||
|  | 
 | ||
|  |             BuildComponents(); | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void Popup() | ||
|  |         { | ||
|  |             mMenu = new GenericMenu(); | ||
|  | 
 | ||
|  |             UpdateMenuItems(mMenu); | ||
|  | 
 | ||
|  |             mMenu.ShowAsContext(); | ||
|  |         } | ||
|  | 
 | ||
|  |         internal bool ProcessKeyActionIfNeeded(Event e) | ||
|  |         { | ||
|  |             ShelveMenuOperations operationToExecute = GetMenuOperations(e); | ||
|  | 
 | ||
|  |             if (operationToExecute == ShelveMenuOperations.None) | ||
|  |                 return false; | ||
|  | 
 | ||
|  |             ShelveMenuOperations operations = ShelveMenuUpdater.GetAvailableMenuOperations( | ||
|  |                 mShelveMenuOperations.GetSelectedShelvesCount()); | ||
|  | 
 | ||
|  |             if (!operations.HasFlag(operationToExecute)) | ||
|  |                 return false; | ||
|  | 
 | ||
|  |             ProcessMenuOperation(operationToExecute); | ||
|  |             return true; | ||
|  |         } | ||
|  | 
 | ||
|  |         void ApplyShelveInWorkspace_Click() | ||
|  |         { | ||
|  |             mShelveMenuOperations.ApplyShelveInWorkspace(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DeleteShelve_Click() | ||
|  |         { | ||
|  |             mShelveMenuOperations.DeleteShelve(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void OpenShelveInNewWindow_Click() | ||
|  |         { | ||
|  |             mShelveMenuOperations.OpenSelectedShelveInNewWindow(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void UpdateMenuItems(GenericMenu menu) | ||
|  |         { | ||
|  |             ShelveMenuOperations operations = ShelveMenuUpdater.GetAvailableMenuOperations( | ||
|  |                 mShelveMenuOperations.GetSelectedShelvesCount()); | ||
|  | 
 | ||
|  |             AddShelveMenuItem( | ||
|  |                 mApplyShelveInWorkspaceMenuItemContent, | ||
|  |                 menu, | ||
|  |                 operations, | ||
|  |                 ShelveMenuOperations.ApplyShelveInWorkspace, | ||
|  |                 ApplyShelveInWorkspace_Click); | ||
|  | 
 | ||
|  |             AddShelveMenuItem( | ||
|  |                 mDeleteShelveMenuItemContent, | ||
|  |                 menu, | ||
|  |                 operations, | ||
|  |                 ShelveMenuOperations.Delete, | ||
|  |                 DeleteShelve_Click); | ||
|  | 
 | ||
|  |             menu.AddSeparator(string.Empty); | ||
|  | 
 | ||
|  |             AddShelveMenuItem( | ||
|  |                 mOpenShelveInNewWindowMenuItemContent, | ||
|  |                 menu, | ||
|  |                 operations, | ||
|  |                 ShelveMenuOperations.ViewShelve, | ||
|  |                 OpenShelveInNewWindow_Click); | ||
|  |         } | ||
|  | 
 | ||
|  |         void ProcessMenuOperation( | ||
|  |             ShelveMenuOperations operationToExecute) | ||
|  |         { | ||
|  |             if (operationToExecute == ShelveMenuOperations.ApplyShelveInWorkspace) | ||
|  |             { | ||
|  |                 ApplyShelveInWorkspace_Click(); | ||
|  |                 return; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (operationToExecute == ShelveMenuOperations.Delete) | ||
|  |             { | ||
|  |                 DeleteShelve_Click(); | ||
|  |                 return; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (operationToExecute == ShelveMenuOperations.ViewShelve) | ||
|  |             { | ||
|  |                 OpenShelveInNewWindow_Click(); | ||
|  |                 return; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         static void AddShelveMenuItem( | ||
|  |             GUIContent menuItemContent, | ||
|  |             GenericMenu menu, | ||
|  |             ShelveMenuOperations operations, | ||
|  |             ShelveMenuOperations operationsToCheck, | ||
|  |             GenericMenu.MenuFunction menuFunction) | ||
|  |         { | ||
|  |             if (operations.HasFlag(operationsToCheck)) | ||
|  |             { | ||
|  |                 menu.AddItem( | ||
|  |                     menuItemContent, | ||
|  |                     false, | ||
|  |                     menuFunction); | ||
|  | 
 | ||
|  |                 return; | ||
|  |             } | ||
|  | 
 | ||
|  |             menu.AddDisabledItem(menuItemContent); | ||
|  |         } | ||
|  | 
 | ||
|  |         static ShelveMenuOperations GetMenuOperations( Event e) | ||
|  |         { | ||
|  |             if (Keyboard.IsKeyPressed(e, KeyCode.Delete)) | ||
|  |                 return ShelveMenuOperations.Delete; | ||
|  | 
 | ||
|  |             return ShelveMenuOperations.None; | ||
|  |         } | ||
|  | 
 | ||
|  |         void BuildComponents() | ||
|  |         { | ||
|  |             mApplyShelveInWorkspaceMenuItemContent = new GUIContent( | ||
|  |                 PlasticLocalization.Name.ShelveMenuItemApplyShelveInWorkspace.GetString()); | ||
|  | 
 | ||
|  |             mDeleteShelveMenuItemContent = new GUIContent(string.Format("{0} {1}", | ||
|  |                 PlasticLocalization.Name.ShelveMenuItemDeleteShelve.GetString(), | ||
|  |                 GetPlasticShortcut.ForDelete())); | ||
|  | 
 | ||
|  |             mOpenShelveInNewWindowMenuItemContent = new GUIContent( | ||
|  |                 PlasticLocalization.Name.ShelveMenuItemOpenShelveInNewWindow.GetString()); | ||
|  |         } | ||
|  | 
 | ||
|  |         GenericMenu mMenu; | ||
|  | 
 | ||
|  |         GUIContent mApplyShelveInWorkspaceMenuItemContent; | ||
|  |         GUIContent mDeleteShelveMenuItemContent; | ||
|  |         GUIContent mOpenShelveInNewWindowMenuItemContent; | ||
|  | 
 | ||
|  |         readonly IShelveMenuOperations mShelveMenuOperations; | ||
|  |     } | ||
|  | } |