From fdef790583785f59d974635aa0f703261c3ab5dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Sun, 26 May 2013 12:07:52 +0200 Subject: [PATCH] More work on jump-to-function. Should it be active in 0.3? There is still something to do. --- Vocaluxe/Screens/CScreenSong.cs | 36 +++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 40e9582d..35c9595e 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -1005,12 +1005,40 @@ namespace Vocaluxe.Screens int curSelected = _SongMenus[_SongMenu].GetActualSelection(); if (CSongs.IsInCategory) { - //TODO: Check and use sorting method + //TODO: What's to do with multiple tags? + //How can we get current letter? I think we have to save it - Or is there a better method? ReadOnlyCollection songs = CSongs.VisibleSongs; int ct = songs.Count; - if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)) - start = curSelected + 1; - int visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)); + int visibleID = -1; + switch (CConfig.SongSorting) + { + case ESongSorting.TR_CONFIG_ARTIST: + case ESongSorting.TR_CONFIG_ARTIST_LETTER: + if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)) + start = curSelected + 1; + visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)); + break; + + //TODO: Does this make sense? Maybe we should deactivate this for years? You could only jump between 1 and 2 + case ESongSorting.TR_CONFIG_YEAR: + case ESongSorting.TR_CONFIG_DECADE: + if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Year.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)) + start = curSelected + 1; + visibleID = _FindIndex(songs, start, element => element.Year.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)); + break; + + case ESongSorting.TR_CONFIG_TITLE_LETTER: + if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Title.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)) + start = curSelected + 1; + visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)); + break; + + case ESongSorting.TR_CONFIG_FOLDER: + if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Folder.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)) + start = curSelected + 1; + visibleID = _FindIndex(songs, start, element => element.Folder.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)); + break; + } if (visibleID > -1) _SongMenus[_SongMenu].SetSelectedSong(visibleID); }