Exemplo n.º 1
0
        public HierarchicalGroup CreateGroup(string presetsKey, string displayName = "", string prependWithDefault = null)
        {
            Func <IEnumerable <object> > groupPresets = () => {
                var result = UserPresetsControl.GroupPresets(presetsKey);

                if (prependWithDefault != null)
                {
                    var menuItem = new HierarchicalItem {
                        Header = new TextBlock {
                            Text = prependWithDefault, FontStyle = FontStyles.Italic
                        }
                    };

                    HierarchicalItemsView.SetValue(menuItem, null);
                    result = result.Prepend(menuItem);
                }

                return(result);
            };

            var group = new HierarchicalGroup(displayName, groupPresets());

            var handler = new EventHandler((sender, e) => {
                group.ReplaceEverythingBy(groupPresets());
            });

            PresetsManager.Instance.Watcher(presetsKey).Update += handler;
            _presetsHandlersToRemove.Add(new PresetsHandlerToRemove {
                Key = presetsKey, Handler = handler
            });

            return(group);
        }
Exemplo n.º 2
0
 public static IEnumerable<object> GroupPresets(string presetsKey, Action<ISavedPresetEntry> action) {
     var group = new HierarchicalGroup("", UserPresetsControl.GroupPresets(presetsKey));
     var result = new HierarchicalItemsView(o => {
         action((ISavedPresetEntry)o);
     }, group, false);
     return result;
 }
Exemplo n.º 3
0
 public static IEnumerable <T> OfType <T>([NotNull] this HierarchicalGroup source)
 {
     if (source == null)
     {
         throw new ArgumentNullException(nameof(source));
     }
     return(source.Flatten().OfType <T>());
 }
Exemplo n.º 4
0
        public static IEnumerable <object> GroupPresets(string presetsKey, [CanBeNull] Action <ISavedPresetEntry> action)
        {
            var group  = new HierarchicalGroup("", UserPresetsControl.GroupPresets(presetsKey));
            var result = new HierarchicalItemsView(o => {
                action?.Invoke((ISavedPresetEntry)o);
            }, group, false);

            return(result);
        }
Exemplo n.º 5
0
        public HierarchicalItemsView Create(string presetsKey, Action<ISavedPresetEntry> action, string displayName = "") {
            var group = new HierarchicalGroup(displayName, UserPresetsControl.GroupPresets(presetsKey));
            var result = new HierarchicalItemsView(o => {
                action((ISavedPresetEntry)o);
            }, group, false);

            var handler = new EventHandler((sender, e) => {
                group.ReplaceEverythingBy(UserPresetsControl.GroupPresets(presetsKey));
            });

            PresetsManager.Instance.Watcher(presetsKey).Update += handler;
            _presetsHandlersToRemove.Add(new PresetsHandlerToRemove { Key = presetsKey, Handler = handler });

            return result;
        }
Exemplo n.º 6
0
            public ViewModel()
            {
                Entries = new ChangeableObservableCollection <PresetPerMode>();
                Modes   = new BetterObservableCollection <Mode>();

                AppPresets   = new HierarchicalGroup("", UserPresetsControl.GroupPresets(AcSettingsHolder.AppsPresetsKey));
                AudioPresets = new HierarchicalGroup("", UserPresetsControl.GroupPresets(AcSettingsHolder.AudioPresetsKey));
                VideoPresets = new HierarchicalGroup("", UserPresetsControl.GroupPresets(AcSettingsHolder.VideoPresetsKey));

                UpdateModes();
                FilesStorage.Instance.Watcher(ContentCategory.PresetsPerModeConditions).Update += OnCategoriesUpdate;

                Saveable.Initialize();

                Entries.CollectionChanged   += OnCollectionChanged;
                Entries.ItemPropertyChanged += OnItemPropertyChanged;
            }
Exemplo n.º 7
0
 public static IEnumerable <object> Flatten([NotNull] this HierarchicalGroup source)
 {
     foreach (var i in source)
     {
         var g = i as HierarchicalGroup;
         if (g != null)
         {
             foreach (var r in g.Flatten())
             {
                 yield return(r);
             }
         }
         else
         {
             yield return(i);
         }
     }
 }
