A game about forced loneliness, made by TACStudios
at master 354 lines 12 kB view raw
1using UnityEditor; 2using UnityEngine; 3 4using Codice.CM.Common; 5using PlasticGui.WorkspaceWindow.QueryViews.Changesets; 6using PlasticGui; 7using Unity.PlasticSCM.Editor.Tool; 8using Unity.PlasticSCM.Editor.UI; 9 10namespace Unity.PlasticSCM.Editor.Views.Changesets 11{ 12 internal class ChangesetsViewMenu 13 { 14 internal GenericMenu Menu { get { return mMenu; } } 15 16 public interface IMenuOperations 17 { 18 void DiffBranch(); 19 ChangesetExtendedInfo GetSelectedChangeset(); 20 } 21 22 internal ChangesetsViewMenu( 23 IChangesetMenuOperations changesetMenuOperations, 24 IMenuOperations menuOperations, 25 bool isGluonMode) 26 { 27 mChangesetMenuOperations = changesetMenuOperations; 28 mMenuOperations = menuOperations; 29 mIsGluonMode = isGluonMode; 30 31 BuildComponents(); 32 } 33 34 internal void Popup() 35 { 36 mMenu = new GenericMenu(); 37 38 UpdateMenuItems(mMenu); 39 40 mMenu.ShowAsContext(); 41 } 42 43 internal bool ProcessKeyActionIfNeeded(Event e) 44 { 45 int selectedChangesetsCount = mChangesetMenuOperations.GetSelectedChangesetsCount(); 46 47 ChangesetMenuOperations operationToExecute = GetMenuOperations( 48 e, selectedChangesetsCount > 1); 49 50 if (operationToExecute == ChangesetMenuOperations.None) 51 return false; 52 53 ChangesetMenuOperations operations = ChangesetMenuUpdater.GetAvailableMenuOperations( 54 selectedChangesetsCount, 55 mIsGluonMode, 56 mMenuOperations.GetSelectedChangeset().BranchId, 57 mLoadedBranchId, 58 false); 59 60 if (!operations.HasFlag(operationToExecute)) 61 return false; 62 63 ProcessMenuOperation(operationToExecute); 64 return true; 65 } 66 67 internal void SetLoadedBranchId(long loadedBranchId) 68 { 69 mLoadedBranchId = loadedBranchId; 70 } 71 72 void DiffChangesetMenuItem_Click() 73 { 74 mChangesetMenuOperations.DiffChangeset(); 75 } 76 77 void DiffSelectedChangesetsMenuItem_Click() 78 { 79 mChangesetMenuOperations.DiffSelectedChangesets(); 80 } 81 82 void RevertToChangesetMenuItem_Click() 83 { 84 mChangesetMenuOperations.RevertToChangeset(); 85 } 86 87 void DiffBranchMenuItem_Click() 88 { 89 mMenuOperations.DiffBranch(); 90 } 91 92 void CreateBranchFromChangesetMenuItem_Click() 93 { 94 mChangesetMenuOperations.CreateBranch(); 95 } 96 97 void SwitchToChangesetMenuItem_Click() 98 { 99 mChangesetMenuOperations.SwitchToChangeset(); 100 } 101 102 void MergeChangesetMenuItem_Click() 103 { 104 mChangesetMenuOperations.MergeChangeset(); 105 } 106 107 void CreateCodeReviewMenuItem_Click() 108 { 109 mChangesetMenuOperations.CreateCodeReview(); 110 } 111 112 void UpdateMenuItems(GenericMenu menu) 113 { 114 ChangesetExtendedInfo singleSelectedChangeset = mMenuOperations.GetSelectedChangeset(); 115 116 ChangesetMenuOperations operations = ChangesetMenuUpdater.GetAvailableMenuOperations( 117 mChangesetMenuOperations.GetSelectedChangesetsCount(), 118 mIsGluonMode, 119 singleSelectedChangeset.BranchId, 120 mLoadedBranchId, 121 false); 122 123 AddDiffChangesetMenuItem( 124 mDiffChangesetMenuItemContent, 125 menu, 126 singleSelectedChangeset, 127 operations, 128 DiffChangesetMenuItem_Click); 129 130 AddChangesetsMenuItem( 131 mDiffSelectedChangesetsMenuItemContent, 132 menu, 133 operations, 134 ChangesetMenuOperations.DiffSelectedChangesets, 135 DiffSelectedChangesetsMenuItem_Click); 136 137 if (!IsOnMainBranch(singleSelectedChangeset)) 138 { 139 menu.AddSeparator(string.Empty); 140 141 AddDiffBranchMenuItem( 142 mDiffBranchMenuItemContent, 143 menu, 144 singleSelectedChangeset, 145 operations, 146 DiffBranchMenuItem_Click); 147 } 148 149 menu.AddSeparator(string.Empty); 150 151 AddChangesetsMenuItem( 152 mCreateBranchMenuItemContent, 153 menu, 154 operations, 155 ChangesetMenuOperations.CreateBranch, 156 CreateBranchFromChangesetMenuItem_Click); 157 158 AddChangesetsMenuItem( 159 mSwitchToChangesetMenuItemContent, 160 menu, 161 operations, 162 ChangesetMenuOperations.SwitchToChangeset, 163 SwitchToChangesetMenuItem_Click); 164 165 if (!mIsGluonMode) 166 { 167 AddChangesetsMenuItem( 168 mRevertToChangesetMenuItemContent, 169 menu, 170 operations, 171 ChangesetMenuOperations.RevertToChangeset, 172 RevertToChangesetMenuItem_Click); 173 174 menu.AddSeparator(string.Empty); 175 176 AddChangesetsMenuItem( 177 mMergeChangesetMenuItemContent, 178 menu, 179 operations, 180 ChangesetMenuOperations.MergeChangeset, 181 MergeChangesetMenuItem_Click); 182 } 183 184 menu.AddSeparator(string.Empty); 185 186 AddChangesetsMenuItem( 187 mCreateCodeReviewMenuItemContent, 188 menu, 189 operations, 190 ChangesetMenuOperations.CreateCodeReview, 191 CreateCodeReviewMenuItem_Click); 192 } 193 194 void ProcessMenuOperation( 195 ChangesetMenuOperations operationToExecute) 196 { 197 if (operationToExecute == ChangesetMenuOperations.DiffChangeset) 198 { 199 DiffChangesetMenuItem_Click(); 200 return; 201 } 202 203 if (operationToExecute == ChangesetMenuOperations.DiffSelectedChangesets) 204 { 205 DiffSelectedChangesetsMenuItem_Click(); 206 return; 207 } 208 209 if (operationToExecute == ChangesetMenuOperations.MergeChangeset) 210 { 211 MergeChangesetMenuItem_Click(); 212 return; 213 } 214 } 215 216 static void AddChangesetsMenuItem( 217 GUIContent menuItemContent, 218 GenericMenu menu, 219 ChangesetMenuOperations operations, 220 ChangesetMenuOperations operationsToCheck, 221 GenericMenu.MenuFunction menuFunction) 222 { 223 if (operations.HasFlag(operationsToCheck)) 224 { 225 menu.AddItem( 226 menuItemContent, 227 false, 228 menuFunction); 229 230 return; 231 } 232 233 menu.AddDisabledItem(menuItemContent); 234 } 235 236 static void AddDiffChangesetMenuItem( 237 GUIContent menuItemContent, 238 GenericMenu menu, 239 ChangesetExtendedInfo changeset, 240 ChangesetMenuOperations operations, 241 GenericMenu.MenuFunction menuFunction) 242 { 243 string changesetName = 244 changeset != null ? 245 changeset.ChangesetId.ToString() : 246 string.Empty; 247 248 menuItemContent.text = string.Format("{0} {1}", 249 PlasticLocalization.GetString( 250 PlasticLocalization.Name.DiffChangesetMenuItem, 251 changesetName), 252 GetPlasticShortcut.ForDiff()); 253 254 if (operations.HasFlag(ChangesetMenuOperations.DiffChangeset)) 255 { 256 menu.AddItem( 257 menuItemContent, 258 false, 259 menuFunction); 260 return; 261 } 262 263 menu.AddDisabledItem( 264 menuItemContent); 265 } 266 267 static void AddDiffBranchMenuItem( 268 GUIContent menuItemContent, 269 GenericMenu menu, 270 ChangesetExtendedInfo changeset, 271 ChangesetMenuOperations operations, 272 GenericMenu.MenuFunction menuFunction) 273 { 274 menuItemContent.text = 275 PlasticLocalization.Name.DiffBranchMenuItem.GetString( 276 GetShorten.BranchNameFromChangeset(changeset)); 277 278 if (operations.HasFlag(ChangesetMenuOperations.DiffChangeset)) 279 { 280 menu.AddItem( 281 menuItemContent, 282 false, 283 menuFunction); 284 return; 285 } 286 287 menu.AddDisabledItem( 288 menuItemContent); 289 } 290 291 static bool IsOnMainBranch(ChangesetExtendedInfo singleSeletedChangeset) 292 { 293 if (singleSeletedChangeset == null) 294 return false; 295 296 return singleSeletedChangeset.BranchName == MAIN_BRANCH_NAME; 297 } 298 299 static ChangesetMenuOperations GetMenuOperations( 300 Event e, bool isMultipleSelection) 301 { 302 if (Keyboard.IsControlOrCommandKeyPressed(e) && 303 Keyboard.IsKeyPressed(e, KeyCode.D)) 304 return isMultipleSelection ? 305 ChangesetMenuOperations.DiffSelectedChangesets : 306 ChangesetMenuOperations.DiffChangeset; 307 308 if (Keyboard.IsControlOrCommandKeyPressed(e) && 309 Keyboard.IsKeyPressed(e, KeyCode.M)) 310 return ChangesetMenuOperations.MergeChangeset; 311 312 return ChangesetMenuOperations.None; 313 } 314 315 void BuildComponents() 316 { 317 mDiffChangesetMenuItemContent = new GUIContent(string.Empty); 318 mDiffSelectedChangesetsMenuItemContent = new GUIContent(string.Format("{0} {1}", 319 PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemDiffSelected), 320 GetPlasticShortcut.ForDiff())); 321 mDiffBranchMenuItemContent = new GUIContent(); 322 mCreateBranchMenuItemContent = new GUIContent( 323 PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemCreateBranch)); 324 mSwitchToChangesetMenuItemContent = new GUIContent( 325 PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemSwitchToChangeset)); 326 mRevertToChangesetMenuItemContent = new GUIContent( 327 PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemRevertToChangeset)); 328 mMergeChangesetMenuItemContent = new GUIContent(string.Format("{0} {1}", 329 PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetMenuItemMergeFromChangeset), 330 GetPlasticShortcut.ForMerge())); 331 mCreateCodeReviewMenuItemContent = new GUIContent( 332 PlasticLocalization.Name.ChangesetMenuCreateANewCodeReview.GetString()); 333 } 334 335 GenericMenu mMenu; 336 337 GUIContent mDiffChangesetMenuItemContent; 338 GUIContent mDiffSelectedChangesetsMenuItemContent; 339 GUIContent mDiffBranchMenuItemContent; 340 GUIContent mCreateBranchMenuItemContent; 341 GUIContent mSwitchToChangesetMenuItemContent; 342 GUIContent mRevertToChangesetMenuItemContent; 343 GUIContent mMergeChangesetMenuItemContent; 344 GUIContent mCreateCodeReviewMenuItemContent; 345 346 readonly IChangesetMenuOperations mChangesetMenuOperations; 347 readonly IMenuOperations mMenuOperations; 348 readonly bool mIsGluonMode; 349 350 long mLoadedBranchId = -1; 351 352 const string MAIN_BRANCH_NAME = "/main"; 353 } 354}