Exemplo n.º 1
0
            public ViewModel()
            {
                PluginsManager.Instance.UpdateIfObsolete().Forget();

                View = new BetterListCollectionView(PluginsManager.Instance.List);
                View.SortDescriptions.Add(new SortDescription(nameof(PluginEntry.Name), ListSortDirection.Ascending));
            }
Exemplo n.º 2
0
            private void Prepare(BetterListCollectionView view, string key)
            {
                view.SortDescriptions.Add(new SortDescription(nameof(GenericMod.AppliedOrder), ListSortDirection.Ascending));
                view.SortDescriptions.Add(new SortDescription(nameof(GenericMod.DisplayName), ListSortDirection.Ascending));

                var storageKey = $".genericMods.selected:{key}";

                void LoadCurrent()
                {
                    var selected = ValuesStorage.Get <string>(storageKey);

                    if (selected != null)
                    {
                        view.MoveCurrentTo(view.OfType <GenericMod>().FirstOrDefault(x => x.DisplayName == selected) ??
                                           view.OfType <GenericMod>().FirstOrDefault());
                    }
                }

                LoadCurrent();
                view.CurrentChanged += async(sender, args) => {
                    if (view.CurrentItem is GenericMod selected)
                    {
                        ValuesStorage.Set(storageKey, selected.DisplayName);
                    }
                    else
                    {
                        await Task.Delay(1);

                        LoadCurrent();
                    }
                };
            }
Exemplo n.º 3
0
            public ViewModel([CanBeNull] GenericModsEnabler enabler, IFilter <string> filter)
            {
                _enabler = enabler;
                _filter  = filter;

                if (enabler != null)
                {
                    Disabled = new BetterListCollectionView(enabler.Mods)
                    {
                        Filter = CreateFilter(false)
                    };
                    Enabled = new BetterListCollectionView(enabler.Mods)
                    {
                        Filter = CreateFilter(true)
                    };

                    Prepare(Enabled, "enabled");
                    Prepare(Disabled, "disabled");

                    enabler.Mods.ItemPropertyChanged += OnItemPropertyChanged;
                    enabler.Mods.CollectionChanged   += OnCollectionChanged;
                    PresetableCategory = new PresetsCategory(enabler.ModsDirectory, ".mep");
                }
                else
                {
                    PresetableCategory = new PresetsCategory(SettingsHolder.GenericMods.GetModsDirectory(), ".mep");
                }
            }
Exemplo n.º 4
0
        private PluginsRequirement([CanBeNull] Func <PluginEntry, bool> filter, string[] ids)
        {
            _required = ids;
            _filter   = filter ?? (p => ids.ArrayContains(p.Id));

            ListView = new BetterListCollectionView(PluginsManager.Instance.List);
            ListView.SortDescriptions.Add(new SortDescription(nameof(PluginEntry.Name), ListSortDirection.Ascending));

            try {
                ListView.Filter = Filter;
            } catch (Exception e) {
                // What the hell is that?
                Logging.Error(e);
            }

            UpdateReady();

            if (!IsReady)
            {
                PluginsManager.Instance.UpdateIfObsolete();
            }

            WeakEventManager <PluginsManager, PluginEventArgs> .AddHandler(PluginsManager.Instance, nameof(PluginsManager.PluginEnabled),
                                                                           (sender, args) => UpdateReady());

            WeakEventManager <PluginsManager, PluginEventArgs> .AddHandler(PluginsManager.Instance, nameof(PluginsManager.PluginDisabled),
                                                                           (sender, args) => UpdateReady());

            WeakEventManager <PluginsManager, EventArgs> .AddHandler(PluginsManager.Instance, nameof(PluginsManager.ListUpdated),
                                                                     (sender, args) => UpdateReady());
        }
Exemplo n.º 5
0
            public ViewModel(bool isLive)
            {
                if (PatchHelper.GetInstalledVersion() == null)
                {
                    _selectedPageId.Value = null;
                }

                PagesView = new BetterListCollectionView(Pages);
                PagesView.GroupDescriptions.Add(new PropertyGroupDescription(nameof(PatchPage.Group)));

                _isLive = isLive;
                _dir    = FileUtils.NormalizePath(Path.Combine(PatchHelper.GetRootDirectory(), "config"));

                _watcher = new FileSystemWatcher(AcRootDirectory.Instance.RequireValue)
                {
                    NotifyFilter          = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName,
                    IncludeSubdirectories = true,
                    EnableRaisingEvents   = true
                };

                _watcher.Created += OnWatcherChanged;
                _watcher.Changed += OnWatcherChanged;
                _watcher.Deleted += OnWatcherChanged;
                _watcher.Renamed += OnWatcherRenamed;

                CreateConfigs();
                RescanPossibleIssues();
            }
