183 lines
5.9 KiB
C#
183 lines
5.9 KiB
C#
using PlasticGui;
|
|
using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
|
|
using Unity.PlasticSCM.Editor.UI;
|
|
|
|
namespace Unity.PlasticSCM.Editor.AssetMenu
|
|
{
|
|
internal class AssetMenuItems
|
|
{
|
|
internal static void Enable(
|
|
IAssetMenuOperations operations,
|
|
IAssetStatusCache assetStatusCache,
|
|
AssetOperations.IAssetSelection assetsSelection)
|
|
{
|
|
mOperations = operations;
|
|
mAssetStatusCache = assetStatusCache;
|
|
mAssetsSelection = assetsSelection;
|
|
|
|
AddMenuItems();
|
|
}
|
|
|
|
internal static void Disable()
|
|
{
|
|
RemoveMenuItems();
|
|
}
|
|
|
|
static void AddMenuItems()
|
|
{
|
|
HandleMenuItem.AddMenuItem(
|
|
GetPlasticMenuItemName(PlasticLocalization.Name.PendingChangesPlasticMenu),
|
|
PENDING_CHANGES_MENU_ITEM_PRIORITY,
|
|
PendingChanges, ValidatePendingChanges);
|
|
HandleMenuItem.AddMenuItem(
|
|
GetPlasticMenuItemName(PlasticLocalization.Name.AddPlasticMenu),
|
|
ADD_MENU_ITEM_PRIORITY,
|
|
Add, ValidateAdd);
|
|
HandleMenuItem.AddMenuItem(
|
|
GetPlasticMenuItemName(PlasticLocalization.Name.CheckoutPlasticMenu),
|
|
CHECKOUT_MENU_ITEM_PRIORITY,
|
|
Checkout, ValidateCheckout);
|
|
HandleMenuItem.AddMenuItem(
|
|
GetPlasticMenuItemName(PlasticLocalization.Name.CheckinPlasticMenu),
|
|
CHECKIN_MENU_ITEM_PRIORITY,
|
|
Checkin, ValidateCheckin);
|
|
HandleMenuItem.AddMenuItem(
|
|
GetPlasticMenuItemName(PlasticLocalization.Name.UndoPlasticMenu),
|
|
UNDO_MENU_ITEM_PRIORITY,
|
|
Undo, ValidateUndo);
|
|
HandleMenuItem.AddMenuItem(
|
|
GetPlasticMenuItemName(PlasticLocalization.Name.DiffPlasticMenu),
|
|
GetPlasticShortcut.ForAssetDiff(),
|
|
DIFF_MENU_ITEM_PRIORITY,
|
|
Diff, ValidateDiff);
|
|
HandleMenuItem.AddMenuItem(
|
|
GetPlasticMenuItemName(PlasticLocalization.Name.HistoryPlasticMenu),
|
|
GetPlasticShortcut.ForHistory(),
|
|
HISTORY_MENU_ITEM_PRIORITY,
|
|
History, ValidateHistory);
|
|
|
|
HandleMenuItem.UpdateAllMenus();
|
|
}
|
|
|
|
static void RemoveMenuItems()
|
|
{
|
|
HandleMenuItem.RemoveMenuItem(
|
|
PlasticLocalization.GetString(PlasticLocalization.Name.PrefixPlasticMenu));
|
|
|
|
HandleMenuItem.UpdateAllMenus();
|
|
}
|
|
|
|
internal static void PendingChanges()
|
|
{
|
|
ShowWindow.Plastic();
|
|
|
|
mOperations.ShowPendingChanges();
|
|
}
|
|
|
|
internal static bool ValidatePendingChanges()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
internal static void Add()
|
|
{
|
|
mOperations.Add();
|
|
}
|
|
|
|
static bool ValidateAdd()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.Add);
|
|
}
|
|
|
|
internal static void Checkout()
|
|
{
|
|
mOperations.Checkout();
|
|
}
|
|
|
|
static bool ValidateCheckout()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.Checkout);
|
|
}
|
|
|
|
internal static void Checkin()
|
|
{
|
|
mOperations.Checkin();
|
|
}
|
|
|
|
static bool ValidateCheckin()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.Checkin);
|
|
}
|
|
|
|
internal static void Undo()
|
|
{
|
|
mOperations.Undo();
|
|
}
|
|
|
|
static bool ValidateUndo()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.Undo);
|
|
}
|
|
|
|
internal static void Diff()
|
|
{
|
|
mOperations.ShowDiff();
|
|
}
|
|
|
|
static bool ValidateDiff()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.Diff);
|
|
}
|
|
|
|
internal static void History()
|
|
{
|
|
ShowWindow.Plastic();
|
|
|
|
mOperations.ShowHistory();
|
|
}
|
|
|
|
static bool ValidateHistory()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.History);
|
|
}
|
|
|
|
static bool ShouldMenuItemBeEnabled(AssetMenuOperations operation)
|
|
{
|
|
if (mOperations == null)
|
|
return false;
|
|
|
|
SelectedAssetGroupInfo selectedGroupInfo = SelectedAssetGroupInfo.
|
|
BuildFromAssetList(
|
|
mAssetsSelection.GetSelectedAssets(),
|
|
mAssetStatusCache);
|
|
|
|
AssetMenuOperations operations = AssetMenuUpdater.
|
|
GetAvailableMenuOperations(selectedGroupInfo);
|
|
|
|
return operations.HasFlag(operation);
|
|
}
|
|
|
|
static string GetPlasticMenuItemName(PlasticLocalization.Name name)
|
|
{
|
|
return string.Format("{0}/{1}",
|
|
PlasticLocalization.GetString(PlasticLocalization.Name.PrefixPlasticMenu),
|
|
PlasticLocalization.GetString(name));
|
|
}
|
|
|
|
static IAssetMenuOperations mOperations;
|
|
static IAssetStatusCache mAssetStatusCache;
|
|
static AssetOperations.IAssetSelection mAssetsSelection;
|
|
|
|
const int BASE_MENU_ITEM_PRIORITY = 19; // Puts Plastic SCM right below Create menu
|
|
|
|
// incrementing the "order" param by 11 causes the menu system to add a separator
|
|
const int PENDING_CHANGES_MENU_ITEM_PRIORITY = BASE_MENU_ITEM_PRIORITY;
|
|
const int ADD_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 11;
|
|
const int CHECKOUT_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 12;
|
|
const int CHECKIN_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 13;
|
|
const int UNDO_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 14;
|
|
const int DIFF_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 25;
|
|
const int HISTORY_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 26;
|
|
}
|
|
}
|