A game about forced loneliness, made by TACStudios
1using System.Collections.Generic;
2
3using UnityEngine;
4
5using Codice.CM.Common;
6using PlasticGui;
7using PlasticGui.WorkspaceWindow.Open;
8using PlasticGui.WorkspaceWindow.PendingChanges;
9using PlasticGui.WorkspaceWindow.PendingChanges.Changelists;
10using Unity.PlasticSCM.Editor.Views.PendingChanges.Changelists;
11
12namespace Unity.PlasticSCM.Editor.Views.PendingChanges
13{
14 internal class PendingChangesViewMenu
15 {
16 internal interface IGetSelectedNodes
17 {
18 List<IPlasticTreeNode> GetSelectedNodes();
19 }
20
21 internal PendingChangesViewMenu(
22 WorkspaceInfo wkInfo,
23 IPendingChangesMenuOperations pendingChangesViewOperations,
24 IFilesFilterPatternsMenuOperations filterMenuOperations,
25 IOpenMenuOperations openMenuOperations,
26 PendingChangesViewPendingChangeMenu.IMetaMenuOperations metaMenuOperations,
27 PendingChangesViewPendingChangeMenu.IAdvancedUndoMenuOperations advancedUndoMenuOperations,
28 IChangelistMenuOperations changelistMenuOperations,
29 IGetSelectedNodes getSelectedNodes,
30 bool isGluonMode)
31 {
32 mWkInfo = wkInfo;
33 mPendingChangesViewOperations = pendingChangesViewOperations;
34 mFilterMenuOperations = filterMenuOperations;
35 mOpenMenuOperations = openMenuOperations;
36 mMetaMenuOperations = metaMenuOperations;
37 mAdvancedUndoMenuOperations = advancedUndoMenuOperations;
38 mChangelistMenuOperations = changelistMenuOperations;
39 mGetSelectedNodes = getSelectedNodes;
40 mIsGluonMode = isGluonMode;
41 }
42
43 internal void Popup()
44 {
45 List<IPlasticTreeNode> selectedNodes = mGetSelectedNodes.GetSelectedNodes();
46
47 if (AreAllChangelists(selectedNodes))
48 {
49 GetChangelistMenu().Popup();
50 return;
51 }
52
53 if (AreAllPendingChanges(selectedNodes))
54 {
55 GetPendingChangeMenu().Popup();
56 return;
57 }
58 }
59
60 internal bool ProcessKeyActionIfNeeded(Event e)
61 {
62 List<IPlasticTreeNode> selectedNodes = mGetSelectedNodes.GetSelectedNodes();
63
64 if (AreAllChangelists(selectedNodes))
65 {
66 return GetChangelistMenu().ProcessKeyActionIfNeeded(e);
67 }
68
69 if (AreAllPendingChanges(selectedNodes))
70 {
71 return GetPendingChangeMenu().ProcessKeyActionIfNeeded(e);
72 }
73
74 return false;
75 }
76
77 PendingChangesViewPendingChangeMenu GetPendingChangeMenu()
78 {
79 if (mPendingChangeMenu == null)
80 {
81 mPendingChangeMenu = new PendingChangesViewPendingChangeMenu(
82 mWkInfo,
83 mPendingChangesViewOperations,
84 mChangelistMenuOperations,
85 mOpenMenuOperations,
86 mMetaMenuOperations,
87 mAdvancedUndoMenuOperations,
88 mFilterMenuOperations,
89 mIsGluonMode);
90 }
91
92 return mPendingChangeMenu;
93 }
94
95 ChangelistMenu GetChangelistMenu()
96 {
97 if (mChangelistMenu == null)
98 mChangelistMenu = new ChangelistMenu(
99 mChangelistMenuOperations,
100 mIsGluonMode);
101
102 return mChangelistMenu;
103 }
104
105 static bool AreAllChangelists(List<IPlasticTreeNode> selectedNodes)
106 {
107 foreach (IPlasticTreeNode node in selectedNodes)
108 {
109 if (!(node is ChangelistNode))
110 return false;
111 }
112 return true;
113 }
114
115 static bool AreAllPendingChanges(List<IPlasticTreeNode> selectedNodes)
116 {
117 foreach (IPlasticTreeNode node in selectedNodes)
118 {
119 if (!(node is PendingChangeInfo))
120 return false;
121 }
122 return true;
123 }
124
125 PendingChangesViewPendingChangeMenu mPendingChangeMenu;
126 ChangelistMenu mChangelistMenu;
127
128 readonly WorkspaceInfo mWkInfo;
129 readonly IPendingChangesMenuOperations mPendingChangesViewOperations;
130 readonly IFilesFilterPatternsMenuOperations mFilterMenuOperations;
131 readonly IOpenMenuOperations mOpenMenuOperations;
132 readonly PendingChangesViewPendingChangeMenu.IMetaMenuOperations mMetaMenuOperations;
133 readonly PendingChangesViewPendingChangeMenu.IAdvancedUndoMenuOperations mAdvancedUndoMenuOperations;
134 readonly IChangelistMenuOperations mChangelistMenuOperations;
135 readonly IGetSelectedNodes mGetSelectedNodes;
136 readonly bool mIsGluonMode;
137 }
138}