Refactored sorting and filtering

This commit is contained in:
Flamefire committed 2013-02-25 00:17:14 +01:00
1 parent 22d6eb7487
commit ce9e426bae
3 files changed
+289 -588

No files matched your search

+4
View File
@@ -28,3 +28,7 @@ Output/Songs
/Vocaluxe/Vocaluxe.csproj.user
/Output/Config.xml
*.ipch
*.log
+278 -586
View File
@@ -36,6 +36,7 @@ namespace Vocaluxe.Base
static class CSongs
{
private static List<CSong> _Songs = new List<CSong>();
private static List<CSong> _FilteredSongs = new List<CSong>();
private static SongPointer[] _SongsSortList = new SongPointer[0];
private static List<CSong> _SongsForRandom = new List<CSong>();
@@ -44,6 +45,7 @@ namespace Vocaluxe.Base
private static bool _CoverLoaded = false;
private static int _CoverLoadIndex = -1;
private static int _CatIndex = -1;
private static bool _Init = false;
private static List<CCategory> _Categories = new List<CCategory>();
private static List<CCategory> _CategoriesForRandom = new List<CCategory>();
@@ -379,6 +381,274 @@ namespace Vocaluxe.Base
get { return _Categories.ToArray(); }
}
private static void FilterSongs(String SearchFilter, bool ShowDuetSongs)
{
if (_Init && _SearchFilter == SearchFilter && _ShowDuetSongs == ShowDuetSongs)
return;
_Init = true;
_SearchFilter = SearchFilter;
_ShowDuetSongs = ShowDuetSongs;
_FilteredSongs.Clear();
string[] searchStrings = null;
if (_SearchFilter != String.Empty)
searchStrings = _SearchFilter.ToUpper().Split(new char[] { ' ' });
foreach (CSong song in _Songs)
{
if (!song.IsDuet || _ShowDuetSongs)
{
if (_SearchFilter == String.Empty)
_FilteredSongs.Add(song);
else if (searchStrings != null)
{
string search = song.Title.ToUpper() + " " + song.Artist.ToUpper() + " " + song.FolderName.ToUpper() + " " + song.FileName.ToUpper();
bool contains = true;
foreach (string str in searchStrings)
{
contains &= search.Contains(str);
}
if (contains)
_FilteredSongs.Add(song);
}
}
}
}
private static void SortSongs()
{
List<SongPointer> SortList = new List<SongPointer>();
switch (_SongSorting)
{
case ESongSorting.TR_CONFIG_EDITION:
foreach (CSong song in _FilteredSongs)
{
if (song.Edition.Count == 0)
SortList.Add(new SongPointer(song.ID, ""));
else
{
foreach (String edition in song.Edition)
{
SortList.Add(new SongPointer(song.ID, edition));
}
}
}
break;
case ESongSorting.TR_CONFIG_GENRE:
foreach (CSong song in _FilteredSongs)
{
if (song.Genre.Count == 0)
SortList.Add(new SongPointer(song.ID, ""));
else
{
foreach (String genre in song.Genre)
{
SortList.Add(new SongPointer(song.ID, genre));
}
}
}
break;
case ESongSorting.TR_CONFIG_FOLDER:
foreach (CSong song in _FilteredSongs)
{
SortList.Add(new SongPointer(song.ID, song.FolderName));
}
break;
case ESongSorting.TR_CONFIG_ARTIST:
foreach (CSong song in _FilteredSongs)
{
SortList.Add(new SongPointer(song.ID, song.Artist));
}
break;
case ESongSorting.TR_CONFIG_ARTIST_LETTER:
foreach (CSong song in _FilteredSongs)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
SortList.Add(new SongPointer(song.ID, song.ArtistSorting));
else
SortList.Add(new SongPointer(song.ID, song.Artist));
}
break;
case ESongSorting.TR_CONFIG_NONE:
case ESongSorting.TR_CONFIG_TITLE_LETTER:
foreach (CSong song in _FilteredSongs)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
SortList.Add(new SongPointer(song.ID, song.TitleSorting));
else
SortList.Add(new SongPointer(song.ID, song.Title));
}
break;
case ESongSorting.TR_CONFIG_DECADE:
foreach (CSong song in _FilteredSongs)
{
string sortString = song.Year;
if (sortString == "0000")
sortString = "";
else
{
sortString = sortString.Substring(0, 3);
sortString += "0 - " + sortString + "9";
}
SortList.Add(new SongPointer(song.ID, sortString));
}
break;
case ESongSorting.TR_CONFIG_YEAR:
foreach (CSong song in _FilteredSongs)
{
SortList.Add(new SongPointer(song.ID, song.Year));
}
break;
case ESongSorting.TR_CONFIG_LANGUAGE:
foreach (CSong song in _FilteredSongs)
{
if (song.Language.Count == 0)
SortList.Add(new SongPointer(song.ID, ""));
else
{
foreach (String language in song.Language)
{
SortList.Add(new SongPointer(song.ID, language));
}
}
}
break;
default:
break;
}
SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
}
return res;
});
_SongsSortList = SortList.ToArray();
}
private static void FillCategories()
{
string category = "";
string NoCategoryName = "";
bool done = false;
switch (_SongSorting)
{
case ESongSorting.TR_CONFIG_EDITION:
NoCategoryName = CLanguage.Translate("TR_SCREENSONG_NOEDITION");
break;
case ESongSorting.TR_CONFIG_GENRE:
NoCategoryName = CLanguage.Translate("TR_SCREENSONG_NOGENRE");
break;
case ESongSorting.TR_CONFIG_DECADE:
case ESongSorting.TR_CONFIG_YEAR:
NoCategoryName = CLanguage.Translate("TR_SCREENSONG_NOYEAR");
break;
case ESongSorting.TR_CONFIG_LANGUAGE:
NoCategoryName = CLanguage.Translate("TR_SCREENSONG_NOLANGUAGE");
break;
case ESongSorting.TR_CONFIG_FOLDER:
case ESongSorting.TR_CONFIG_ARTIST:
break;
case ESongSorting.TR_CONFIG_NONE:
for (int i = 0; i < _SongsSortList.Length; i++)
{
_SongsSortList[i].CatIndex = 0;
}
category = CLanguage.Translate("TR_SCREENSONG_ALLSONGS");
_Categories.Add(new CCategory(category));
done = true;
break;
case ESongSorting.TR_CONFIG_ARTIST_LETTER:
case ESongSorting.TR_CONFIG_TITLE_LETTER:
int NotLetterCat = -1;
for (int i = 0; i < _SongsSortList.Length; i++)
{
Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString.Normalize(NormalizationForm.FormD)[0]);
if (!Char.IsLetter(firstLetter))
{
firstLetter = '#';
}
if (firstLetter.ToString() != category)
{
if (firstLetter != '#' || NotLetterCat == -1)
{
category = firstLetter.ToString();
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
_SongsSortList[i].CatIndex = _Categories.Count - 1;
if (firstLetter == '#')
NotLetterCat = _SongsSortList[i].CatIndex;
}
else
_SongsSortList[i].CatIndex = NotLetterCat;
}
else
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
done = true;
break;
default:
break;
}
if (!done)
{
for (int i = 0; i < _SongsSortList.Length; i++)
{
if (_SongsSortList[i].SortString.Length > 0)
{
if (_SongsSortList[i].SortString != category)
{
category = _SongsSortList[i].SortString;
_Categories.Add(new CCategory(category));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
else
{
if (NoCategoryName != category)
{
category = NoCategoryName;
_Categories.Add(new CCategory(category));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
}
}
}
public static void Sort(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, String SearchString)
{
_Sort(Sorting, Tabs, IgnoreArticles, SearchString, false, _ShowDuetSongs);
@@ -397,606 +667,28 @@ namespace Vocaluxe.Base
if (!force && Sorting == _SongSorting && Tabs == _Tabs && IgnoreArticles == _IgnoreArticles && SearchString == _SearchFilter && ShowDuetSongs == _ShowDuetSongs)
return; //nothing to do
_Categories.Clear();
string category = String.Empty;
_IgnoreArticles = IgnoreArticles;
_SongSorting = Sorting;
_Tabs = Tabs;
_ShowDuetSongs = ShowDuetSongs;
_SearchFilter = SearchString;
List<SongPointer> _SortList = new List<SongPointer>();
List<CSong> _SongList = new List<CSong>();
foreach (CSong song in _Songs)
{
if (!song.IsDuet || _ShowDuetSongs)
{
if (_SearchFilter == String.Empty)
_SongList.Add(song);
else
{
string search = song.Title.ToUpper() + " " + song.Artist.ToUpper() + " " + song.FolderName.ToUpper() + " " + song.FileName.ToUpper();
string[] searchStrings = _SearchFilter.ToUpper().Split(new char[]{' '});
bool contains = searchStrings != null;
foreach (string str in searchStrings)
{
contains &= search.Contains(str);
}
if (contains)
_SongList.Add(song);
}
}
}
switch (_SongSorting)
{
case ESongSorting.TR_CONFIG_EDITION:
foreach (CSong song in _SongList)
{
if (song.Edition.Count == 0)
_SortList.Add(new SongPointer(song.ID, String.Empty));
else
{
for (int i = 0; i < song.Edition.Count; i++)
{
_SortList.Add(new SongPointer(song.ID, song.Edition[i]));
}
}
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
}
return res;
});
_SongsSortList = _SortList.ToArray();
_Categories.Clear();
for (int i = 0; i < _SongsSortList.Length; i++ )
{
if (_SongsSortList[i].SortString.Length > 0)
{
if (_SongsSortList[i].SortString != category)
{
category = _SongsSortList[i].SortString;
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
else
{
if (CLanguage.Translate("TR_SCREENSONG_NOEDITION") != category)
{
category = CLanguage.Translate("TR_SCREENSONG_NOEDITION");
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
}
break;
case ESongSorting.TR_CONFIG_GENRE:
foreach (CSong song in _SongList)
{
if (song.Genre.Count == 0)
_SortList.Add(new SongPointer(song.ID, String.Empty));
else
{
for (int i = 0; i < song.Genre.Count; i++)
{
_SortList.Add(new SongPointer(song.ID, song.Genre[i]));
}
}
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
}
return res;
});
_SongsSortList = _SortList.ToArray();
_Categories.Clear();
for (int i = 0; i < _SongsSortList.Length; i++)
{
if (_SongsSortList[i].SortString.Length > 0)
{
if (_SongsSortList[i].SortString != category)
{
category = _SongsSortList[i].SortString;
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
else
{
if (CLanguage.Translate("TR_SCREENSONG_NOGENRE") != category)
{
category = CLanguage.Translate("TR_SCREENSONG_NOGENRE");
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
}
break;
case ESongSorting.TR_CONFIG_NONE:
foreach (CSong song in _SongList)
{
_SortList.Add(new SongPointer(song.ID, String.Empty));
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
});
_SongsSortList = _SortList.ToArray();
_Categories.Clear();
for (int i = 0; i < _SongsSortList.Length; i++)
{
_SongsSortList[i].CatIndex = 0;
}
category = CLanguage.Translate("TR_SCREENSONG_ALLSONGS");
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
break;
case ESongSorting.TR_CONFIG_FOLDER:
foreach (CSong song in _SongList)
{
_SortList.Add(new SongPointer(song.ID, song.FolderName));
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
}
return res;
});
_SongsSortList = _SortList.ToArray();
_Categories.Clear();
for (int i = 0; i < _SongsSortList.Length; i++)
{
if (_SongsSortList[i].SortString != category)
{
category = _SongsSortList[i].SortString;
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
break;
case ESongSorting.TR_CONFIG_ARTIST:
foreach (CSong song in _SongList)
{
_SortList.Add(new SongPointer(song.ID, song.Artist));
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
int res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
});
_SongsSortList = _SortList.ToArray();
_Categories.Clear();
for (int i = 0; i < _SongsSortList.Length; i++)
{
if (_SongsSortList[i].SortString != category)
{
category = _SongsSortList[i].SortString;
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
break;
case ESongSorting.TR_CONFIG_ARTIST_LETTER:
foreach (CSong song in _SongList)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
_SortList.Add(new SongPointer(song.ID, song.ArtistSorting));
else
_SortList.Add(new SongPointer(song.ID, song.Artist));
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
else
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
}
return res;
});
_SongsSortList = _SortList.ToArray();
_Categories.Clear();
int NotLetterCat = -1;
for (int i=0; i < _SongsSortList.Length; i++)
{
Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString.Normalize(NormalizationForm.FormD)[0]);
if (!Char.IsLetter(firstLetter))
{
firstLetter = '#';
}
if (firstLetter.ToString() != category)
{
if (firstLetter != '#' || NotLetterCat == -1)
{
category = firstLetter.ToString();
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
_SongsSortList[i].CatIndex = _Categories.Count - 1;
if (firstLetter == '#')
NotLetterCat = _SongsSortList[i].CatIndex;
}
else
_SongsSortList[i].CatIndex = NotLetterCat;
}
else
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
break;
case ESongSorting.TR_CONFIG_TITLE_LETTER:
foreach (CSong song in _SongList)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
_SortList.Add(new SongPointer(song.ID, song.TitleSorting));
else
_SortList.Add(new SongPointer(song.ID, song.Title));
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
}
else
{
return _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
}
}
return res;
});
_SongsSortList = _SortList.ToArray();
_Categories.Clear();
NotLetterCat = -1;
for (int i=0; i < _SongsSortList.Length; i++)
{
Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString.Normalize(NormalizationForm.FormD)[0]);
if (!Char.IsLetter(firstLetter))
{
firstLetter = '#';
}
if (firstLetter.ToString() != category)
{
if (firstLetter != '#' || NotLetterCat == -1)
{
category = firstLetter.ToString();
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
_SongsSortList[i].CatIndex = _Categories.Count - 1;
if (firstLetter == '#')
NotLetterCat = _SongsSortList[i].CatIndex;
}
else
_SongsSortList[i].CatIndex = NotLetterCat;
}
else
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
break;
case ESongSorting.TR_CONFIG_DECADE:
foreach (CSong song in _SongList)
{
_SortList.Add(new SongPointer(song.ID, song.Year));
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.CompareTo(s2.SortString);
if (res == 0)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
}
return res;
});
_SongsSortList = _SortList.ToArray();
_Categories.Clear();
for (int i=0; i < _SongsSortList.Length; i++)
{
if (_SongsSortList[i].SortString.Length > 0 && !_SongsSortList[i].SortString.Equals("0000"))
{
String decade = _SongsSortList[i].SortString.Substring(0, 3) + "0 - " + _SongsSortList[i].SortString.Substring(0, 3) + "9";
if (decade != category)
{
category = decade;
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
else
{
if (CLanguage.Translate("TR_SCREENSONG_NOYEAR") != category)
{
category = CLanguage.Translate("TR_SCREENSONG_NOYEAR");
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
}
break;
case ESongSorting.TR_CONFIG_YEAR:
foreach (CSong song in _SongList)
{
_SortList.Add(new SongPointer(song.ID, song.Year));
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.CompareTo(s2.SortString);
if (res == 0)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
}
return res;
});
_SongsSortList = _SortList.ToArray();
_Categories.Clear();
for (int i=0; i < _SongsSortList.Length; i++)
{
if (_SongsSortList[i].SortString.Length > 0 && !_SongsSortList[i].SortString.Equals("0000"))
{
if (_SongsSortList[i].SortString != category)
{
category = _SongsSortList[i].SortString;
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
else
{
if (CLanguage.Translate("TR_SCREENSONG_NOYEAR") != category)
{
category = CLanguage.Translate("TR_SCREENSONG_NOYEAR");
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
}
break;
case ESongSorting.TR_CONFIG_LANGUAGE:
foreach (CSong song in _SongList)
{
if (song.Language.Count == 0)
_SortList.Add(new SongPointer(song.ID, String.Empty));
else
{
for (int i = 0; i < song.Language.Count; i++)
{
_SortList.Add(new SongPointer(song.ID, song.Language[i]));
}
}
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.CompareTo(s2.SortString);
if (res == 0)
{
if (_IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
}
return res;
});
_SongsSortList = _SortList.ToArray();
_Categories.Clear();
for (int i=0; i < _SongsSortList.Length; i++)
{
if (_SongsSortList[i].SortString.Length > 0)
{
if (_SongsSortList[i].SortString != category)
{
category = _SongsSortList[i].SortString;
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
else
{
if (CLanguage.Translate("TR_SCREENSONG_NOLANGUAGE") != category)
{
category = CLanguage.Translate("TR_SCREENSONG_NOLANGUAGE");
_Categories.Add(new CCategory(category, new STexture(-1), new STexture(-1)));
}
_SongsSortList[i].CatIndex = _Categories.Count - 1;
}
}
break;
default:
break;
}
FilterSongs(SearchString, ShowDuetSongs);
SortSongs();
_Categories.Clear();
if (_Tabs == EOffOn.TR_CONFIG_OFF)
{
_Categories.Clear();
_Categories.Add(new CCategory("", new STexture(-1), new STexture(-1)));
//No categories. So don't create them!
_Categories.Add(new CCategory(""));
for (int i = 0; i < _SongsSortList.Length; i++)
{
_SongsSortList[i].CatIndex = 0;
}
}
}else
FillCategories();
foreach (CCategory cat in _Categories)
{
STexture cover = CCover.Cover(cat.Name);
cat.CoverTextureSmall = cover;
cat.CoverTextureSmall = CCover.Cover(cat.Name);
}
Category = _CatIndex;
}
+7 -2
View File
@@ -31,8 +31,13 @@ namespace Vocaluxe.Menu.SongMenu
public class CCategory
{
public string Name = String.Empty;
public STexture CoverTextureSmall = new STexture();
public STexture CoverTextureBig = new STexture();
public STexture CoverTextureSmall = new STexture(-1);
public STexture CoverTextureBig = new STexture(-1);
public CCategory(string name)
{
Name = name;
}
public CCategory(string name, STexture CoverSmall, STexture CoverBig)
{