public void ReevaulateSong(SongViewModel song) { bool belongsInList = !IsCircular && RootEvaluator.Eval(song); bool updated = false; if (belongsInList && !CurrentSongs.ActuallyContains(song)) { CurrentSongs.Add(song); updated = true; } else if (!belongsInList && CurrentSongs.ActuallyContains(song)) { CurrentSongs.Remove(song); updated = true; } if (updated && !IsCircular) { foreach (MixViewModel mixViewModel in DependentMixes) { mixViewModel.ReevaulateSong(song); } } }
public void ReevaulateSong(SongViewModel song) { bool belongsInList = !IsCircular && RootEvaluator.Eval(song); if (belongsInList && !CurrentSongs.ActuallyContains(song)) { CurrentSongs.Add(song); } else if (!belongsInList && CurrentSongs.ActuallyContains(song)) { CurrentSongs.Remove(song); } }
public void Reset() { CurrentSongs.Clear(); CurrentSongs.CollectionChanged -= HandleCurrentSongsCollectionChanged; CurrentSongs.UpdateLimit((uint)Limit, HasLimit); CurrentSongs.UpdateSortFunction(new SongSortGenericOrder(MixSortOrderToSongProperty(SortType), MixSortOrderToIsAscending(SortType))); List <MixViewModel> oldDependentMixes = new List <MixViewModel>(DependentMixes); UpdateDependencyList(); if (!IsCircular) { foreach (SongViewModel song in LibraryViewModel.Current.FlatSongCollection) { if (RootEvaluator.Eval(song)) { CurrentSongs.Add(song); } } } // Reset any mixes that used to depend on this and might not anymore foreach (MixViewModel mixViewModel in oldDependentMixes) { if (!DependentMixes.Contains(mixViewModel)) { mixViewModel.Reset(); } } if (!IsCircular) { // Reset any mixes that now depend on this List <MixViewModel> copyDependentMixes = new List <MixViewModel>(DependentMixes); foreach (MixViewModel mixViewModel in copyDependentMixes) { mixViewModel.Reset(); } } CurrentSongs.CollectionChanged += HandleCurrentSongsCollectionChanged; ResetLength(); }
public void OnSongPropertyChanged(SongViewModel song, string propertyName) { if (RootEvaluator.IsPropertyAffected(propertyName)) { ReevaulateSong(song); } if (propertyName == MixSortOrderToSongProperty(SortType)) { // Remove and reinsert to update sort order if (CurrentSongs.ActuallyContains(song)) { CurrentSongs.Remove(song); CurrentSongs.Add(song); } } }