141 lines
4.1 KiB
C#
141 lines
4.1 KiB
C#
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
using PlasticGui;
|
|||
|
using PlasticGui.WorkspaceWindow.Locks;
|
|||
|
using Unity.PlasticSCM.Editor.UI;
|
|||
|
|
|||
|
namespace Unity.PlasticSCM.Editor.Views.Locks
|
|||
|
{
|
|||
|
internal class LocksViewMenu
|
|||
|
{
|
|||
|
internal GenericMenu Menu { get { return mMenu; } }
|
|||
|
|
|||
|
internal LocksViewMenu(
|
|||
|
ILockMenuOperations lockMenuOperations)
|
|||
|
{
|
|||
|
mLockMenuOperations = lockMenuOperations;
|
|||
|
|
|||
|
BuildComponents();
|
|||
|
}
|
|||
|
|
|||
|
internal void Popup()
|
|||
|
{
|
|||
|
mMenu = new GenericMenu();
|
|||
|
|
|||
|
UpdateMenuItems(mMenu);
|
|||
|
|
|||
|
mMenu.ShowAsContext();
|
|||
|
}
|
|||
|
|
|||
|
internal bool ProcessKeyActionIfNeeded(Event e)
|
|||
|
{
|
|||
|
LockMenuOperations operationToExecute = GetMenuOperations(e);
|
|||
|
|
|||
|
if (operationToExecute == LockMenuOperations.None)
|
|||
|
return false;
|
|||
|
|
|||
|
LockMenuOperations operations = LockMenuUpdater.GetAvailableMenuOperations(
|
|||
|
mLockMenuOperations.GetSelectedLocksStatus());
|
|||
|
|
|||
|
if (!operations.HasFlag(operationToExecute))
|
|||
|
return false;
|
|||
|
|
|||
|
ProcessMenuOperation(operationToExecute, mLockMenuOperations);
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
internal void UpdateMenuItems(GenericMenu menu)
|
|||
|
{
|
|||
|
LockMenuOperations operations = LockMenuUpdater.GetAvailableMenuOperations(
|
|||
|
mLockMenuOperations.GetSelectedLocksStatus());
|
|||
|
|
|||
|
if (operations == LockMenuOperations.None)
|
|||
|
{
|
|||
|
menu.AddDisabledItem(GetNoActionMenuItemContent(), false);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
AddLockMenuItem(
|
|||
|
mReleaseLockMenuItemContent,
|
|||
|
menu,
|
|||
|
operations,
|
|||
|
LockMenuOperations.Release,
|
|||
|
mLockMenuOperations.ReleaseLocks);
|
|||
|
|
|||
|
AddLockMenuItem(
|
|||
|
mRemoveLockMenuItemContent,
|
|||
|
menu,
|
|||
|
operations,
|
|||
|
LockMenuOperations.Remove,
|
|||
|
mLockMenuOperations.RemoveLocks);
|
|||
|
}
|
|||
|
|
|||
|
static void AddLockMenuItem(
|
|||
|
GUIContent menuItemContent,
|
|||
|
GenericMenu menu,
|
|||
|
LockMenuOperations operations,
|
|||
|
LockMenuOperations operationsToCheck,
|
|||
|
GenericMenu.MenuFunction menuFunction)
|
|||
|
{
|
|||
|
if (operations.HasFlag(operationsToCheck))
|
|||
|
{
|
|||
|
menu.AddItem(
|
|||
|
menuItemContent,
|
|||
|
false,
|
|||
|
menuFunction);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
menu.AddDisabledItem(menuItemContent);
|
|||
|
}
|
|||
|
|
|||
|
static void ProcessMenuOperation(
|
|||
|
LockMenuOperations operationToExecute,
|
|||
|
ILockMenuOperations lockMenuOperations)
|
|||
|
{
|
|||
|
if (operationToExecute == LockMenuOperations.Remove)
|
|||
|
{
|
|||
|
lockMenuOperations.RemoveLocks();
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static LockMenuOperations GetMenuOperations(Event e)
|
|||
|
{
|
|||
|
if (Keyboard.IsKeyPressed(e, KeyCode.Delete))
|
|||
|
return LockMenuOperations.Remove;
|
|||
|
|
|||
|
return LockMenuOperations.None;
|
|||
|
}
|
|||
|
|
|||
|
GUIContent GetNoActionMenuItemContent()
|
|||
|
{
|
|||
|
if (mNoActionMenuItemContent == null)
|
|||
|
{
|
|||
|
mNoActionMenuItemContent = new GUIContent(
|
|||
|
PlasticLocalization.Name.NoActionMenuItem.GetString());
|
|||
|
}
|
|||
|
|
|||
|
return mNoActionMenuItemContent;
|
|||
|
}
|
|||
|
|
|||
|
void BuildComponents()
|
|||
|
{
|
|||
|
mReleaseLockMenuItemContent = new GUIContent(PlasticLocalization.
|
|||
|
Name.LockMenuItemReleaseLock.GetString());
|
|||
|
mRemoveLockMenuItemContent = new GUIContent(string.Format("{0} {1}",
|
|||
|
PlasticLocalization.Name.LockMenuItemRemoveLock.GetString(),
|
|||
|
GetPlasticShortcut.ForDelete()));
|
|||
|
}
|
|||
|
|
|||
|
GenericMenu mMenu;
|
|||
|
|
|||
|
GUIContent mNoActionMenuItemContent;
|
|||
|
GUIContent mReleaseLockMenuItemContent;
|
|||
|
GUIContent mRemoveLockMenuItemContent;
|
|||
|
|
|||
|
readonly ILockMenuOperations mLockMenuOperations;
|
|||
|
}
|
|||
|
}
|