239 lines
7.7 KiB
C#
239 lines
7.7 KiB
C#
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;
|
|
}
|
|
} |