232 lines
7.8 KiB
C#
232 lines
7.8 KiB
C#
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
using Codice.CM.Common;
|
|
using Codice.Client.BaseCommands.EventTracking;
|
|
using PlasticGui;
|
|
using PlasticGui.WorkspaceWindow.Items;
|
|
using Unity.PlasticSCM.Editor.UI;
|
|
|
|
namespace Unity.PlasticSCM.Editor.AssetMenu
|
|
{
|
|
internal class AssetMenuItems
|
|
{
|
|
internal static void Enable()
|
|
{
|
|
if (sIsEnabled)
|
|
return;
|
|
|
|
sIsEnabled = true;
|
|
|
|
sOperations = new AssetMenuRoutingOperations();
|
|
|
|
sAssetSelection = new ProjectViewAssetSelection(UpdateFilterMenuItems);
|
|
|
|
sFilterMenuBuilder = new AssetFilesFilterPatternsMenuBuilder(
|
|
sOperations,
|
|
IGNORE_MENU_ITEMS_PRIORITY,
|
|
HIDDEN_MENU_ITEMS_PRIORITY);
|
|
|
|
AddMenuItems();
|
|
}
|
|
|
|
internal static void Disable()
|
|
{
|
|
sIsEnabled = false;
|
|
|
|
RemoveMenuItems();
|
|
|
|
if (sAssetSelection != null)
|
|
sAssetSelection.Dispose();
|
|
}
|
|
|
|
static void AddMenuItems()
|
|
{
|
|
// TODO: Try removing this
|
|
// Somehow first item always disappears. So this is a filler item
|
|
HandleMenuItem.AddMenuItem(
|
|
GetPlasticMenuItemName(PlasticLocalization.Name.PendingChangesPlasticMenu),
|
|
PENDING_CHANGES_MENU_ITEM_PRIORITY,
|
|
PendingChanges, ValidatePendingChanges);
|
|
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);
|
|
|
|
UpdateFilterMenuItems();
|
|
|
|
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 UpdateFilterMenuItems()
|
|
{
|
|
SelectedPathsGroupInfo info = AssetsSelection.GetSelectedPathsGroupInfo(
|
|
((AssetOperations.IAssetSelection)sAssetSelection).GetSelectedAssets(),
|
|
PlasticPlugin.AssetStatusCache);
|
|
sFilterMenuBuilder.UpdateMenuItems(FilterMenuUpdater.GetMenuActions(info));
|
|
}
|
|
|
|
static string GetPlasticMenuItemName(PlasticLocalization.Name name)
|
|
{
|
|
return string.Format("{0}/{1}",
|
|
PlasticLocalization.GetString(PlasticLocalization.Name.PrefixPlasticMenu),
|
|
PlasticLocalization.GetString(name));
|
|
}
|
|
|
|
static void PendingChanges()
|
|
{
|
|
ShowWindow.Plastic();
|
|
|
|
((IAssetMenuOperations)sOperations).ShowPendingChanges();
|
|
}
|
|
|
|
static bool ValidatePendingChanges()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
static void Add()
|
|
{
|
|
((IAssetMenuOperations)sOperations).Add();
|
|
}
|
|
|
|
static bool ValidateAdd()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.Add);
|
|
}
|
|
|
|
static void Checkout()
|
|
{
|
|
((IAssetMenuOperations)sOperations).Checkout();
|
|
}
|
|
|
|
static bool ValidateCheckout()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.Checkout);
|
|
}
|
|
|
|
static void Checkin()
|
|
{
|
|
WorkspaceInfo wkInfo = FindWorkspace.InfoForApplicationPath(
|
|
Application.dataPath,
|
|
PlasticApp.PlasticAPI);
|
|
|
|
if (wkInfo != null)
|
|
{
|
|
TrackFeatureUseEvent.For(
|
|
PlasticGui.Plastic.API.GetRepositorySpec(wkInfo),
|
|
TrackFeatureUseEvent.Features.ContextMenuCheckinOption);
|
|
}
|
|
|
|
((IAssetMenuOperations)sOperations).Checkin();
|
|
}
|
|
|
|
static bool ValidateCheckin()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.Checkin);
|
|
}
|
|
|
|
static void Undo()
|
|
{
|
|
((IAssetMenuOperations)sOperations).Undo();
|
|
}
|
|
|
|
static bool ValidateUndo()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.Undo);
|
|
}
|
|
|
|
static void Diff()
|
|
{
|
|
((IAssetMenuOperations)sOperations).ShowDiff();
|
|
}
|
|
|
|
static bool ValidateDiff()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.Diff);
|
|
}
|
|
|
|
static void History()
|
|
{
|
|
ShowWindow.Plastic();
|
|
|
|
((IAssetMenuOperations)sOperations).ShowHistory();
|
|
}
|
|
|
|
static bool ValidateHistory()
|
|
{
|
|
return ShouldMenuItemBeEnabled(AssetMenuOperations.History);
|
|
}
|
|
|
|
static bool ShouldMenuItemBeEnabled(AssetMenuOperations operation)
|
|
{
|
|
if (sOperations == null)
|
|
return false;
|
|
|
|
SelectedAssetGroupInfo selectedGroupInfo = SelectedAssetGroupInfo.
|
|
BuildFromAssetList(
|
|
((AssetOperations.IAssetSelection)sAssetSelection).GetSelectedAssets(),
|
|
PlasticPlugin.AssetStatusCache);
|
|
|
|
AssetMenuOperations operations = AssetMenuUpdater.
|
|
GetAvailableMenuOperations(selectedGroupInfo);
|
|
|
|
return operations.HasFlag(operation);
|
|
}
|
|
|
|
static void RemoveMenuItems()
|
|
{
|
|
sFilterMenuBuilder.RemoveMenuItems();
|
|
|
|
HandleMenuItem.RemoveMenuItem(
|
|
PlasticLocalization.GetString(PlasticLocalization.Name.PrefixPlasticMenu));
|
|
|
|
HandleMenuItem.UpdateAllMenus();
|
|
}
|
|
|
|
static AssetMenuRoutingOperations sOperations;
|
|
static ProjectViewAssetSelection sAssetSelection;
|
|
static AssetFilesFilterPatternsMenuBuilder sFilterMenuBuilder;
|
|
static bool sIsEnabled;
|
|
|
|
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 IGNORE_MENU_ITEMS_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 25;
|
|
const int HIDDEN_MENU_ITEMS_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 26;
|
|
const int DIFF_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 37;
|
|
const int HISTORY_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 38;
|
|
}
|
|
} |