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 0e289c83..dc0167dc 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -777,9 +777,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() @@ -1009,5 +1009,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 9cc3201a..881d3ccb 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -204,6 +204,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 ad8c73d0..0e7d9dfe 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -643,7 +643,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; @@ -774,7 +774,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; @@ -1134,7 +1134,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 df81ea54..1ec80d1f 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -250,7 +250,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(); @@ -324,6 +324,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; }