From 6799768e351480109afb04c3dd8b8d98b8c3e515 Mon Sep 17 00:00:00 2001 From: derivator Date: Fri, 21 Oct 2016 22:11:10 +0200 Subject: [PATCH] Make CScreenSong, CSongFilter able to show only songs that are in a specified playlist --- PartyModes/PartyModeChallenge/CPartyModeChallenge.cs | 1 + Vocaluxe/Base/CMain.cs | 9 +++++++-- Vocaluxe/Base/CPlaylists.cs | 6 ++++++ Vocaluxe/Base/CSongFilter.cs | 12 +++++++++++- Vocaluxe/Base/CSongs.cs | 4 ++-- Vocaluxe/Screens/CScreenSong.cs | 6 +++--- VocaluxeLib/IBasic.cs | 3 ++- VocaluxeLib/PartyModes/CPartyModeNormal.cs | 1 + VocaluxeLib/PartyModes/IPartyMode.cs | 1 + 9 files changed, 34 insertions(+), 9 deletions(-) diff --git a/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs b/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs index e336d4de..ee39a94b 100644 --- a/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs +++ b/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs @@ -149,6 +149,7 @@ namespace VocaluxeLib.PartyModes.Challenge _ScreenSongOptions.Sorting.SearchString = String.Empty; _ScreenSongOptions.Sorting.SearchActive = false; _ScreenSongOptions.Sorting.DuetOptions = EDuetOptions.NoDuets; + _ScreenSongOptions.Sorting.FilterPlaylistID = -1; GameData = new SData {NumPlayer = 4, NumPlayerAtOnce = 2, NumRounds = 12, NumJokers = 5, RefillJokers = true, CurrentRoundNr = 1, ProfileIDs = new List(), CatSongIndices = null, Results = null}; } diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 3a131649..9e61ae0e 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -782,9 +782,9 @@ namespace Vocaluxe.Base CSongs.ResetPartySongSung(catIndex); } - public void SortSongs(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions) + public void SortSongs(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions, int playlistID) { - CSongs.Sort(sorting, tabs, ignoreArticles, searchString, duetOptions); + CSongs.Sort(sorting, tabs, ignoreArticles, searchString, duetOptions, playlistID); } public void NextCategory() @@ -1014,5 +1014,10 @@ namespace Vocaluxe.Base { return CPlaylists.GetSong(playlistID, songIndex); } + + public bool ContainsSong(int playlistID, int songID) + { + return CPlaylists.ContainsSong(playlistID, songID); + } } } \ No newline at end of file diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs index f2f84ed8..471e1320 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -199,6 +199,12 @@ namespace Vocaluxe.Base return pl.Songs[songIndex]; } + public static bool ContainsSong(int playlistID, int songID) + { + CPlaylistFile pl = Get(playlistID); + return pl != null && pl.Songs.Find((x) => x.SongID == songID) != null; + } + #region private methods private static void _SortByName() { diff --git a/Vocaluxe/Base/CSongFilter.cs b/Vocaluxe/Base/CSongFilter.cs index 4c4f014e..20596803 100644 --- a/Vocaluxe/Base/CSongFilter.cs +++ b/Vocaluxe/Base/CSongFilter.cs @@ -29,6 +29,7 @@ namespace Vocaluxe.Base private String _SearchString = String.Empty; private EDuetOptions _DuetOptions = EDuetOptions.All; + private int _PlaylistID = -1; public List FilteredSongs { @@ -67,10 +68,16 @@ namespace Vocaluxe.Base public void SetOptions(String searchString, EDuetOptions duetOptions) { - if (searchString != _SearchString || duetOptions != _DuetOptions) + SetOptions(searchString, duetOptions, -1); + } + + public void SetOptions(String searchString, EDuetOptions duetOptions, int playlistID) + { + if (searchString != _SearchString || duetOptions != _DuetOptions || playlistID != _PlaylistID) { _SearchString = searchString; _DuetOptions = duetOptions; + _PlaylistID = playlistID; _SetChanged(); } } @@ -88,6 +95,9 @@ namespace Vocaluxe.Base foreach (CSong song in CSongs.Songs) { + if (_PlaylistID != -1 && !CBase.Playlist.ContainsSong(_PlaylistID, song.ID)) + continue; + if ((song.IsDuet && _DuetOptions != EDuetOptions.NoDuets) || (!song.IsDuet && _DuetOptions != EDuetOptions.Duets)) { if (searchStrings == null) diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 3216d620..ce0fbb66 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -324,9 +324,9 @@ namespace Vocaluxe.Base _CategoriesForRandom.Clear(); } - public static void Sort(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions) + public static void Sort(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions, int playlistID) { - Filter.SetOptions(searchString, duetOptions); + Filter.SetOptions(searchString, duetOptions, playlistID); Sorter.SetOptions(sorting, ignoreArticles); Categorizer.Tabs = tabs; } diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 5d49a606..64af49a2 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -630,7 +630,7 @@ namespace Vocaluxe.Screens _SelectedCategoryIndex = -2; _Sso = CParty.GetSongSelectionOptions(); - CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, _Sso.Sorting.SearchString, _Sso.Sorting.DuetOptions); + CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, _Sso.Sorting.SearchString, _Sso.Sorting.DuetOptions, _Sso.Sorting.FilterPlaylistID); _SearchActive = _Sso.Sorting.SearchActive; _SearchText = _Sso.Sorting.SearchString; @@ -761,7 +761,7 @@ namespace Vocaluxe.Screens if (_Sso.Selection.PartyMode) { - CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, _Sso.Sorting.SearchString, _Sso.Sorting.DuetOptions); + CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, _Sso.Sorting.SearchString, _Sso.Sorting.DuetOptions, _Sso.Sorting.FilterPlaylistID); _SearchActive = _Sso.Sorting.SearchActive; _SearchText = _Sso.Sorting.SearchString; @@ -1121,7 +1121,7 @@ namespace Vocaluxe.Screens refresh = true; } - CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, newFilterString, _Sso.Sorting.DuetOptions); + CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, newFilterString, _Sso.Sorting.DuetOptions, _Sso.Sorting.FilterPlaylistID); if (songID == -1 || CSongs.NumSongsVisible <= songIndex || CSongs.GetVisibleSongByIndex(songIndex).ID != songID) refresh = true; diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs index 0e35883e..61388560 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -251,7 +251,7 @@ namespace VocaluxeLib void AddPartySongSung(int songID); void ResetSongSung(int catIndex = -1); - void SortSongs(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions); + void SortSongs(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions, int playlistID); void NextCategory(); void PrevCategory(); @@ -325,6 +325,7 @@ namespace VocaluxeLib int GetSongCount(int playlistID); CPlaylistSong GetSong(int playlistID, int songIndex); + bool ContainsSong(int playlistID, int songIndex); } public interface IPreviewPlayer diff --git a/VocaluxeLib/PartyModes/CPartyModeNormal.cs b/VocaluxeLib/PartyModes/CPartyModeNormal.cs index a84ecb73..6d01ff74 100644 --- a/VocaluxeLib/PartyModes/CPartyModeNormal.cs +++ b/VocaluxeLib/PartyModes/CPartyModeNormal.cs @@ -67,6 +67,7 @@ namespace VocaluxeLib.PartyModes _ScreenSongOptions.Sorting.SearchString = String.Empty; _ScreenSongOptions.Sorting.SearchActive = false; _ScreenSongOptions.Sorting.DuetOptions = EDuetOptions.All; + _ScreenSongOptions.Sorting.FilterPlaylistID = -1; } public override bool Init() diff --git a/VocaluxeLib/PartyModes/IPartyMode.cs b/VocaluxeLib/PartyModes/IPartyMode.cs index c2c431a2..d78f0047 100644 --- a/VocaluxeLib/PartyModes/IPartyMode.cs +++ b/VocaluxeLib/PartyModes/IPartyMode.cs @@ -34,6 +34,7 @@ namespace VocaluxeLib.PartyModes public EOffOn IgnoreArticles; public string SearchString; public bool SearchActive; + public int FilterPlaylistID; //show only songs that are in this playlist, -1 for all songs public EDuetOptions DuetOptions; }