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