Exemplo n.º 8
0
        public RaceGridViewModel(bool ignoreStartingPosition = false, [CanBeNull] string keySaveable = KeySaveable)
        {
            IgnoreStartingPosition = ignoreStartingPosition;

            _saveable = new SaveHelper <SaveableData>(keySaveable, () => {
                var data = new SaveableData {
                    ModeId                = Mode.Id,
                    FilterValue           = FilterValue,
                    ShuffleCandidates     = ShuffleCandidates,
                    AiLevelFixed          = AiLevelFixed,
                    AiLevelArrangeRandom  = AiLevelArrangeRandom,
                    AiLevelArrangeReverse = AiLevelArrangeReverse,
                    AiLevel               = AiLevel,
                    AiLevelMin            = AiLevelMin,
                    OpponentsNumber       = OpponentsNumber,
                    StartingPosition      = StartingPosition,
                };

                if (Mode == BuiltInGridMode.CandidatesManual)
                {
                    var priority = false;
                    data.CarIds  = NonfilteredList.Select(x => {
                        if (x.CandidatePriority != 1)
                        {
                            priority = true;
                        }
                        return(x.Car.Id);
                    }).ToArray();

                    if (priority)
                    {
                        data.CandidatePriorities = NonfilteredList.Select(x => x.CandidatePriority).ToArray();
                    }
                }
                else if (Mode == BuiltInGridMode.Custom)
                {
                    data.CarIds = NonfilteredList.Where(x => !x.SpecialEntry).Select(x => x.Car.Id).ToArray();
                }

                if (data.CarIds != null)
                {
                    var filtered = NonfilteredList.Where(x => !x.SpecialEntry).ToList();

                    if (filtered.Any(x => x.AiLevel.HasValue))
                    {
                        data.AiLevels = filtered.Select(x => x.AiLevel ?? -1).ToArray();
                    }

                    if (filtered.Any(x => x.Name != null))
                    {
                        data.Names = filtered.Select(x => x.Name).ToArray();
                    }

                    if (filtered.Any(x => x.Nationality != null))
                    {
                        data.Nationalities = filtered.Select(x => x.Nationality).ToArray();
                    }

                    if (filtered.Any(x => x.CarSkin != null))
                    {
                        data.SkinIds = filtered.Select(x => x.CarSkin?.Id).ToArray();
                    }
                }

                return(data);
            }, data => {
                ShuffleCandidates    = data.ShuffleCandidates ?? true;
                AiLevelFixed         = data.AiLevelFixed ?? false;
                AiLevelArrangeRandom = data.AiLevelArrangeRandomly.HasValue ? (data.AiLevelArrangeRandomly.Value ? 1d : 0d) :
                                       data.AiLevelArrangeRandom ?? 0.1d;
                AiLevelArrangeReverse = data.AiLevelArrangeReverse ?? false;
                AiLevel    = data.AiLevel ?? 95;
                AiLevelMin = data.AiLevelMin ?? 85;

                FilterValue  = data.FilterValue;
                ErrorMessage = null;

                var mode = Modes.GetByIdOrDefault <IRaceGridMode>(data.ModeId);
                if (mode == null)
                {
                    NonfatalError.NotifyBackground(ToolsStrings.RaceGrid_GridModeIsMissing,
                                                   string.Format(ToolsStrings.RaceGrid_GridModeIsMissing_Commentary, data.ModeId));
                    Mode = BuiltInGridMode.SameCar;
                }
                else
                {
                    Mode = mode;
                }

                if (Mode.CandidatesMode)
                {
                    if (Mode == BuiltInGridMode.CandidatesManual && data.CarIds != null)
                    {
                        // TODO: Async?
                        NonfilteredList.ReplaceEverythingBy(data.CarIds.Select(x => CarsManager.Instance.GetById(x)).Select((x, i) => {
                            if (x == null)
                            {
                                return(null);
                            }

                            var aiLevel   = data.AiLevels?.ElementAtOrDefault(i);
                            var carSkinId = data.SkinIds?.ElementAtOrDefault(i);
                            return(new RaceGridEntry(x)
                            {
                                CandidatePriority = data.CandidatePriorities?.ElementAtOr(i, 1) ?? 1,
                                AiLevel = aiLevel >= 0 ? aiLevel : (int?)null,
                                Name = data.Names?.ElementAtOrDefault(i),
                                Nationality = data.Nationalities?.ElementAtOrDefault(i),
                                CarSkin = carSkinId != null ? x.GetSkinById(carSkinId) : null,
                            });
                        }).NonNull());
                    }
                    else
                    {
                        NonfilteredList.Clear();
                    }

                    SetOpponentsNumberInternal(data.OpponentsNumber ?? 7);
                }
                else
                {
                    NonfilteredList.ReplaceEverythingBy(data.CarIds?.Select(x => CarsManager.Instance.GetById(x)).Select((x, i) => {
                        if (x == null)
                        {
                            return(null);
                        }

                        var aiLevel   = data.AiLevels?.ElementAtOrDefault(i);
                        var carSkinId = data.SkinIds?.ElementAtOrDefault(i);

                        return(new RaceGridEntry(x)
                        {
                            AiLevel = aiLevel >= 0 ? aiLevel : null,
                            Name = data.Names?.ElementAtOrDefault(i),
                            Nationality = data.Nationalities?.ElementAtOrDefault(i),
                            CarSkin = carSkinId != null ? x.GetSkinById(carSkinId) : null,
                        });
                    }).NonNull() ?? new RaceGridEntry[0]);
                }

                StartingPosition = data.StartingPosition ?? 7;
                FinishLoading();
            }, Reset);

            _presetsHelper = new PresetsMenuHelper();

            _randomGroup = new HierarchicalGroup(ToolsStrings.RaceGrid_Random);
            UpdateRandomModes();

            Modes = new HierarchicalGroup {
                BuiltInGridMode.SameCar,
                _randomGroup,
                BuiltInGridMode.Custom,
                _presetsHelper.Create(PresetableKeyValue, p => {
                    ImportFromPresetData(p.ReadData());
                }, ControlsStrings.Common_Presets)
            };

            NonfilteredList.CollectionChanged   += OnCollectionChanged;
            NonfilteredList.ItemPropertyChanged += OnItemPropertyChanged;
            FilteredView = new BetterListCollectionView(NonfilteredList)
            {
                CustomSort = this
            };

            // _saveable.Initialize();
            FilesStorage.Instance.Watcher(ContentCategory.GridTypes).Update += OnGridTypesUpdate;
        }
