From 75045c6f39fa01409b0aff7b24e97a027ed477a7 Mon Sep 17 00:00:00 2001 From: RumovZ Date: Sat, 25 Apr 2020 10:18:57 +0200 Subject: [PATCH] sort by initial letter first when sorting by letter --- Vocaluxe/Base/CSongSorter.cs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Base/CSongSorter.cs b/Vocaluxe/Base/CSongSorter.cs index 318ba811..d4b59f13 100644 --- a/Vocaluxe/Base/CSongSorter.cs +++ b/Vocaluxe/Base/CSongSorter.cs @@ -111,6 +111,24 @@ namespace Vocaluxe.Base return res; } + /// + /// Compares two songs by means of: first letter of sorting field, sorting field, title. + /// + private int _SortByLetterFieldTitle(CSongPointer s1, CSongPointer s2) + { + int res = String.Compare(s1.SortString[0].ToString(), s2.SortString[0].ToString(), StringComparison.CurrentCultureIgnoreCase); + return res != 0 ? res : _SortByFieldTitle(s1, s2); + } + + /// + /// Compares two songs by means of: first letter of sorting field, sorting field, artist, title. + /// + private int _SortByLetterFieldArtistTitle(CSongPointer s1, CSongPointer s2) + { + int res = String.Compare(s1.SortString[0].ToString(), s2.SortString[0].ToString(), StringComparison.CurrentCultureIgnoreCase); + return res != 0 ? res : _SortByFieldArtistTitle(s1, s2); + } + private void _AddSongToList(CSong song, List list) { string value = null; @@ -172,11 +190,16 @@ namespace Vocaluxe.Base _AddSongToList(song, sortList); switch (_SongSorting) { - case ESongSorting.TR_CONFIG_ARTIST_LETTER: case ESongSorting.TR_CONFIG_ARTIST: case ESongSorting.TR_CONFIG_NONE: sortList.Sort(_SortByFieldTitle); break; + case ESongSorting.TR_CONFIG_ARTIST_LETTER: + sortList.Sort(_SortByLetterFieldTitle); + break; + case ESongSorting.TR_CONFIG_TITLE_LETTER: + sortList.Sort(_SortByLetterFieldArtistTitle); + break; default: sortList.Sort(_SortByFieldArtistTitle); break;