277 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			277 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using UnityEditor;
 | |
| using UnityEngine;
 | |
| 
 | |
| using PlasticGui;
 | |
| using PlasticGui.WorkspaceWindow.QueryViews.Labels;
 | |
| using Unity.PlasticSCM.Editor.UI;
 | |
| 
 | |
| namespace Unity.PlasticSCM.Editor.Views.Labels
 | |
| {
 | |
|     internal class LabelsViewMenu
 | |
|     {
 | |
|         internal GenericMenu Menu { get { return mMenu; } }
 | |
| 
 | |
|         internal LabelsViewMenu(ILabelMenuOperations labelMenuOperations)
 | |
|         {
 | |
|             mLabelMenuOperations = labelMenuOperations;
 | |
| 
 | |
|             BuildComponents();
 | |
|         }
 | |
| 
 | |
|         internal void Popup()
 | |
|         {
 | |
|             mMenu = new GenericMenu();
 | |
| 
 | |
|             UpdateMenuItems(mMenu);
 | |
| 
 | |
|             mMenu.ShowAsContext();
 | |
|         }
 | |
| 
 | |
|         internal bool ProcessKeyActionIfNeeded(Event e)
 | |
|         {
 | |
|             LabelMenuOperations operationToExecute = GetMenuOperations(e);
 | |
| 
 | |
|             if (operationToExecute == LabelMenuOperations.None)
 | |
|                 return false;
 | |
| 
 | |
|             LabelMenuOperations operations = LabelMenuUpdater.GetAvailableMenuOperations(
 | |
|                 mLabelMenuOperations.GetSelectedLabelsCount(),
 | |
|                 false);
 | |
| 
 | |
|             if (!operations.HasFlag(operationToExecute))
 | |
|                 return false;
 | |
| 
 | |
|             ProcessMenuOperation(operationToExecute, mLabelMenuOperations);
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|         void CreateLabelMenuItem_Click()
 | |
|         {
 | |
|             mLabelMenuOperations.CreateLabel();
 | |
|         }
 | |
| 
 | |
|         void ApplyLabelToWorkspaceMenuItem_Click()
 | |
|         {
 | |
|             mLabelMenuOperations.ApplyLabelToWorkspace();
 | |
|         }
 | |
| 
 | |
|         void SwitchWorkspaceToLabelMenuItem_Click()
 | |
|         {
 | |
|             mLabelMenuOperations.SwitchToLabel();
 | |
|         }
 | |
| 
 | |
|         void DiffSelectedLabelsMenuItem_Click()
 | |
|         {
 | |
|             mLabelMenuOperations.DiffSelectedLabels();
 | |
|         }
 | |
| 
 | |
|         void CreateBranchFromLabelMenu_Click()
 | |
|         {
 | |
|             mLabelMenuOperations.CreateBranchFromLabel();
 | |
|         }
 | |
| 
 | |
|         void MergeFromLabelMenuItem_Click()
 | |
|         {
 | |
|             mLabelMenuOperations.MergeLabel();
 | |
|         }
 | |
| 
 | |
|         void RenameLabelMenuItem_Click()
 | |
|         {
 | |
|             mLabelMenuOperations.RenameLabel();
 | |
|         }
 | |
| 
 | |
|         void DeleteLabelMenuItem_Click()
 | |
|         {
 | |
|             mLabelMenuOperations.DeleteLabel();
 | |
|         }
 | |
| 
 | |
|         void UpdateMenuItems(GenericMenu menu)
 | |
|         {
 | |
|             LabelMenuOperations operations = LabelMenuUpdater.GetAvailableMenuOperations(
 | |
|                 mLabelMenuOperations.GetSelectedLabelsCount(),
 | |
|                 false);
 | |
| 
 | |
|             AddLabelMenuItem(
 | |
|                 mCreateLabelMenuItemContent,
 | |
|                 menu,
 | |
|                 operations,
 | |
|                 LabelMenuOperations.CreateLabel,
 | |
|                 CreateLabelMenuItem_Click);
 | |
| 
 | |
|             menu.AddSeparator(string.Empty);
 | |
| 
 | |
|             AddLabelMenuItem(
 | |
|                 mApplyLabelToWorkspaceMenuItemContent,
 | |
|                 menu,
 | |
|                 operations,
 | |
|                 LabelMenuOperations.ApplyLabelToWorkspace,
 | |
|                 ApplyLabelToWorkspaceMenuItem_Click);
 | |
| 
 | |
|             AddLabelMenuItem(
 | |
|                 mSwitchWorkspaceToLabelMenuItemContent,
 | |
|                 menu,
 | |
|                 operations,
 | |
|                 LabelMenuOperations.SwitchToLabel,
 | |
|                 SwitchWorkspaceToLabelMenuItem_Click);
 | |
| 
 | |
|             menu.AddSeparator(string.Empty);
 | |
| 
 | |
|             AddLabelMenuItem(
 | |
|                 mDiffSelectedLabelsMenuItemContent,
 | |
|                 menu,
 | |
|                 operations,
 | |
|                 LabelMenuOperations.DiffSelectedLabels,
 | |
|                 DiffSelectedLabelsMenuItem_Click);
 | |
| 
 | |
|             menu.AddSeparator(string.Empty);
 | |
| 
 | |
|             AddLabelMenuItem(
 | |
|                 mMergeFromLabelMenuItemContent,
 | |
|                 menu,
 | |
|                 operations,
 | |
|                 LabelMenuOperations.MergeLabel,
 | |
|                 MergeFromLabelMenuItem_Click);
 | |
| 
 | |
|             AddLabelMenuItem(
 | |
|                 mCreateBranchFromLabelMenuItemContent,
 | |
|                 menu,
 | |
|                 operations,
 | |
|                 LabelMenuOperations.CreateBranch,
 | |
|                 CreateBranchFromLabelMenu_Click);
 | |
| 
 | |
|             menu.AddSeparator(string.Empty);
 | |
| 
 | |
|             AddLabelMenuItem(
 | |
|                 mRenameLabelMenuItemContent,
 | |
|                 menu,
 | |
|                 operations,
 | |
|                 LabelMenuOperations.Rename,
 | |
|                 RenameLabelMenuItem_Click);
 | |
| 
 | |
|             AddLabelMenuItem(
 | |
|                 mDeleteLabelMenuItemContent,
 | |
|                 menu,
 | |
|                 operations,
 | |
|                 LabelMenuOperations.Delete,
 | |
|                 DeleteLabelMenuItem_Click);
 | |
|         }
 | |
| 
 | |
|         static void AddLabelMenuItem(
 | |
|             GUIContent menuItemContent,
 | |
|             GenericMenu menu,
 | |
|             LabelMenuOperations operations,
 | |
|             LabelMenuOperations operationsToCheck,
 | |
|             GenericMenu.MenuFunction menuFunction)
 | |
|         {
 | |
|             if (operations.HasFlag(operationsToCheck))
 | |
|             {
 | |
|                 menu.AddItem(
 | |
|                     menuItemContent,
 | |
|                     false,
 | |
|                     menuFunction);
 | |
| 
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             menu.AddDisabledItem(menuItemContent);
 | |
|         }
 | |
| 
 | |
|         static void ProcessMenuOperation(
 | |
|             LabelMenuOperations operationToExecute,
 | |
|             ILabelMenuOperations labelMenuOperations)
 | |
|         {
 | |
|             if (operationToExecute == LabelMenuOperations.ApplyLabelToWorkspace)
 | |
|             {
 | |
|                 labelMenuOperations.ApplyLabelToWorkspace();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (operationToExecute == LabelMenuOperations.SwitchToLabel)
 | |
|             {
 | |
|                 labelMenuOperations.SwitchToLabel();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (operationToExecute == LabelMenuOperations.DiffSelectedLabels)
 | |
|             {
 | |
|                 labelMenuOperations.DiffSelectedLabels();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (operationToExecute == LabelMenuOperations.MergeLabel)
 | |
|             {
 | |
|                 labelMenuOperations.MergeLabel();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (operationToExecute == LabelMenuOperations.Delete)
 | |
|             {
 | |
|                 labelMenuOperations.DeleteLabel();
 | |
|                 return;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         static LabelMenuOperations GetMenuOperations(Event e)
 | |
|         {
 | |
|             if (Keyboard.IsControlOrCommandKeyPressed(e) &&
 | |
|                 Keyboard.IsKeyPressed(e, KeyCode.L))
 | |
|                 return LabelMenuOperations.ApplyLabelToWorkspace;
 | |
| 
 | |
|             if (Keyboard.IsControlOrCommandAndShiftKeyPressed(e) &&
 | |
|                 Keyboard.IsKeyPressed(e, KeyCode.W))
 | |
|                 return LabelMenuOperations.SwitchToLabel;
 | |
| 
 | |
|             if (Keyboard.IsControlOrCommandKeyPressed(e) &&
 | |
|                 Keyboard.IsKeyPressed(e, KeyCode.D))
 | |
|                 return LabelMenuOperations.DiffSelectedLabels;
 | |
| 
 | |
|             if (Keyboard.IsControlOrCommandKeyPressed(e) &&
 | |
|                 Keyboard.IsKeyPressed(e, KeyCode.M))
 | |
|                 return LabelMenuOperations.MergeLabel;
 | |
| 
 | |
|             if (Keyboard.IsKeyPressed(e, KeyCode.Delete))
 | |
|                 return LabelMenuOperations.Delete;
 | |
| 
 | |
|             return LabelMenuOperations.None;
 | |
|         }
 | |
| 
 | |
|         void BuildComponents()
 | |
|         {
 | |
|             mCreateLabelMenuItemContent = new GUIContent(
 | |
|                 PlasticLocalization.GetString(PlasticLocalization.Name.LabelMenuItemCreateLabel));
 | |
|             mApplyLabelToWorkspaceMenuItemContent = new GUIContent(string.Format("{0} {1}",
 | |
|                 PlasticLocalization.GetString(PlasticLocalization.Name.LabelMenuItemApplyLabelToWorkspace),
 | |
|                 GetPlasticShortcut.ForLabel()));
 | |
|             mSwitchWorkspaceToLabelMenuItemContent = new GUIContent(string.Format("{0} {1}",
 | |
|                 PlasticLocalization.GetString(PlasticLocalization.Name.LabelMenuItemSwitchToLabel),
 | |
|                 GetPlasticShortcut.ForSwitch()));
 | |
|             mDiffSelectedLabelsMenuItemContent = new GUIContent(string.Format("{0} {1}",
 | |
|                 PlasticLocalization.GetString(PlasticLocalization.Name.LabelMenuItemDiffSelected),
 | |
|                 GetPlasticShortcut.ForDiff()));
 | |
|             mMergeFromLabelMenuItemContent = new GUIContent(string.Format("{0} {1}",
 | |
|                 PlasticLocalization.GetString(PlasticLocalization.Name.LabelMenuItemMergeFromLabel),
 | |
|                 GetPlasticShortcut.ForMerge()));
 | |
|             mCreateBranchFromLabelMenuItemContent = new GUIContent(
 | |
|                 PlasticLocalization.GetString(PlasticLocalization.Name.LabelMenuItemCreateBranchFromLabel));
 | |
|             mRenameLabelMenuItemContent = new GUIContent(
 | |
|                 PlasticLocalization.GetString(PlasticLocalization.Name.LabelMenuItemRenameLabel));
 | |
|             mDeleteLabelMenuItemContent = new GUIContent(string.Format("{0} {1}",
 | |
|                 PlasticLocalization.GetString(PlasticLocalization.Name.LabelMenuItemDeleteLabel),
 | |
|                 GetPlasticShortcut.ForDelete()));
 | |
|         }
 | |
| 
 | |
|         GenericMenu mMenu;
 | |
| 
 | |
|         GUIContent mCreateLabelMenuItemContent;
 | |
|         GUIContent mApplyLabelToWorkspaceMenuItemContent;
 | |
|         GUIContent mSwitchWorkspaceToLabelMenuItemContent;
 | |
|         GUIContent mDiffSelectedLabelsMenuItemContent;
 | |
|         GUIContent mMergeFromLabelMenuItemContent;
 | |
|         GUIContent mCreateBranchFromLabelMenuItemContent;
 | |
|         GUIContent mRenameLabelMenuItemContent;
 | |
|         GUIContent mDeleteLabelMenuItemContent;
 | |
| 
 | |
|         readonly ILabelMenuOperations mLabelMenuOperations;
 | |
|     }
 | |
| }
 |