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

134 lines
4.3 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using Codice.CM.Common;
using PlasticGui;
using PlasticGui.WorkspaceWindow.Open;
using PlasticGui.WorkspaceWindow.PendingChanges;
using PlasticGui.WorkspaceWindow.PendingChanges.Changelists;
using Unity.PlasticSCM.Editor.Views.PendingChanges.Changelists;
namespace Unity.PlasticSCM.Editor.Views.PendingChanges
{
internal class PendingChangesViewMenu
{
internal interface IGetSelectedNodes
{
List<IPlasticTreeNode> GetSelectedNodes();
}
internal PendingChangesViewMenu(
WorkspaceInfo wkInfo,
IPendingChangesMenuOperations pendingChangesViewOperations,
IFilesFilterPatternsMenuOperations filterMenuOperations,
IOpenMenuOperations openMenuOperations,
PendingChangesViewPendingChangeMenu.IMetaMenuOperations metaMenuOperations,
IChangelistMenuOperations changelistMenuOperations,
IGetSelectedNodes getSelectedNodes,
bool isGluonMode)
{
mWkInfo = wkInfo;
mPendingChangesViewOperations = pendingChangesViewOperations;
mFilterMenuOperations = filterMenuOperations;
mOpenMenuOperations = openMenuOperations;
mMetaMenuOperations = metaMenuOperations;
mChangelistMenuOperations = changelistMenuOperations;
mGetSelectedNodes = getSelectedNodes;
mIsGluonMode = isGluonMode;
}
internal void Popup()
{
List<IPlasticTreeNode> selectedNodes = mGetSelectedNodes.GetSelectedNodes();
if (AreAllChangelists(selectedNodes))
{
GetChangelistMenu().Popup();
return;
}
if (AreAllPendingChanges(selectedNodes))
{
GetPendingChangeMenu().Popup();
return;
}
}
internal bool ProcessKeyActionIfNeeded(Event e)
{
List<IPlasticTreeNode> selectedNodes = mGetSelectedNodes.GetSelectedNodes();
if (AreAllChangelists(selectedNodes))
{
return GetChangelistMenu().ProcessKeyActionIfNeeded(e);
}
if (AreAllPendingChanges(selectedNodes))
{
return GetPendingChangeMenu().ProcessKeyActionIfNeeded(e);
}
return false;
}
PendingChangesViewPendingChangeMenu GetPendingChangeMenu()
{
if (mPendingChangeMenu == null)
{
mPendingChangeMenu = new PendingChangesViewPendingChangeMenu(
mWkInfo,
mPendingChangesViewOperations,
mChangelistMenuOperations,
mOpenMenuOperations,
mMetaMenuOperations,
mFilterMenuOperations);
}
return mPendingChangeMenu;
}
ChangelistMenu GetChangelistMenu()
{
if (mChangelistMenu == null)
mChangelistMenu = new ChangelistMenu(
mChangelistMenuOperations,
mIsGluonMode);
return mChangelistMenu;
}
static bool AreAllChangelists(List<IPlasticTreeNode> selectedNodes)
{
foreach (IPlasticTreeNode node in selectedNodes)
{
if (!(node is ChangelistNode))
return false;
}
return true;
}
static bool AreAllPendingChanges(List<IPlasticTreeNode> selectedNodes)
{
foreach (IPlasticTreeNode node in selectedNodes)
{
if (!(node is PendingChangeInfo))
return false;
}
return true;
}
PendingChangesViewPendingChangeMenu mPendingChangeMenu;
ChangelistMenu mChangelistMenu;
readonly WorkspaceInfo mWkInfo;
readonly IPendingChangesMenuOperations mPendingChangesViewOperations;
readonly IFilesFilterPatternsMenuOperations mFilterMenuOperations;
readonly IOpenMenuOperations mOpenMenuOperations;
readonly PendingChangesViewPendingChangeMenu.IMetaMenuOperations mMetaMenuOperations;
readonly IChangelistMenuOperations mChangelistMenuOperations;
readonly IGetSelectedNodes mGetSelectedNodes;
readonly bool mIsGluonMode;
}
}