Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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);
                }
            }
        }