public ViewModel() { PluginsManager.Instance.UpdateIfObsolete().Forget(); View = new BetterListCollectionView(PluginsManager.Instance.List); View.SortDescriptions.Add(new SortDescription(nameof(PluginEntry.Name), ListSortDirection.Ascending)); }
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(); } }; }
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"); } }
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()); }
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(); }
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)); } }
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; }
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)); }
public KunosCareerObject(IFileAcManager manager, string id, bool enabled) : base(manager, id, enabled) { ChampionshipDrivers = new BetterObservableCollection <ChampionshipDriverEntry>(); ChampionshipDriversView = new BetterListCollectionView(ChampionshipDrivers) { CustomSort = this }; }
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 }
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 }; }
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; }
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(); }
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(); }
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(); } }; }); }); }