/// <summary> /// Equalses the specified object. /// </summary> /// <param name="obj">The object.</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> public bool Equals(CompareSelection obj) { if (obj == null) { return(false); } return(obj.LeftSelectedDefinition == LeftSelectedDefinition && obj.RightSelectedDefinition == RightSelectedDefinition); }
/// <summary> /// Selects the definition by hotkey. /// </summary> /// <param name="hotKey">The hot key.</param> protected virtual void SelectDefinitionByHotkey(Enums.HotKeys hotKey) { if (addingVirtualDefinition) { return; } var selectLeft = false; int?index = null; switch (hotKey) { case Enums.HotKeys.Ctrl_1: index = 0; selectLeft = true; break; case Enums.HotKeys.Ctrl_Shift_1: index = 0; break; case Enums.HotKeys.Ctrl_2: index = 1; selectLeft = true; break; case Enums.HotKeys.Ctrl_Shift_2: index = 1; break; case Enums.HotKeys.Ctrl_3: index = 2; selectLeft = true; break; case Enums.HotKeys.Ctrl_Shift_3: index = 2; break; case Enums.HotKeys.Ctrl_4: index = 3; selectLeft = true; break; case Enums.HotKeys.Ctrl_Shift_4: index = 3; break; case Enums.HotKeys.Ctrl_5: index = 4; selectLeft = true; break; case Enums.HotKeys.Ctrl_Shift_5: index = 4; break; case Enums.HotKeys.Ctrl_6: index = 5; selectLeft = true; break; case Enums.HotKeys.Ctrl_Shift_6: index = 5; break; case Enums.HotKeys.Ctrl_7: index = 6; selectLeft = true; break; case Enums.HotKeys.Ctrl_Shift_7: index = 6; break; case Enums.HotKeys.Ctrl_8: index = 7; selectLeft = true; break; case Enums.HotKeys.Ctrl_Shift_8: index = 7; break; case Enums.HotKeys.Ctrl_9: index = 8; selectLeft = true; break; case Enums.HotKeys.Ctrl_Shift_9: index = 8; break; case Enums.HotKeys.Ctrl_0: index = 9; selectLeft = true; break; case Enums.HotKeys.Ctrl_Shift_0: index = 9; break; default: break; } if (index.HasValue && VirtualDefinitions?.Count() - 1 >= index.GetValueOrDefault()) { Dispatcher.UIThread.SafeInvoke(() => { var left = DefinitionSelection.LeftSelectedDefinition; var right = DefinitionSelection.RightSelectedDefinition; if (selectLeft) { left = VirtualDefinitions.ToList()[index.GetValueOrDefault()]; } else { right = VirtualDefinitions.ToList()[index.GetValueOrDefault()]; } DefinitionSelection = new CompareSelection(left, right); LeftSelectedDefinition = left; RightSelectedDefinition = right; }); } }
/// <summary> /// add virtual definition as an asynchronous operation. /// </summary> /// <param name="definitions">The definitions.</param> /// <param name="token">The token.</param> /// <returns>A Task representing the asynchronous operation.</returns> protected async Task AddVirtualDefinitionAsync(IEnumerable <IDefinition> definitions, CancellationToken token) { addingVirtualDefinition = true; if (previousDefinitions != definitions) { if (!IsBinaryConflict) { var col = definitions.OrderBy(p => SelectedModsOrder.IndexOf(p.ModName)).ToHashSet(); var priorityDefinition = modPatchCollectionService.EvalDefinitionPriority(col); if (priorityDefinition == null || priorityDefinition.Definition == null) { if (priorityDefinition == null) { priorityDefinition = DIResolver.Get <IPriorityDefinitionResult>(); priorityDefinition.PriorityType = DefinitionPriorityType.None; } if (priorityDefinition.Definition == null) { priorityDefinition.Definition = col.First(); } } IDefinition newDefinition = null; if (priorityDefinition.PriorityType != DefinitionPriorityType.NoProvider) { newDefinition = await modPatchCollectionService.CreatePatchDefinitionAsync(priorityDefinition.Definition, CollectionName); if (newDefinition != null) { col.Add(newDefinition); } } VirtualDefinitions = col.ToObservableCollection(); var virtualDefinitions = VirtualDefinitions; if (virtualDefinitions.Any()) { // No reason to anymore not select a default definition on either side, wait a bit first to allow the UI to settle down await Task.Delay(100, token); if (!token.IsCancellationRequested) { DefinitionSelection = null; LeftSelectedDefinition = null; RightSelectedDefinition = null; } await Task.Delay(50, token); if (!token.IsCancellationRequested) { int virtualDefCount = virtualDefinitions.Count(); var left = newDefinition != null?virtualDefinitions.FirstOrDefault(p => p != newDefinition && p != priorityDefinition.Definition && !(virtualDefCount >= 4 && p.IsFromGame)) : virtualDefinitions.FirstOrDefault(p => p != priorityDefinition.Definition); if (left == null) { left = virtualDefinitions.FirstOrDefault(p => p != newDefinition && p != priorityDefinition.Definition); } var right = newDefinition ?? priorityDefinition.Definition; DefinitionSelection = new CompareSelection(left, right); LeftSelectedDefinition = left; RightSelectedDefinition = right; } } } else { VirtualDefinitions = definitions.OrderBy(p => SelectedModsOrder.IndexOf(p.ModName)).ToHashSet(); var virtualDefinitions = VirtualDefinitions; var priorityDefinition = modPatchCollectionService.EvalDefinitionPriority(virtualDefinitions); if (priorityDefinition == null || priorityDefinition.Definition == null) { if (priorityDefinition == null) { priorityDefinition = DIResolver.Get <IPriorityDefinitionResult>(); priorityDefinition.PriorityType = DefinitionPriorityType.None; } if (priorityDefinition.Definition == null) { priorityDefinition.Definition = virtualDefinitions.First(); } } if (virtualDefinitions.Any()) { // No reason to anymore not select a default definition on either side, wait a bit first to allow the UI to settle down await Task.Delay(100, token); if (!token.IsCancellationRequested) { DefinitionSelection = null; LeftSelectedDefinition = null; RightSelectedDefinition = null; } await Task.Delay(50, token); if (!token.IsCancellationRequested) { var left = virtualDefinitions.FirstOrDefault(p => p != priorityDefinition.Definition); var right = priorityDefinition.Definition; DefinitionSelection = new CompareSelection(left, right); LeftSelectedDefinition = left; RightSelectedDefinition = right; } } } } previousDefinitions = definitions; addingVirtualDefinition = false; }