diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs index f2f84ed8..9cc3201a 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -42,6 +42,11 @@ namespace Vocaluxe.Base get { return _Playlists.Select(t => t.Name).ToList(); } } + public static List Ids + { + get { return _Playlists.Select(t => t.Id).ToList(); } + } + public static int NumPlaylists { get { return _Playlists.Count; } diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 5d49a606..c14037ba 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -372,9 +372,9 @@ namespace Vocaluxe.Screens else if (_Buttons[_ButtonOptionsOpenSelectedItem].Selected) _HandleSelectButton(); else if (_SelectSlides[_SelectSlideOptionsPlaylistOpen].Selected) - _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistOpen].Selection); + _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistOpen].SelectedTag); else if (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selected) - _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1); + _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag); else if (_Buttons[_ButtonOptionsRandomMedley].Selected) _ToggleSongOptions(ESongOptionsView.Medley); else if (_Buttons[_ButtonOptionsStartMedley].Selected) @@ -533,12 +533,12 @@ namespace Vocaluxe.Screens } else if (_SelectSlides[_SelectSlideOptionsPlaylistOpen].IsValueSelected) { - _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistOpen].Selection); + _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistOpen].SelectedTag); return true; } else if (_SelectSlides[_SelectSlideOptionsPlaylistAdd].IsValueSelected) { - _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1); + _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag); return true; } else if (_Buttons[_ButtonOptionsRandomMedley].Selected) @@ -1279,16 +1279,16 @@ namespace Vocaluxe.Screens private void _UpdatePlaylistNames() { _SelectSlides[_SelectSlideOptionsPlaylistAdd].Clear(); - _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue("TR_SCREENSONG_NEWPLAYLIST"); - _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValues(CPlaylists.Names); + _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue("TR_SCREENSONG_NEWPLAYLIST", tag: -1); + _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValues(CPlaylists.Names, CPlaylists.Ids); _SelectSlides[_SelectSlideOptionsPlaylistOpen].Clear(); - _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValues(CPlaylists.Names); + _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValues(CPlaylists.Names, CPlaylists.Ids); } private void _OpenAndAddPlaylistAction() { - if (_Playlist.ActivePlaylistID != (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) && - (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) != -1) + if (_Playlist.ActivePlaylistID != (_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag) && + (_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag) != -1) { //Open an existing playlist and add song //Check selected game-mode @@ -1301,9 +1301,9 @@ namespace Vocaluxe.Screens gm = EGameMode.TR_GAMEMODE_NORMAL; //Check if Playlist really exists - if (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1 >= 0) + if (_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag >= 0) { - _Playlist.ActivePlaylistID = _SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1; + _Playlist.ActivePlaylistID = _SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag; //Add song to playlist CPlaylists.AddSong(_Playlist.ActivePlaylistID, CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm); @@ -1314,7 +1314,7 @@ namespace Vocaluxe.Screens _Playlist.ScrollToBottom(); } } - else if ((_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) == -1) + else if ((_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag) == -1) { //Create a new playlist and add song //Check selected game-mode @@ -1336,8 +1336,8 @@ namespace Vocaluxe.Screens _OpenPlaylist(_Playlist.ActivePlaylistID); //Add new playlist to select-slide - _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID)); - _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID)); + _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID), _Playlist.ActivePlaylistID); + _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID), _Playlist.ActivePlaylistID); } else { @@ -1359,7 +1359,7 @@ namespace Vocaluxe.Screens private void _SetSelectSlidePlaylistToCurrentPlaylist() { if (_Playlist.ActivePlaylistID > -1) - _SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection = _Playlist.ActivePlaylistID + 1; + _SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag = _Playlist.ActivePlaylistID; else _SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection = 0; } diff --git a/VocaluxeLib/Menu/CSelectSlide.cs b/VocaluxeLib/Menu/CSelectSlide.cs index 64f39b08..fa6310b2 100644 --- a/VocaluxeLib/Menu/CSelectSlide.cs +++ b/VocaluxeLib/Menu/CSelectSlide.cs @@ -436,6 +436,22 @@ namespace VocaluxeLib.Menu AddValue(value); } + public void AddValues(IEnumerable values, IEnumerable tags) + { + using (var e1 = values.GetEnumerator()) + using (var e2 = tags.GetEnumerator()) + { + while (e1.MoveNext() && e2.MoveNext()) + { + AddValue(e1.Current, tag: e2.Current); + } + if (e1.MoveNext() || e2.MoveNext()) + { + throw new ArgumentException("the lists must have the same length"); + } + } + } + public void AddValues(string[] values, CTextureRef[] textures) { Debug.Assert(values.Length == textures.Length); @@ -566,10 +582,10 @@ namespace VocaluxeLib.Menu for (int i = 0; i < numvis; i++) { var el = new CElement - { - Text = new CText(0, 0, 0, _TextH, _MaxW, EAlignment.Center, _Theme.TextStyle, _Theme.TextFont, _TextColor, "T", _PartyModeID), - Img = new CStatic(_PartyModeID) - }; + { + Text = new CText(0, 0, 0, _TextH, _MaxW, EAlignment.Center, _Theme.TextStyle, _Theme.TextFont, _TextColor, "T", _PartyModeID), + Img = new CStatic(_PartyModeID) + }; _VisibleElements.Add(el); } }