Singularity/Library/PackageCache/com.unity.collab-proxy@2.0.3/Editor/PlasticSCM/Views/Changesets/ChangesetsViewMenu.cs
2024-05-06 11:45:45 -07:00

369 lines
12 KiB
C#

using UnityEditor;
using UnityEngine;
using Codice.Client.BaseCommands.EventTracking;
using Codice.CM.Common;
using PlasticGui.WorkspaceWindow.QueryViews.Changesets;
using PlasticGui;
using Unity.PlasticSCM.Editor.Tool;
using Unity.PlasticSCM.Editor.UI;
namespace Unity.PlasticSCM.Editor.Views.Changesets
{
internal class ChangesetsViewMenu
{
internal GenericMenu Menu { get { return mMenu; } }
public interface IMenuOperations
{
void DiffBranch();
ChangesetExtendedInfo GetSelectedChangeset();
}
internal ChangesetsViewMenu(
WorkspaceInfo wkInfo,
IChangesetMenuOperations changesetMenuOperations,
IMenuOperations menuOperations,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
bool isGluonMode)
{
mWkInfo = wkInfo;
mChangesetMenuOperations = changesetMenuOperations;
mMenuOperations = menuOperations;
mShowDownloadPlasticExeWindow = showDownloadPlasticExeWindow;
mIsGluonMode = isGluonMode;
BuildComponents();
}
internal void Popup()
{
mMenu = new GenericMenu();
UpdateMenuItems(mMenu);
mMenu.ShowAsContext();
}
internal bool ProcessKeyActionIfNeeded(Event e)
{
int selectedChangesetsCount = mChangesetMenuOperations.GetSelectedChangesetsCount();
ChangesetMenuOperations operationToExecute = GetMenuOperations(
e, selectedChangesetsCount > 1);
if (operationToExecute == ChangesetMenuOperations.None)
return false;
ChangesetMenuOperations operations = ChangesetMenuUpdater.GetAvailableMenuOperations(
selectedChangesetsCount,
mIsGluonMode,
mMenuOperations.GetSelectedChangeset().BranchId,
mLoadedBranchId,
false);
if (!operations.HasFlag(operationToExecute))
return false;
ProcessMenuOperation(operationToExecute, mChangesetMenuOperations);
return true;
}
internal void SetLoadedBranchId(long loadedBranchId)
{
mLoadedBranchId = loadedBranchId;
}
void DiffChangesetMenuItem_Click()
{
if (mShowDownloadPlasticExeWindow.Show(
mWkInfo,
mIsGluonMode,
TrackFeatureUseEvent.Features.InstallPlasticCloudFromDiffChangeset,
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromDiffChangeset,
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromDiffChangeset))
return;
mChangesetMenuOperations.DiffChangeset();
}
void DiffSelectedChangesetsMenuItem_Click()
{
if (mShowDownloadPlasticExeWindow.Show(
mWkInfo,
mIsGluonMode,
TrackFeatureUseEvent.Features.InstallPlasticCloudFromDiffSelectedChangesets,
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromDiffSelectedChangesets,
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromDiffSelectedChangesets))
return;
mChangesetMenuOperations.DiffSelectedChangesets();
}
void RevertToChangesetMenuItem_Click()
{
mChangesetMenuOperations.RevertToChangeset();
}
void DiffBranchMenuItem_Click()
{
mMenuOperations.DiffBranch();
}
void SwitchToChangesetMenuItem_Click()
{
mChangesetMenuOperations.SwitchToChangeset();
}
internal void UpdateMenuItems(GenericMenu menu)
{
ChangesetExtendedInfo singleSelectedChangeset = mMenuOperations.GetSelectedChangeset();
ChangesetMenuOperations operations = ChangesetMenuUpdater.GetAvailableMenuOperations(
mChangesetMenuOperations.GetSelectedChangesetsCount(),
mIsGluonMode,
singleSelectedChangeset.BranchId,
mLoadedBranchId,
false);
AddDiffChangesetMenuItem(
mDiffChangesetMenuItemContent,
menu,
singleSelectedChangeset,
operations,
DiffChangesetMenuItem_Click);
AddDiffSelectedChangesetsMenuItem(
mDiffSelectedChangesetsMenuItemContent,
menu,
operations,
DiffSelectedChangesetsMenuItem_Click);
if (!IsOnMainBranch(singleSelectedChangeset))
{
menu.AddSeparator(string.Empty);
AddDiffBranchMenuItem(
mDiffBranchMenuItemContent,
menu,
singleSelectedChangeset,
operations,
DiffBranchMenuItem_Click);
}
menu.AddSeparator(string.Empty);
AddSwitchToChangesetMenuItem(
mSwitchToChangesetMenuItemContent,
menu,
operations,
SwitchToChangesetMenuItem_Click);
if (mIsGluonMode)
return;
AddBackToMenuItem(
mRevertToChangesetMenuItemContent,
menu,
operations,
RevertToChangesetMenuItem_Click);
}
void ProcessMenuOperation(
ChangesetMenuOperations operationToExecute,
IChangesetMenuOperations changesetMenuOperations)
{
if (operationToExecute == ChangesetMenuOperations.DiffChangeset)
{
DiffChangesetMenuItem_Click();
return;
}
if (operationToExecute == ChangesetMenuOperations.DiffSelectedChangesets)
{
DiffSelectedChangesetsMenuItem_Click();
return;
}
}
static void AddDiffChangesetMenuItem(
GUIContent menuItemContent,
GenericMenu menu,
ChangesetExtendedInfo changeset,
ChangesetMenuOperations operations,
GenericMenu.MenuFunction menuFunction)
{
string changesetName =
changeset != null ?
changeset.ChangesetId.ToString() :
string.Empty;
menuItemContent.text = string.Format("{0} {1}",
PlasticLocalization.GetString(
PlasticLocalization.Name.AnnotateDiffChangesetMenuItem,
changesetName),
GetPlasticShortcut.ForDiff());
if (operations.HasFlag(ChangesetMenuOperations.DiffChangeset))
{
menu.AddItem(
menuItemContent,
false,
menuFunction);
return;
}
menu.AddDisabledItem(
menuItemContent);
}
static void AddDiffSelectedChangesetsMenuItem(
GUIContent menuItemContent,
GenericMenu menu,
ChangesetMenuOperations operations,
GenericMenu.MenuFunction menuFunction)
{
if (operations.HasFlag(ChangesetMenuOperations.DiffSelectedChangesets))
{
menu.AddItem(
menuItemContent,
false,
menuFunction);
return;
}
menu.AddDisabledItem(menuItemContent);
}
static void AddBackToMenuItem(
GUIContent menuItemContent,
GenericMenu menu,
ChangesetMenuOperations operations,
GenericMenu.MenuFunction menuFunction)
{
if (operations.HasFlag(ChangesetMenuOperations.RevertToChangeset))
{
menu.AddItem(
menuItemContent,
false,
menuFunction);
return;
}
menu.AddDisabledItem(menuItemContent);
}
static void AddDiffBranchMenuItem(
GUIContent menuItemContent,
GenericMenu menu,
ChangesetExtendedInfo changeset,
ChangesetMenuOperations operations,
GenericMenu.MenuFunction menuFunction)
{
string branchName = GetBranchName(changeset);
menuItemContent.text =
PlasticLocalization.GetString(PlasticLocalization.Name.AnnotateDiffBranchMenuItem,
branchName);
if (operations.HasFlag(ChangesetMenuOperations.DiffChangeset))
{
menu.AddItem(
menuItemContent,
false,
menuFunction);
return;
}
menu.AddDisabledItem(
menuItemContent);
}
static void AddSwitchToChangesetMenuItem(
GUIContent menuItemContent,
GenericMenu menu,
ChangesetMenuOperations operations,
GenericMenu.MenuFunction menuFunction)
{
if (operations.HasFlag(ChangesetMenuOperations.SwitchToChangeset))
{
menu.AddItem(
menuItemContent,
false,
menuFunction);
return;
}
menu.AddDisabledItem(menuItemContent);
}
static string GetBranchName(ChangesetExtendedInfo changesetInfo)
{
if (changesetInfo == null)
return string.Empty;
string branchName = changesetInfo.BranchName;
int lastIndex = changesetInfo.BranchName.LastIndexOf("/");
if (lastIndex == -1)
return branchName;
return branchName.Substring(lastIndex + 1);
}
static bool IsOnMainBranch(ChangesetExtendedInfo singleSeletedChangeset)
{
if (singleSeletedChangeset == null)
return false;
return singleSeletedChangeset.BranchName == MAIN_BRANCH_NAME;
}
static ChangesetMenuOperations GetMenuOperations(
Event e, bool isMultipleSelection)
{
if (Keyboard.IsControlOrCommandKeyPressed(e) &&
Keyboard.IsKeyPressed(e, KeyCode.D))
return isMultipleSelection ?
ChangesetMenuOperations.DiffSelectedChangesets :
ChangesetMenuOperations.DiffChangeset;
return ChangesetMenuOperations.None;
}
void BuildComponents()
{
mDiffChangesetMenuItemContent = new GUIContent(string.Empty);
mDiffSelectedChangesetsMenuItemContent = new GUIContent(string.Format("{0} {1}",
PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemDiffSelected),
GetPlasticShortcut.ForDiff()));
mDiffBranchMenuItemContent = new GUIContent();
mSwitchToChangesetMenuItemContent = new GUIContent(
PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemSwitchToChangeset));
mRevertToChangesetMenuItemContent = new GUIContent(
PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemRevertToChangeset));
}
GenericMenu mMenu;
GUIContent mDiffChangesetMenuItemContent;
GUIContent mDiffSelectedChangesetsMenuItemContent;
GUIContent mDiffBranchMenuItemContent;
GUIContent mSwitchToChangesetMenuItemContent;
GUIContent mRevertToChangesetMenuItemContent;
readonly WorkspaceInfo mWkInfo;
readonly IChangesetMenuOperations mChangesetMenuOperations;
readonly IMenuOperations mMenuOperations;
readonly LaunchTool.IShowDownloadPlasticExeWindow mShowDownloadPlasticExeWindow;
readonly bool mIsGluonMode;
long mLoadedBranchId = -1;
const string MAIN_BRANCH_NAME = "/main";
}
}