A game about forced loneliness, made by TACStudios
at master 17 kB view raw
1using UnityEditor; 2using UnityEngine; 3 4using PlasticGui; 5using PlasticGui.WorkspaceWindow.Merge; 6using Unity.PlasticSCM.Editor.UI; 7 8namespace Unity.PlasticSCM.Editor.Views.Merge.Developer 9{ 10 internal class MergeViewFileConflictMenu 11 { 12 internal interface IMetaMenuOperations 13 { 14 void DiffSourceWithAncestor(); 15 void DiffDestinationWithAncestor(); 16 void DiffSourceWithDestination(); 17 void ShowHistory(); 18 bool SelectionHasMeta(); 19 } 20 21 internal GenericMenu Menu { get { return mMenu; } } 22 23 internal MergeViewFileConflictMenu( 24 IMergeViewMenuOperations mergeViewMenuOperations, 25 IMetaMenuOperations mergeMetaMenuOperations, 26 bool isIncomingMerge, 27 bool isMergeTo, 28 bool isShelvesetMerge = false) 29 { 30 mMergeViewMenuOperations = mergeViewMenuOperations; 31 mMergeMetaMenuOperations = mergeMetaMenuOperations; 32 mIsShelvesetMerge = isShelvesetMerge; 33 34 BuildComponents(isIncomingMerge, isMergeTo); 35 } 36 37 internal void Popup() 38 { 39 mMenu = new GenericMenu(); 40 41 UpdateMenuItems(mMenu); 42 43 mMenu.ShowAsContext(); 44 } 45 46 internal bool ProcessKeyActionIfNeeded(Event e) 47 { 48 MergeMenuOperations operationToExecute = GetMenuOperations(e); 49 50 if (operationToExecute == MergeMenuOperations.None) 51 return false; 52 53 SelectedMergeChangesGroupInfo info = 54 mMergeViewMenuOperations.GetSelectedMergeChangesGroupInfo(); 55 MergeMenuOperations operations = 56 UpdateMergeMenu.GetAvailableMenuOperations(info); 57 58 if (!operations.HasFlag(operationToExecute)) 59 return false; 60 61 ProcessMenuOperation(operationToExecute, mMergeViewMenuOperations); 62 return true; 63 } 64 65 void MergeSelectedFilesMenuItem_Click() 66 { 67 mMergeViewMenuOperations.MergeContributors(); 68 } 69 70 void MergeKeepingSourceChangesMenuItem_Click() 71 { 72 mMergeViewMenuOperations.MergeKeepingSourceChanges(); 73 } 74 75 void MergeKeepingWorkspaceChangesMenuItem_Click() 76 { 77 mMergeViewMenuOperations.MergeKeepingWorkspaceChanges(); 78 } 79 80 void DiffSourceWithDestinationMenuItem_Click() 81 { 82 mMergeViewMenuOperations.DiffSourceWithDestination(); 83 } 84 85 void DiffDestinationWithAncestorMenuItem_Click() 86 { 87 mMergeViewMenuOperations.DiffDestinationWithAncestor(); 88 } 89 90 void DiffSourceWithAncestorMenuItem_Click() 91 { 92 mMergeViewMenuOperations.DiffSourceWithAncestor(); 93 } 94 95 void DiffMetaSourceWithDestinationMenuItem_Click() 96 { 97 mMergeMetaMenuOperations.DiffSourceWithDestination(); 98 } 99 100 void DiffMetaDestinationWithAncestorMenuItem_Click() 101 { 102 mMergeMetaMenuOperations.DiffDestinationWithAncestor(); 103 } 104 105 void DiffMetaSourceWithAncestorMenuItem_Click() 106 { 107 mMergeMetaMenuOperations.DiffSourceWithAncestor(); 108 } 109 110 void HistoryMetaMenuItem_Click() 111 { 112 mMergeMetaMenuOperations.ShowHistory(); 113 } 114 115 void CopyFilePathMenuItem_Click() 116 { 117 mMergeViewMenuOperations.CopyFilePath(relativePath: false); 118 } 119 120 void CopyRelativeFilePathMenuItem_Click() 121 { 122 mMergeViewMenuOperations.CopyFilePath(relativePath: true); 123 } 124 125 void HistoryMenuItem_Click() 126 { 127 mMergeViewMenuOperations.ShowHistory(); 128 } 129 130 void UpdateMenuItems(GenericMenu menu) 131 { 132 SelectedMergeChangesGroupInfo info = 133 mMergeViewMenuOperations.GetSelectedMergeChangesGroupInfo(); 134 MergeMenuOperations operations = 135 UpdateMergeMenu.GetAvailableMenuOperations(info); 136 137 if (operations == MergeMenuOperations.None) 138 { 139 menu.AddDisabledItem(GetNoActionMenuItemContent()); 140 return; 141 } 142 143 if (!mIsShelvesetMerge) 144 { 145 AddMergeActions(menu, operations); 146 147 menu.AddSeparator(string.Empty); 148 } 149 150 AddDiffActions(menu, info, operations); 151 152 if (mMergeMetaMenuOperations.SelectionHasMeta()) 153 { 154 menu.AddSeparator(string.Empty); 155 156 AddMetaActions(menu, info, operations); 157 } 158 159 menu.AddSeparator(string.Empty); 160 161 AddCopyFilePathActions(menu, operations); 162 163 menu.AddSeparator(string.Empty); 164 165 AddHistoryMenuItem(mHistoryMenuItemContent, menu, operations, HistoryMenuItem_Click); 166 } 167 168 void AddMergeActions( 169 GenericMenu menu, 170 MergeMenuOperations operations) 171 { 172 AddMergeSelectedFilesMenuItem( 173 mMergeSelectedFilesMenuItemContent, menu, operations, MergeSelectedFilesMenuItem_Click); 174 175 AddMergeKeepingSourceChangesMenuItem( 176 mMergeKeepingSourceChangesMenuItemContent, menu, operations, MergeKeepingSourceChangesMenuItem_Click); 177 178 AddMergeKeepingWorkspaceChangesMenuItem( 179 mMergeKeepingWorkspaceChangesMenuItemContent, menu, operations, MergeKeepingWorkspaceChangesMenuItem_Click); 180 } 181 182 void AddDiffActions( 183 GenericMenu menu, 184 SelectedMergeChangesGroupInfo info, 185 MergeMenuOperations operations) 186 { 187 mDiffSourceWithDestinationMenuItemContent.text = 188 UnityMenuItem.EscapedText(info.DiffSourceWithDestinationMenuItemText); 189 AddDiffSourceWithDestinationMenuItem( 190 mDiffSourceWithDestinationMenuItemContent, menu, operations, DiffSourceWithDestinationMenuItem_Click); 191 192 AddDiffDestinationWithAncestorMenuItem( 193 mDiffDestinationWithAncestorMenuItemContent, menu, operations, DiffDestinationWithAncestorMenuItem_Click); 194 195 AddDiffSourceWithAncestorMenuItem( 196 mDiffSourceWithAncestorMenuItem, menu, operations, DiffSourceWithAncestorMenuItem_Click); 197 } 198 199 void AddMetaActions( 200 GenericMenu menu, 201 SelectedMergeChangesGroupInfo info, 202 MergeMenuOperations operations) 203 { 204 mDiffMetaSourceWithDestinationMenuItemContent.text = string.Format( 205 "{0}/{1}", 206 MetaPath.META_EXTENSION, 207 UnityMenuItem.EscapedText(info.DiffSourceWithDestinationMenuItemText)); 208 AddDiffSourceWithDestinationMenuItem( 209 mDiffMetaSourceWithDestinationMenuItemContent, menu, operations, DiffMetaSourceWithDestinationMenuItem_Click); 210 211 AddDiffDestinationWithAncestorMenuItem( 212 mDiffMetaDestinationWithAncestorMenuItemContent, menu, operations, DiffMetaDestinationWithAncestorMenuItem_Click); 213 214 AddDiffSourceWithAncestorMenuItem( 215 mDiffMetaSourceWithAncestorMenuItemContent, menu, operations, DiffMetaSourceWithAncestorMenuItem_Click); 216 217 AddHistoryMenuItem( 218 mHistoryMetaMenuItemContent, menu, operations, HistoryMetaMenuItem_Click); 219 } 220 221 void AddCopyFilePathActions( 222 GenericMenu menu, 223 MergeMenuOperations operations) 224 { 225 AddCopyFilePathMenuItem( 226 mCopyFilePathMenuItemContent, menu, operations, CopyFilePathMenuItem_Click); 227 228 AddCopyFilePathMenuItem( 229 mCopyRelativeFilePathMenuItemContent, menu, operations, CopyRelativeFilePathMenuItem_Click); 230 } 231 232 GUIContent GetNoActionMenuItemContent() 233 { 234 if (mNoActionMenuItemContent == null) 235 { 236 mNoActionMenuItemContent = new GUIContent( 237 PlasticLocalization.GetString( 238 PlasticLocalization.Name.NoActionMenuItem)); 239 } 240 241 return mNoActionMenuItemContent; 242 } 243 244 static void AddMergeSelectedFilesMenuItem( 245 GUIContent menuItemContent, 246 GenericMenu menu, 247 MergeMenuOperations operations, 248 GenericMenu.MenuFunction menuFunction) 249 { 250 if (operations.HasFlag(MergeMenuOperations.MergeContributors)) 251 { 252 menu.AddItem( 253 menuItemContent, 254 false, 255 menuFunction); 256 257 return; 258 } 259 260 menu.AddDisabledItem(menuItemContent); 261 } 262 263 static void AddMergeKeepingSourceChangesMenuItem( 264 GUIContent menuItemContent, 265 GenericMenu menu, 266 MergeMenuOperations operations, 267 GenericMenu.MenuFunction menuFunction) 268 { 269 if (operations.HasFlag(MergeMenuOperations.MergeKeepingSourceChanges)) 270 { 271 menu.AddItem( 272 menuItemContent, 273 false, 274 menuFunction); 275 276 return; 277 } 278 279 menu.AddDisabledItem(menuItemContent); 280 } 281 282 static void AddMergeKeepingWorkspaceChangesMenuItem( 283 GUIContent menuItemContent, 284 GenericMenu menu, 285 MergeMenuOperations operations, 286 GenericMenu.MenuFunction menuFunction) 287 { 288 if (operations.HasFlag(MergeMenuOperations.MergeKeepingWorkspaceChanges)) 289 { 290 menu.AddItem( 291 menuItemContent, 292 false, 293 menuFunction); 294 295 return; 296 } 297 298 menu.AddDisabledItem(menuItemContent); 299 } 300 301 static void AddDiffSourceWithDestinationMenuItem( 302 GUIContent menuItemContent, 303 GenericMenu menu, 304 MergeMenuOperations operations, 305 GenericMenu.MenuFunction menuFunction) 306 { 307 if (operations.HasFlag(MergeMenuOperations.DiffSourceWithDestination)) 308 { 309 menu.AddItem( 310 menuItemContent, 311 false, 312 menuFunction); 313 314 return; 315 } 316 317 menu.AddDisabledItem(menuItemContent); 318 } 319 320 static void AddDiffDestinationWithAncestorMenuItem( 321 GUIContent menuItemContent, 322 GenericMenu menu, 323 MergeMenuOperations operations, 324 GenericMenu.MenuFunction menuFunction) 325 { 326 if (!operations.HasFlag(MergeMenuOperations.DiffDestinationWithAncestor)) 327 return; 328 329 menu.AddItem( 330 menuItemContent, 331 false, 332 menuFunction); 333 } 334 335 static void AddDiffSourceWithAncestorMenuItem( 336 GUIContent menuItemContent, 337 GenericMenu menu, 338 MergeMenuOperations operations, 339 GenericMenu.MenuFunction menuFunction) 340 { 341 if (operations.HasFlag(MergeMenuOperations.DiffSourceWithAncestor)) 342 { 343 menu.AddItem( 344 menuItemContent, 345 false, 346 menuFunction); 347 348 return; 349 } 350 351 menu.AddDisabledItem(menuItemContent); 352 } 353 354 static void AddCopyFilePathMenuItem( 355 GUIContent menuItemContent, 356 GenericMenu menu, 357 MergeMenuOperations operations, 358 GenericMenu.MenuFunction menuFunction) 359 { 360 if (operations.HasFlag(MergeMenuOperations.CopyFilePath)) 361 { 362 menu.AddItem( 363 menuItemContent, 364 false, 365 menuFunction); 366 367 return; 368 } 369 370 menu.AddDisabledItem(menuItemContent); 371 } 372 373 static void AddHistoryMenuItem( 374 GUIContent menuItemContent, 375 GenericMenu menu, 376 MergeMenuOperations operations, 377 GenericMenu.MenuFunction menuFunction) 378 { 379 if (operations.HasFlag(MergeMenuOperations.ShowHistory)) 380 { 381 menu.AddItem( 382 menuItemContent, 383 false, 384 menuFunction); 385 386 return; 387 } 388 389 menu.AddDisabledItem(menuItemContent); 390 } 391 392 static MergeMenuOperations GetMenuOperations(Event e) 393 { 394 if (Keyboard.IsControlOrCommandKeyPressed(e) && 395 Keyboard.IsKeyPressed(e, KeyCode.H)) 396 return MergeMenuOperations.ShowHistory; 397 398 return MergeMenuOperations.None; 399 } 400 401 static void ProcessMenuOperation( 402 MergeMenuOperations operationToExecute, 403 IMergeViewMenuOperations mergeViewMenuOperations) 404 { 405 if (operationToExecute == MergeMenuOperations.ShowHistory) 406 { 407 mergeViewMenuOperations.ShowHistory(); 408 return; 409 } 410 } 411 412 void BuildComponents( 413 bool isIncomingMerge, 414 bool isMergeTo) 415 { 416 mMergeSelectedFilesMenuItemContent = new GUIContent( 417 PlasticLocalization.GetString(PlasticLocalization. 418 Name.MergeSelectedFiles)); 419 420 mMergeKeepingSourceChangesMenuItemContent = new GUIContent( 421 UnityMenuItem.EscapedText( 422 MergeViewTexts.GetMergeKeepingSourceChangesMenuItemText( 423 isIncomingMerge, isMergeTo))); 424 425 mMergeKeepingWorkspaceChangesMenuItemContent = new GUIContent( 426 UnityMenuItem.EscapedText( 427 MergeViewTexts.GetMergeKeepingWorkspaceChangesMenuItemText( 428 isIncomingMerge, isMergeTo))); 429 430 string diffSourceWithAncestorText = UnityMenuItem.EscapedText( 431 MergeViewTexts.GetDiffSourceWithAncestorMenuItemText(isIncomingMerge)); 432 433 mDiffSourceWithDestinationMenuItemContent = new GUIContent(string.Empty); 434 435 mDiffDestinationWithAncestorMenuItemContent = new GUIContent( 436 UnityMenuItem.EscapedText( 437 PlasticLocalization.GetString( 438 PlasticLocalization.Name.DiffDestinationWithAncestor))); 439 440 mDiffSourceWithAncestorMenuItem = new GUIContent( 441 diffSourceWithAncestorText); 442 443 mDiffMetaSourceWithDestinationMenuItemContent = new GUIContent(string.Empty); 444 mDiffMetaDestinationWithAncestorMenuItemContent = new GUIContent( 445 string.Format( 446 "{0}/{1}", 447 MetaPath.META_EXTENSION, 448 UnityMenuItem.EscapedText( 449 PlasticLocalization.GetString( 450 PlasticLocalization.Name.DiffDestinationWithAncestor)))); 451 452 mDiffMetaSourceWithAncestorMenuItemContent = new GUIContent( 453 string.Format( 454 "{0}/{1}", 455 MetaPath.META_EXTENSION, 456 diffSourceWithAncestorText)); 457 458 mHistoryMetaMenuItemContent = new GUIContent( 459 string.Format( 460 "{0}/{1}", 461 MetaPath.META_EXTENSION, 462 PlasticLocalization.Name.ItemsMenuItemHistory.GetString())); 463 464 mCopyFilePathMenuItemContent = new GUIContent(PlasticLocalization.Name.CopyFilePathMenuItem.GetString()); 465 466 mCopyRelativeFilePathMenuItemContent = 467 new GUIContent(PlasticLocalization.Name.CopyRelativeFilePathMenuItem.GetString()); 468 469 mHistoryMenuItemContent = new GUIContent(string.Format("{0} {1}", 470 PlasticLocalization.Name.ItemsMenuItemHistory.GetString(), 471 GetPlasticShortcut.ForHistory())); 472 } 473 474 GenericMenu mMenu; 475 476 GUIContent mNoActionMenuItemContent; 477 478 GUIContent mMergeSelectedFilesMenuItemContent; 479 GUIContent mMergeKeepingSourceChangesMenuItemContent; 480 GUIContent mMergeKeepingWorkspaceChangesMenuItemContent; 481 482 GUIContent mDiffSourceWithDestinationMenuItemContent; 483 GUIContent mDiffDestinationWithAncestorMenuItemContent; 484 GUIContent mDiffSourceWithAncestorMenuItem; 485 486 GUIContent mDiffMetaSourceWithDestinationMenuItemContent; 487 GUIContent mDiffMetaDestinationWithAncestorMenuItemContent; 488 GUIContent mDiffMetaSourceWithAncestorMenuItemContent; 489 GUIContent mHistoryMetaMenuItemContent; 490 491 GUIContent mCopyFilePathMenuItemContent; 492 GUIContent mCopyRelativeFilePathMenuItemContent; 493 GUIContent mHistoryMenuItemContent; 494 495 readonly IMergeViewMenuOperations mMergeViewMenuOperations; 496 readonly IMetaMenuOperations mMergeMetaMenuOperations; 497 498 readonly bool mIsShelvesetMerge; 499 } 500}