Exemplo n.º 6
0
 public ViewModel([CanBeNull] IFilter <string> filter)
 {
     View = new BetterListCollectionView(BlacklistStorage.Instance.Items);
     if (filter != null)
     {
         View.Filter = x => x is BlacklistItem v && (filter.Test(v.Guid) || v.KnownAs != null && filter.Test(v.KnownAs));
     }
 }
Exemplo n.º 7
0
 public AcEnabledOnlyCollection_WrappedImpl(IAcWrapperObservableCollection collection)
 {
     _wrapped = new DelegateWrappedCollection <AcItemWrapper, T>((IReadOnlyList <AcItemWrapper>)collection, x => x.Value.Enabled ? x.Value as T : null);
     _view    = new BetterListCollectionView(_wrapped)
     {
         Filter = o => o != null
     };
     collection.WrappedValueChanged += OnWrappedValueChanged;
 }
Exemplo n.º 8
0
 private CupViewModel()
 {
     CupSupportedObjects.ItemPropertyChanged += OnCupSupportedObjectPropertyChanged;
     ToUpdate = new BetterListCollectionView(CupSupportedObjects)
     {
         Filter = x => (x as ICupSupportedObject)?.IsCupUpdateAvailable == true
     };
     ToUpdate.SortDescriptions.Add(new SortDescription(nameof(AcObjectNew.DisplayName), ListSortDirection.Ascending));
 }
Exemplo n.º 9
0
 public KunosCareerObject(IFileAcManager manager, string id, bool enabled)
     : base(manager, id, enabled)
 {
     ChampionshipDrivers     = new BetterObservableCollection <ChampionshipDriverEntry>();
     ChampionshipDriversView = new BetterListCollectionView(ChampionshipDrivers)
     {
         CustomSort = this
     };
 }
Exemplo n.º 10
0
 public PluginsManager(string dir)
 {
     PluginsDirectory = dir;
     List             = new BetterObservableCollection <PluginEntry>();
     ListView         = new BetterListCollectionView(List);
     ListView.SortDescriptions.Add(new SortDescription(nameof(PluginEntry.Name), ListSortDirection.Ascending));
     ReloadLocalList();
     // TODO: Directory watching
 }
Exemplo n.º 11
0
 public ViewModel(ClipboardHistory history)
 {
     History = history;
     Pinned  = new BetterListCollectionView(History.Items)
     {
         Filter = x => (x as ClipboardEntry)?.IsPinned == true
     };
     Recent = new BetterListCollectionView(History.Items)
     {
         Filter = x => (x as ClipboardEntry)?.IsPinned != true
     };
 }
Exemplo n.º 12
0
            public ViewModel(List <CarWithTyres> cars)
            {
                OutputKeys     = new BetterObservableCollection <SettingEntry>();
                OutputKeysView = new BetterListCollectionView(OutputKeys)
                {
                    GroupDescriptions = { new PropertyGroupDescription(nameof(SettingEntry.Tag)) },
                    CustomSort        = KeyComparer.Instance
                };

                TrainingModel    = new TrainingViewModel();
                ExampleCarsModel = new ExampleCarsViewModel(cars);
                ExampleCarsModel.InvalidatePlotModel += OnInvalidatePlotModel;
            }
Exemplo n.º 13
0
        private PatchSettingsModel()
        {
            try {
                if (PatchHelper.GetInstalledVersion() == null)
                {
                    _selectedPageId.Value = null;
                }
            } catch (Exception e) {
                Logging.Error(e);
                _selectedPageId.Value = null;
            }

            Pages     = new BetterObservableCollection <PatchPage>();
            PagesView = new BetterListCollectionView(Pages);
            PagesView.GroupDescriptions?.Add(new PropertyGroupDescription(nameof(PatchPage.Group)));

            _isLive = false;
            _dir    = FileUtils.NormalizePath(Path.Combine(PatchHelper.RequireRootDirectory(), "config"));
            CreateConfigs();
        }
