A game about forced loneliness, made by TACStudios
1using UnityEditor;
2using UnityEngine;
3
4using PlasticGui;
5using PlasticGui.WorkspaceWindow.Locks;
6using Unity.PlasticSCM.Editor.UI;
7
8namespace Unity.PlasticSCM.Editor.Views.Locks
9{
10 internal class LocksViewMenu
11 {
12 internal GenericMenu Menu { get { return mMenu; } }
13
14 internal LocksViewMenu(
15 ILockMenuOperations lockMenuOperations)
16 {
17 mLockMenuOperations = lockMenuOperations;
18
19 BuildComponents();
20 }
21
22 internal void Popup()
23 {
24 mMenu = new GenericMenu();
25
26 UpdateMenuItems(mMenu);
27
28 mMenu.ShowAsContext();
29 }
30
31 internal bool ProcessKeyActionIfNeeded(Event e)
32 {
33 LockMenuOperations operationToExecute = GetMenuOperations(e);
34
35 if (operationToExecute == LockMenuOperations.None)
36 return false;
37
38 LockMenuOperations operations = LockMenuUpdater.GetAvailableMenuOperations(
39 mLockMenuOperations.GetSelectedLocksStatus());
40
41 if (!operations.HasFlag(operationToExecute))
42 return false;
43
44 ProcessMenuOperation(operationToExecute, mLockMenuOperations);
45 return true;
46 }
47
48 void UpdateMenuItems(GenericMenu menu)
49 {
50 LockMenuOperations operations = LockMenuUpdater.GetAvailableMenuOperations(
51 mLockMenuOperations.GetSelectedLocksStatus());
52
53 if (operations == LockMenuOperations.None)
54 {
55 menu.AddDisabledItem(GetNoActionMenuItemContent(), false);
56 return;
57 }
58
59 AddLockMenuItem(
60 mReleaseLockMenuItemContent,
61 menu,
62 operations,
63 LockMenuOperations.Release,
64 mLockMenuOperations.ReleaseLocks);
65
66 AddLockMenuItem(
67 mRemoveLockMenuItemContent,
68 menu,
69 operations,
70 LockMenuOperations.Remove,
71 mLockMenuOperations.RemoveLocks);
72 }
73
74 static void AddLockMenuItem(
75 GUIContent menuItemContent,
76 GenericMenu menu,
77 LockMenuOperations operations,
78 LockMenuOperations operationsToCheck,
79 GenericMenu.MenuFunction menuFunction)
80 {
81 if (operations.HasFlag(operationsToCheck))
82 {
83 menu.AddItem(
84 menuItemContent,
85 false,
86 menuFunction);
87 return;
88 }
89
90 menu.AddDisabledItem(menuItemContent);
91 }
92
93 static void ProcessMenuOperation(
94 LockMenuOperations operationToExecute,
95 ILockMenuOperations lockMenuOperations)
96 {
97 if (operationToExecute == LockMenuOperations.Remove)
98 {
99 lockMenuOperations.RemoveLocks();
100 return;
101 }
102 }
103
104 static LockMenuOperations GetMenuOperations(Event e)
105 {
106 if (Keyboard.IsKeyPressed(e, KeyCode.Delete))
107 return LockMenuOperations.Remove;
108
109 return LockMenuOperations.None;
110 }
111
112 GUIContent GetNoActionMenuItemContent()
113 {
114 if (mNoActionMenuItemContent == null)
115 {
116 mNoActionMenuItemContent = new GUIContent(
117 PlasticLocalization.Name.NoActionMenuItem.GetString());
118 }
119
120 return mNoActionMenuItemContent;
121 }
122
123 void BuildComponents()
124 {
125 mReleaseLockMenuItemContent = new GUIContent(PlasticLocalization.
126 Name.LockMenuItemReleaseLock.GetString());
127 mRemoveLockMenuItemContent = new GUIContent(string.Format("{0} {1}",
128 PlasticLocalization.Name.LockMenuItemRemoveLock.GetString(),
129 GetPlasticShortcut.ForDelete()));
130 }
131
132 GenericMenu mMenu;
133
134 GUIContent mNoActionMenuItemContent;
135 GUIContent mReleaseLockMenuItemContent;
136 GUIContent mRemoveLockMenuItemContent;
137
138 readonly ILockMenuOperations mLockMenuOperations;
139 }
140}