Example #1
0
 /// <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);
 }
Example #2
0
        /// <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;
                });
            }
        }
Example #3
0
        /// <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;
        }