| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- using UnityEditor;
- using UnityEngine;
- using Codice.CM.Common;
- using PlasticGui;
- using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
- using Unity.PlasticSCM.Editor.Inspector;
- using Unity.PlasticSCM.Editor.UI;
- using System.ComponentModel;
- namespace Unity.PlasticSCM.Editor.AssetMenu
- {
- [InitializeOnLoad]
- internal class AssetMenuItems
- {
- static AssetMenuItems()
- {
- BackgroundWorker backgroundWorker = new BackgroundWorker();
- backgroundWorker.DoWork += new DoWorkEventHandler(BackgroundWorker_DoWork);
- backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(BackgroundWorker_CompletedWork);
- backgroundWorker.RunWorkerAsync();
- }
- static void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
- {
- PlasticApp.InitializeIfNeeded();
- }
- static void BackgroundWorker_CompletedWork(object sender, RunWorkerCompletedEventArgs e)
- {
- sPlasticAPI = new PlasticAPI();
- Enable();
- }
- // TODO: do this after calling plastic workspace
- internal static void Enable()
- {
- if (sPlasticAPI==null) sPlasticAPI = new PlasticAPI();
- WorkspaceInfo wkInfo = FindWorkspace.InfoForApplicationPath(
- Application.dataPath,
- sPlasticAPI);
- if (wkInfo == null)
- {
- return;
- }
- sOperations = new AssetMenuRoutingOperations();
- sAssetStatusCache = new AssetStatusCache(
- wkInfo,
- sPlasticAPI.IsGluonWorkspace(wkInfo),
- RepaintProjectWindow);
- sAssetSelection = new InspectorAssetSelection();
- AddMenuItems();
- }
- // TODO: Call this from the delete plastic workspace window
- internal static void Disable()
- {
- RemoveMenuItems();
- }
- 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);
- 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 string GetPlasticMenuItemName(PlasticLocalization.Name name)
- {
- return string.Format("{0}/{1}",
- PlasticLocalization.GetString(PlasticLocalization.Name.PrefixPlasticMenu),
- PlasticLocalization.GetString(name));
- }
- static void PendingChanges()
- {
- ShowWindow.Plastic();
- sOperations.ShowPendingChanges();
- }
- static bool ValidatePendingChanges()
- {
- return true;
- }
- static void Add()
- {
- sOperations.Add();
- }
- static bool ValidateAdd()
- {
- return ShouldMenuItemBeEnabled(AssetMenuOperations.Add);
- }
- static void Checkout()
- {
- sOperations.Checkout();
- }
- static bool ValidateCheckout()
- {
- return ShouldMenuItemBeEnabled(AssetMenuOperations.Checkout);
- }
- static void Checkin()
- {
- sOperations.Checkin();
- }
- static bool ValidateCheckin()
- {
- return ShouldMenuItemBeEnabled(AssetMenuOperations.Checkin);
- }
- static void Undo()
- {
- sOperations.Undo();
- }
- static bool ValidateUndo()
- {
- return ShouldMenuItemBeEnabled(AssetMenuOperations.Undo);
- }
- static void Diff()
- {
- sOperations.ShowDiff();
- }
- static bool ValidateDiff()
- {
- return ShouldMenuItemBeEnabled(AssetMenuOperations.Diff);
- }
- static void History()
- {
- ShowWindow.Plastic();
- sOperations.ShowHistory();
- }
- static bool ValidateHistory()
- {
- return ShouldMenuItemBeEnabled(AssetMenuOperations.History);
- }
- static bool ShouldMenuItemBeEnabled(AssetMenuOperations operation)
- {
- if (sOperations == null)
- return false;
- SelectedAssetGroupInfo selectedGroupInfo = SelectedAssetGroupInfo.
- BuildFromAssetList(
- sAssetSelection.GetSelectedAssets(),
- sAssetStatusCache);
- AssetMenuOperations operations = AssetMenuUpdater.
- GetAvailableMenuOperations(selectedGroupInfo);
- return operations.HasFlag(operation);
- }
- static void RepaintProjectWindow()
- {
- EditorWindow projectWindow = FindEditorWindow.ProjectWindow();
- if (projectWindow == null)
- return;
- projectWindow.Repaint();
- }
- static void RemoveMenuItems()
- {
- HandleMenuItem.RemoveMenuItem(
- PlasticLocalization.GetString(PlasticLocalization.Name.PrefixPlasticMenu));
- HandleMenuItem.UpdateAllMenus();
- }
- static PlasticAPI sPlasticAPI;
- static IAssetMenuOperations sOperations;
- static IAssetStatusCache sAssetStatusCache;
- static AssetOperations.IAssetSelection sAssetSelection;
- 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;
- }
- }
|