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