Exemplo n.º 9
0
        public RaceGridViewModel(bool ignoreStartingPosition = false) {
            IgnoreStartingPosition = ignoreStartingPosition;

            _saveable = new SaveHelper<SaveableData>(KeySaveable, () => {
                var data = new SaveableData {
                    ModeId = Mode.Id,
                    FilterValue = FilterValue,
                    ShuffleCandidates = ShuffleCandidates,
                    AiLevelFixed = AiLevelFixed,
                    AiLevelArrangeRandom = AiLevelArrangeRandom,
                    AiLevelArrangeReverse = AiLevelArrangeReverse,
                    AiLevel = AiLevel,
                    AiLevelMin = AiLevelMin,
                    OpponentsNumber = OpponentsNumber,
                    StartingPosition = StartingPosition,
                };

                if (Mode == BuiltInGridMode.CandidatesManual) {
                    var priority = false;
                    data.CarIds = NonfilteredList.Select(x => {
                        if (x.CandidatePriority != 1) priority = true;
                        return x.Car.Id;
                    }).ToArray();

                    if (priority) {
                        data.CandidatePriorities = NonfilteredList.Select(x => x.CandidatePriority).ToArray();
                    }
                } else if (Mode == BuiltInGridMode.Custom) {
                    data.CarIds = NonfilteredList.Where(x => !x.SpecialEntry).Select(x => x.Car.Id).ToArray();
                }

                if (data.CarIds != null) {
                    var filtered = NonfilteredList.Where(x => !x.SpecialEntry).ToList();

                    if (filtered.Any(x => x.AiLevel.HasValue)) {
                        data.AiLevels = filtered.Select(x => x.AiLevel ?? -1).ToArray();
                    }

                    if (filtered.Any(x => x.Name != null)) {
                        data.Names = filtered.Select(x => x.Name).ToArray();
                    }

                    if (filtered.Any(x => x.Nationality != null)) {
                        data.Nationalities = filtered.Select(x => x.Nationality).ToArray();
                    }

                    if (filtered.Any(x => x.CarSkin != null)) {
                        data.SkinIds = filtered.Select(x => x.CarSkin?.Id).ToArray();
                    }
                }

                return data;
            }, data => {
                ShuffleCandidates = data.ShuffleCandidates ?? true;
                AiLevelFixed = data.AiLevelFixed ?? false;
                AiLevelArrangeRandom = data.AiLevelArrangeRandomly.HasValue ? (data.AiLevelArrangeRandomly.Value ? 1d : 0d) :
                        data.AiLevelArrangeRandom ?? 0.1d;
                AiLevelArrangeReverse = data.AiLevelArrangeReverse ?? false;
                AiLevel = data.AiLevel ?? 95;
                AiLevelMin = data.AiLevelMin ?? 85;

                FilterValue = data.FilterValue;
                ErrorMessage = null;

                var mode = Modes.GetByIdOrDefault<IRaceGridMode>(data.ModeId);
                if (mode == null) {
                    NonfatalError.NotifyBackground(ToolsStrings.RaceGrid_GridModeIsMissing,
                            string.Format(ToolsStrings.RaceGrid_GridModeIsMissing_Commentary, data.ModeId));
                    Mode = BuiltInGridMode.SameCar;
                } else {
                    Mode = mode;
                }

                if (Mode.CandidatesMode) {
                    if (Mode == BuiltInGridMode.CandidatesManual && data.CarIds != null) {
                        // TODO: Async?
                        NonfilteredList.ReplaceEverythingBy(data.CarIds.Select(x => CarsManager.Instance.GetById(x)).Select((x, i) => {
                            if (x == null) return null;

                            var aiLevel = data.AiLevels?.ElementAtOrDefault(i);
                            var carSkinId = data.SkinIds?.ElementAtOrDefault(i);
                            return new RaceGridEntry(x) {
                                CandidatePriority = data.CandidatePriorities?.ElementAtOr(i, 1) ?? 1,
                                AiLevel = aiLevel >= 0 ? aiLevel : (int?)null,
                                Name = data.Names?.ElementAtOrDefault(i),
                                Nationality = data.Nationalities?.ElementAtOrDefault(i),
                                CarSkin = carSkinId != null ? x.GetSkinById(carSkinId) : null,
                            };
                        }).NonNull());
                    } else {
                        NonfilteredList.Clear();
                    }

                    SetOpponentsNumberInternal(data.OpponentsNumber ?? 7);
                } else {
                    NonfilteredList.ReplaceEverythingBy(data.CarIds?.Select(x => CarsManager.Instance.GetById(x)).Select((x, i) => {
                        if (x == null) return null;

                        var aiLevel = data.AiLevels?.ElementAtOrDefault(i);
                        var carSkinId = data.SkinIds?.ElementAtOrDefault(i);

                        return new RaceGridEntry(x) {
                            AiLevel = aiLevel >= 0 ? aiLevel : null,
                            Name = data.Names?.ElementAtOrDefault(i),
                            Nationality = data.Nationalities?.ElementAtOrDefault(i),
                            CarSkin = carSkinId != null ? x.GetSkinById(carSkinId) : null,
                        };
                    }).NonNull() ?? new RaceGridEntry[0]);
                }
                
                StartingPosition = data.StartingPosition ?? 7;
                FinishLoading();
            }, Reset);

            _presetsHelper = new PresetsMenuHelper();

            _randomGroup = new HierarchicalGroup(ToolsStrings.RaceGrid_Random);
            UpdateRandomModes();

            Modes = new HierarchicalGroup {
                BuiltInGridMode.SameCar,
                _randomGroup,
                BuiltInGridMode.Custom,
                _presetsHelper.Create(PresetableKeyValue, p => {
                    ImportFromPresetData(p.ReadData());
                }, ControlsStrings.Common_Presets)
            };

            NonfilteredList.CollectionChanged += OnCollectionChanged;
            FilteredView = new BetterListCollectionView(NonfilteredList) { CustomSort = this };

            // _saveable.Initialize();
            FilesStorage.Instance.Watcher(ContentCategory.GridTypes).Update += OnGridTypesUpdate;
        }
Exemplo n.º 10
0
 public static T FirstOrDefault <T>([NotNull] this HierarchicalGroup source, Func <T, bool> filter)
 {
     return(source.HierarchicalWhere(filter).FirstOrDefault());
 }
Exemplo n.º 11
0
 public static IEnumerable <T> HierarchicalWhere <T>([NotNull] this HierarchicalGroup source, Func <T, bool> filter)
 {
     return(source.OfType <T>().Where(filter));
 }
Exemplo n.º 12
0
 public static T GetByIdOrDefault <T>([NotNull] this HierarchicalGroup source, string id) where T : IWithId
 {
     return(source.OfType <T>().GetByIdOrDefault(id));
 }
Exemplo n.º 13
0
 public static T FirstOrDefault <T>([NotNull] this HierarchicalGroup source)
 {
     return(source.OfType <T>().FirstOrDefault());
 }