Exemplo n.º 14
0
            public OnlineViewModel([CanBeNull] string filterParam, Action <ServerEntry> showDetails)
            {
                _showDetails = showDetails;

                string[] sources = null;
                string   filter  = null;

                if (filterParam != null)
                {
                    var splitIndex = filterParam.LastIndexOf('@');
                    if (splitIndex != -1)
                    {
                        sources = filterParam.Substring(splitIndex + 1).Split(',').Select(x => x.Trim().ToLowerInvariant())
                                  .Distinct().ToArray();
                        filter = splitIndex == 0 ? null : filterParam.Substring(0, splitIndex);
                    }
                    else
                    {
                        filter = filterParam;
                    }
                }

                Pack         = OnlineManager.Instance.GetSourcesPack(sources);
                UserListMode = Pack.SourceWrappers.Count == 1 && FileBasedOnlineSources.Instance.GetUserSources()
                               .Select(x => x.Id)
                               .Append(FileBasedOnlineSources.FavouritesKey)
                               .Contains(Pack.SourceWrappers[0].Id);

                ListFilter = GetFilter(filter, sources);
                Key        = GetKey(filterParam);

                Manager  = OnlineManager.Instance;
                MainList = new BetterListCollectionView(Manager.List);

                SortingModes = sources?.Length == 1 && sources[0] == FileBasedOnlineSources.RecentKey
                        ? DefaultSortingModes.Prepend(new SettingEntry(null, "Default")).ToArray() : DefaultSortingModes;

                LoadQuickFilter();
                SortingMode       = SortingModes.GetByIdOrDefault(LimitedStorage.Get(LimitedSpace.OnlineSorting, Key)) ?? SortingModes[0];
                ListFilter.Second = CreateQuickFilter();
            }
Exemplo n.º 15
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;
        }
            public ExampleCarsViewModel(List <CarWithTyres> cars)
            {
                CommonTyresList = new BetterObservableCollection <CommonTyres>();

                CarsList = cars;
                UpdateListFilterLater();
                UpdateSummary();

                CarsView = new BetterListCollectionView(CarsList)
                {
                    Filter = o => _listFilterInstance?.Test(((CarWithTyres)o).Car) ?? true
                };

                TestKeys     = new BetterObservableCollection <SettingEntry>();
                TestKeysView = new BetterListCollectionView(TestKeys)
                {
                    GroupDescriptions =
                    {
                        new PropertyGroupDescription(nameof(SettingEntry.Tag))
                    },
                    CustomSort = KeyComparer.Instance
                };

                (_saveable = new SaveHelper <Data>("CreateTyres.ExampleCars", () => new Data {
                    Checked = CarsList.ToDictionary(x => x.Car.Id,
                                                    x => Tuple.Create(x.IsChecked, x.Tyres.Where(y => y.IsChecked).Select(y => y.Entry.DisplayName).ToArray())),
                    Filter = CarsFilter,
                    TyresName = TyresName,
                    TyresShortName = TyresShortName,
                }, o => {
                    for (var i = CarsList.Count - 1; i >= 0; i--)
                    {
                        var c = CarsList[i];
                        var e = o.Checked?.GetValueOrDefault(c.Car.Id);
                        c.IsChecked = o.Checked == null ? c.Car.Author == AcCommonObject.AuthorKunos : e?.Item1 == true;
                        for (var j = c.Tyres.Count - 1; j >= 0; j--)
                        {
                            var tyre = c.Tyres[j];
                            tyre.IsChecked = e?.Item2.ArrayContains(tyre.Entry.DisplayName) == true;
                        }
                    }
                    CarsFilter = o.Filter;
                    TyresName = o.TyresName;
                    TyresShortName = o.TyresShortName;
                })).Initialize();
                UpdateListFilter();

                CarsList.ForEach(x => {
                    x.PropertyChanged += (sender, args) => {
                        if (args.PropertyName == nameof(CarWithTyres.IsChecked))
                        {
                            UpdateSummary();
                        }
                    };

                    x.Tyres.ForEach(y => {
                        y.PropertyChanged += (sender, args) => {
                            if (args.PropertyName == nameof(CarTyres.IsChecked))
                            {
                                UpdateSummary();
                            }
                        };
                    });
                });
            }