diff --git a/.gitignore b/.gitignore index dc52224f..1ea3fff8 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,7 @@ Output/Songs /Vocaluxe/Vocaluxe.csproj.user /Output/Config.xml + +*.ipch + +*.log diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 3e11de56..08b51f15 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -15,7 +15,6 @@ namespace Vocaluxe.Base { static class CBackgroundMusic { - private static CHelper Helper = new CHelper(); private static int _CurrentMusicStream = -1; private static int _PreviousMusicIndex = 0; private static PlaylistElement _CurrentPlaylistElement = new PlaylistElement(); @@ -155,7 +154,7 @@ namespace Vocaluxe.Base foreach(string ending in CSettings.MusicFileTypes) { - templist.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, ending, true, true)); + templist.AddRange(CHelper.ListFiles(CSettings.sFolderBackgroundMusic, ending, true, true)); } foreach (string path in templist) diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 3a105d83..21fe0680 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -122,19 +122,9 @@ namespace Vocaluxe.Base public static bool LoadConfig() { - #region Inits - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(CSettings.sFileConfig); - } - catch (Exception e) - { - CLog.LogError("Error opening Config.xml " + CSettings.sFileConfig + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(CSettings.sFileConfig); + if (xmlReader == null) return false; - } - #endregion Inits string value = string.Empty; diff --git a/Vocaluxe/Base/CCover.cs b/Vocaluxe/Base/CCover.cs index 87138cfc..dc402c45 100644 --- a/Vocaluxe/Base/CCover.cs +++ b/Vocaluxe/Base/CCover.cs @@ -157,9 +157,8 @@ namespace Vocaluxe.Base { _CoverThemes.Clear(); - CHelper Helper = new CHelper(); string path = CSettings.sFolderCover; - List files = Helper.ListFiles(path, "*.xml", false); + List files = CHelper.ListFiles(path, "*.xml", false); foreach (string file in files) { @@ -230,13 +229,12 @@ namespace Vocaluxe.Base } } - CHelper Helper = new CHelper(); List files = new List(); - files.AddRange(Helper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.png", true, true)); - files.AddRange(Helper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.jpg", true, true)); - files.AddRange(Helper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.jpeg", true, true)); - files.AddRange(Helper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.bmp", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.png", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.jpg", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.jpeg", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.sFolderCover, coverTheme.Folder), "*.bmp", true, true)); foreach (string file in files) diff --git a/Vocaluxe/Base/CFont.cs b/Vocaluxe/Base/CFont.cs index dbdc14f9..b1c96f2b 100644 --- a/Vocaluxe/Base/CFont.cs +++ b/Vocaluxe/Base/CFont.cs @@ -673,17 +673,10 @@ namespace Vocaluxe.Base /// private static bool LoadFontList() { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(System.IO.Path.Combine(CSettings.sFolderFonts, CSettings.sFileFonts)); - } - catch (Exception e) - { - CLog.LogError("Error loading default fonts: " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(System.IO.Path.Combine(CSettings.sFolderFonts, CSettings.sFileFonts)); + if (xmlReader == null) return false; - } + _Fonts.Clear(); string value = string.Empty; diff --git a/Vocaluxe/Base/CLanguage.cs b/Vocaluxe/Base/CLanguage.cs index bc366e11..c81900b1 100644 --- a/Vocaluxe/Base/CLanguage.cs +++ b/Vocaluxe/Base/CLanguage.cs @@ -28,7 +28,6 @@ namespace Vocaluxe.Base { private static XmlWriterSettings _settings = new XmlWriterSettings(); private static List _Languages; - private static CHelper Helper = new CHelper(); private static int _CurrentLanguage = 0; private static int _FallbackLanguage = 0; @@ -62,7 +61,7 @@ namespace Vocaluxe.Base _settings.ConformanceLevel = ConformanceLevel.Document; List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderLanguages, "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderLanguages, "*.xml", true, true)); foreach (string file in files) { @@ -228,7 +227,7 @@ namespace Vocaluxe.Base public static bool LoadPartyLanguageFiles(int PartyModeID, string Path) { List files = new List(); - files.AddRange(Helper.ListFiles(Path, "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(Path, "*.xml", true, true)); foreach (string file in files) { @@ -240,17 +239,9 @@ namespace Vocaluxe.Base private static bool LoadPartyLanguageFile(int PartyModeID, string file) { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(file); - } - catch (Exception e) - { - CLog.LogError("Error opening Party Language File " + file + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(file); + if (xmlReader == null) return false; - } string value = string.Empty; if (xmlReader.GetValue("//resources/string[@name='language']", ref value, value)) @@ -296,17 +287,9 @@ namespace Vocaluxe.Base SLanguage lang = new SLanguage(); lang.LanguageFilePath = Path.Combine(CSettings.sFolderLanguages, FileName); - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(lang.LanguageFilePath); - } - catch (Exception e) - { - CLog.LogError("Error opening Language File " + FileName + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(lang.LanguageFilePath); + if (xmlReader == null) return; - } string value = string.Empty; if (xmlReader.GetValue("//resources/string[@name='language']", ref value, value)) diff --git a/Vocaluxe/Base/CParty.cs b/Vocaluxe/Base/CParty.cs index e8bd61ec..3774dad8 100644 --- a/Vocaluxe/Base/CParty.cs +++ b/Vocaluxe/Base/CParty.cs @@ -34,7 +34,6 @@ namespace Vocaluxe.Base { const int PartyModeSystemVersion = 1; - private static CHelper Helper; private static Dictionary _PartyModes; private static Queue _IDs; @@ -44,7 +43,6 @@ namespace Vocaluxe.Base #region public stuff public static void Init() { - Helper = new CHelper(); _PartyModes = new Dictionary(); _IDs = new Queue(1000); @@ -206,7 +204,7 @@ namespace Vocaluxe.Base private static void LoadPartyModes() { List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderPartyModes, "*.xml", false, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderPartyModes, "*.xml", false, true)); foreach (string file in files) { @@ -222,18 +220,11 @@ namespace Vocaluxe.Base pm.ScreenFiles = new List(); pm.NoErrors = false; - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(file); - } - catch (Exception e) - { - CLog.LogError("Error opening party mode file " + file + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(file); + //Error... + if (xmlReader == null) return pm; - } bool loaded = true; @@ -269,7 +260,7 @@ namespace Vocaluxe.Base string PathToCode = Path.Combine(Path.Combine(CSettings.sFolderPartyModes, pm.Folder), CSettings.sFolderPartyModeCode); List FilesToCompile = new List(); - FilesToCompile.AddRange(Helper.ListFiles(PathToCode, "*.cs", false, true)); + FilesToCompile.AddRange(CHelper.ListFiles(PathToCode, "*.cs", false, true)); Assembly Output = CompileFiles(FilesToCompile.ToArray()); if (Output == null) diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs index 6a0fc124..70569215 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -15,7 +15,6 @@ namespace Vocaluxe.Base static class CPlaylists { private static List _Playlists; - private static CHelper Helper = new CHelper(); public static CPlaylistFile[] Playlists { @@ -51,7 +50,7 @@ namespace Vocaluxe.Base public static void ConvertUSDXPlaylists() { List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderPlaylists, "*.upl", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderPlaylists, "*.upl", true, true)); foreach (string file in files) { @@ -65,7 +64,7 @@ namespace Vocaluxe.Base { _Playlists = new List(); List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderPlaylists, "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderPlaylists, "*.xml", true, true)); foreach (string file in files) { diff --git a/Vocaluxe/Base/CProfiles.cs b/Vocaluxe/Base/CProfiles.cs index 8b7712cc..df23a380 100644 --- a/Vocaluxe/Base/CProfiles.cs +++ b/Vocaluxe/Base/CProfiles.cs @@ -12,7 +12,6 @@ namespace Vocaluxe.Base static class CProfiles { private static XmlWriterSettings _settings = new XmlWriterSettings(); - private static CHelper Helper = new CHelper(); private static List _Profiles; private static List _Avatars = new List(); @@ -86,7 +85,7 @@ namespace Vocaluxe.Base { _Profiles = new List(); List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderProfiles, "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderProfiles, "*.xml", true, true)); foreach (string file in files) { @@ -106,10 +105,10 @@ namespace Vocaluxe.Base _Avatars.Clear(); List files = new List(); - files.AddRange(Helper.ListFiles(CSettings.sFolderProfiles, "*.png", true, true)); - files.AddRange(Helper.ListFiles(CSettings.sFolderProfiles, "*.jpg", true, true)); - files.AddRange(Helper.ListFiles(CSettings.sFolderProfiles, "*.jpeg", true, true)); - files.AddRange(Helper.ListFiles(CSettings.sFolderProfiles, "*.bmp", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderProfiles, "*.png", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderProfiles, "*.jpg", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderProfiles, "*.jpeg", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.sFolderProfiles, "*.bmp", true, true)); foreach (string file in files) { @@ -361,17 +360,9 @@ namespace Vocaluxe.Base SProfile profile = new SProfile(); profile.ProfileFile = Path.Combine(CSettings.sFolderProfiles, FileName); - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(profile.ProfileFile); - } - catch (Exception e) - { - CLog.LogError("Error opening Profile File " + FileName + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(profile.ProfileFile); + if (xmlReader == null) return; - } string value = String.Empty; if (xmlReader.GetValue("//root/Info/PlayerName", ref value, value)) diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 789b741f..16b288c1 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -6,6 +6,7 @@ using System.IO; using System.Text; using System.Text.RegularExpressions; using System.Threading; +using System.Reflection; using Vocaluxe.Lib.Draw; @@ -36,14 +37,15 @@ namespace Vocaluxe.Base static class CSongs { private static List _Songs = new List(); + private static List _FilteredSongs = new List(); private static SongPointer[] _SongsSortList = new SongPointer[0]; private static List _SongsForRandom = new List(); - private static CHelper Helper = new CHelper(); private static bool _SongsLoaded = false; private static bool _CoverLoaded = false; private static int _CoverLoadIndex = -1; private static int _CatIndex = -1; + private static bool _Init = false; private static List _Categories = new List(); private static List _CategoriesForRandom = new List(); @@ -379,6 +381,276 @@ 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 int _SortByFieldArtistTitle(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; + } + + private static int _SortByFieldTitle(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; + } + + private static List _CreateSortList(string fieldName) + { + FieldInfo field = null; + bool isString = false; + List SortList = new List(); + if (fieldName == String.Empty) + _FilteredSongs.ForEach((song) => SortList.Add(new SongPointer(song.ID, ""))); + { + field = Type.GetType("Vocaluxe.Menu.SongMenu.CSong,VocaluxeLib").GetField(fieldName, BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public); + isString = field.FieldType == typeof(string); + if (!isString && field.FieldType != typeof(List)) + throw new Exception("Unkown sort field type"); + foreach (CSong song in _FilteredSongs) + { + object value = field.GetValue(song); + if (isString) + SortList.Add(new SongPointer(song.ID, (String)value)); + else + { + List values = (List)value; + if (values.Count == 0) + { + SortList.Add(new SongPointer(song.ID, "")); + } + else + { + foreach (String sortString in (List)value) + { + SortList.Add(new SongPointer(song.ID, sortString)); + } + } + } + } + } + return SortList; + } + + private static void SortSongs() + { + String fieldName; + switch (_SongSorting) + { + case ESongSorting.TR_CONFIG_EDITION: + fieldName = "Edition"; + break; + case ESongSorting.TR_CONFIG_GENRE: + fieldName = "Genre"; + break; + case ESongSorting.TR_CONFIG_FOLDER: + fieldName = "FolderName"; + break; + case ESongSorting.TR_CONFIG_ARTIST_LETTER: + case ESongSorting.TR_CONFIG_ARTIST: + if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) + fieldName = "ArtistSorting"; + else + fieldName = "Artist"; + break; + case ESongSorting.TR_CONFIG_TITLE_LETTER: + if (_IgnoreArticles == EOffOn.TR_CONFIG_ON) + fieldName = "TitleSorting"; + else + fieldName = "Title"; + break; + case ESongSorting.TR_CONFIG_YEAR: + case ESongSorting.TR_CONFIG_DECADE: + fieldName = "Year"; + break; + case ESongSorting.TR_CONFIG_LANGUAGE: + fieldName = "Language"; + break; + default: + fieldName = ""; + break; + } + List SortList = _CreateSortList(fieldName); + switch (_SongSorting) + { + case ESongSorting.TR_CONFIG_ARTIST_LETTER: + case ESongSorting.TR_CONFIG_ARTIST: + case ESongSorting.TR_CONFIG_NONE: + SortList.Sort(_SortByFieldTitle); + break; + default: + SortList.Sort(_SortByFieldArtistTitle); + break; + } + _SongsSortList = SortList.ToArray(); + } + + private static void _CreateCategoriesLetter() + { + string category = ""; + 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)); + + _SongsSortList[i].CatIndex = _Categories.Count - 1; + + if (firstLetter == '#') + NotLetterCat = _SongsSortList[i].CatIndex; + } + else + _SongsSortList[i].CatIndex = NotLetterCat; + } + else + _SongsSortList[i].CatIndex = _Categories.Count - 1; + } + } + + private static void _CreateCategoriesNormal(string NoCategoryName) + { + string category = ""; + int NoCategoryIndex = -1; + 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 (NoCategoryIndex < 0) + { + category = NoCategoryName; + _Categories.Add(new CCategory(category)); + NoCategoryIndex = _Categories.Count - 1; + } + _SongsSortList[i].CatIndex = NoCategoryIndex; + } + } + + } + + private static void _FillCategories() + { + string NoCategoryName = ""; + + 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_NONE: + NoCategoryName = CLanguage.Translate("TR_SCREENSONG_ALLSONGS"); + break; + } + if (_SongSorting == ESongSorting.TR_CONFIG_ARTIST_LETTER || _SongSorting == ESongSorting.TR_CONFIG_TITLE_LETTER) + _CreateCategoriesLetter(); + else + { + if(_SongSorting==ESongSorting.TR_CONFIG_DECADE) + for (int i = 0; i < _SongsSortList.Length; i++) + { + string Year = _SongsSortList[i].SortString; + if (Year != "") + { + Year = Year.Substring(0, 3); + _SongsSortList[i].SortString = Year + "0 - " + Year + "9"; + } + } + _CreateCategoriesNormal(NoCategoryName); + } + + } + public static void Sort(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, String SearchString) { _Sort(Sorting, Tabs, IgnoreArticles, SearchString, false, _ShowDuetSongs); @@ -397,606 +669,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 _SortList = new List(); - List _SongList = new List(); - - 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; } @@ -1012,8 +706,8 @@ namespace Vocaluxe.Base foreach (string p in CConfig.SongFolder) { string path = p; - files.AddRange(Helper.ListFiles(path, "*.txt", true, true)); - files.AddRange(Helper.ListFiles(path, "*.txd", true, true)); + files.AddRange(CHelper.ListFiles(path, "*.txt", true, true)); + files.AddRange(CHelper.ListFiles(path, "*.txd", true, true)); } CLog.StopBenchmark(2, "List Songs"); diff --git a/Vocaluxe/Base/CTheme.cs b/Vocaluxe/Base/CTheme.cs index 6c5dcf13..a84e2874 100644 --- a/Vocaluxe/Base/CTheme.cs +++ b/Vocaluxe/Base/CTheme.cs @@ -147,17 +147,9 @@ namespace Vocaluxe.Base public static bool LoadSkin(int SkinIndex) { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(Path.Combine(_Skins[SkinIndex].Path, _Skins[SkinIndex].FileName)); - } - catch (Exception e) - { - CLog.LogError("Error loading skin " + _Skins[SkinIndex].FileName + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(_Skins[SkinIndex].Path, _Skins[SkinIndex].FileName)); + if (xmlReader == null) return false; - } string value = String.Empty; @@ -264,17 +256,9 @@ namespace Vocaluxe.Base return false; } - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(Path.Combine(_Themes[ThemeIndex].Path, _Themes[ThemeIndex].FileName)); - } - catch (Exception e) - { - CLog.LogError("Error loading theme " + _Themes[ThemeIndex].FileName + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(_Themes[ThemeIndex].Path, _Themes[ThemeIndex].FileName)); + if (xmlReader == null) return false; - } int skinIndex = GetSkinIndex(_Themes[ThemeIndex].PartyModeID); @@ -406,11 +390,10 @@ namespace Vocaluxe.Base private static void ListThemes() { - CHelper Helper = new CHelper(); _Themes.Clear(); string path = Path.Combine(Directory.GetCurrentDirectory(), CSettings.sFolderThemes); - List files = Helper.ListFiles(path, "*.xml", false); + List files = CHelper.ListFiles(path, "*.xml", false); foreach (string file in files) { @@ -420,17 +403,9 @@ namespace Vocaluxe.Base public static bool AddTheme(string FilePath, int PartyModeID) { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(FilePath); - } - catch (Exception e) - { - CLog.LogError("Error loading theme " + FilePath + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(FilePath); + if (xmlReader == null) return false; - } Theme theme = new Theme(); @@ -469,7 +444,6 @@ namespace Vocaluxe.Base public static void ListSkins() { - CHelper Helper = new CHelper(); int themeIndex = GetThemeIndex(-1); _Skins.Clear(); @@ -483,8 +457,6 @@ namespace Vocaluxe.Base public static void ListSkins(int ThemeIndex) { - CHelper Helper = new CHelper(); - if (ThemeIndex < 0 || ThemeIndex >= _Themes.Count) { CLog.LogError("Error List Skins. Can't find Theme index: " + ThemeIndex.ToString()); @@ -494,21 +466,13 @@ namespace Vocaluxe.Base Theme theme = _Themes[ThemeIndex]; string path = Path.Combine(theme.Path, theme.SkinFolder); - List files = Helper.ListFiles(path, "*.xml", false); + List files = CHelper.ListFiles(path, "*.xml", false); foreach (string file in files) { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(Path.Combine(path, file)); - } - catch (Exception e) - { - CLog.LogError("Error loading skin " + file + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(path, file)); + if (xmlReader == null) continue; - } Skin skin = new Skin(); diff --git a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs index db08989d..f0942bcc 100644 --- a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs +++ b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs @@ -14,7 +14,6 @@ namespace Vocaluxe.Lib.Playlist public class CPlaylistFile { private static XmlWriterSettings _settings = new XmlWriterSettings(); - private static CHelper Helper = new CHelper(); public string PlaylistName; public string PlaylistFile; @@ -121,17 +120,9 @@ namespace Vocaluxe.Lib.Playlist private void LoadPlaylist() { - CXMLReader xmlReader; - - try - { - xmlReader = new CXMLReader(PlaylistFile); - } - catch (Exception e) - { - CLog.LogError("Error opening Playlist File " + PlaylistFile + ": " + e.Message); + CXMLReader xmlReader = CXMLReader.OpenFile(PlaylistFile); + if (xmlReader == null) return; - } string value = String.Empty; if (xmlReader.GetValue("//root/Info/PlaylistName", ref value, value)) diff --git a/VocaluxeLib/Menu/CHelper.cs b/VocaluxeLib/Menu/CHelper.cs index c6f49b82..67d8a75e 100644 --- a/VocaluxeLib/Menu/CHelper.cs +++ b/VocaluxeLib/Menu/CHelper.cs @@ -7,8 +7,9 @@ using System.Text; namespace Vocaluxe.Menu { - public class CHelper + public static class CHelper { + public static int nCk(int n, int k) { if (k > n) @@ -128,17 +129,17 @@ namespace Vocaluxe.Menu - public List ListFiles(string path, string cast) + public static List ListFiles(string path, string cast) { return ListFiles(path, cast, false, false); } - public List ListFiles(string path, string cast, bool recursive) + public static List ListFiles(string path, string cast, bool recursive) { return ListFiles(path, cast, recursive, false); } - public List ListFiles(string path, string cast, bool recursive, bool fullpath) + public static List ListFiles(string path, string cast, bool recursive, bool fullpath) { List files = new List(); DirectoryInfo dir = new DirectoryInfo(path); @@ -151,7 +152,6 @@ namespace Vocaluxe.Menu if (!fullpath) files.Add(file.Name); else - //files.Add(Path.Combine(file.DirectoryName, file.Name)); files.Add(file.FullName); } diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index 977674c5..4f82474a 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -172,27 +172,16 @@ namespace Vocaluxe.Menu { string file = Path.Combine(XmlPath, _ThemeName + ".xml"); - CXMLReader xmlReader = null; - - try - { - xmlReader = new CXMLReader(file); - } - catch (Exception e) - { - if (xmlReader != null) - xmlReader = null; - - CBase.Log.LogError("Error loading theme file " + file + ": " + e.Message); - } + CXMLReader xmlReader = CXMLReader.OpenFile(file); + if (xmlReader == null) + return; bool VersionCheck = false; - if (xmlReader != null) - VersionCheck = CheckVersion(_ScreenVersion, xmlReader); + VersionCheck = CheckVersion(_ScreenVersion, xmlReader); int SkinIndex = CBase.Theme.GetSkinIndex(_PartyModeID); - if (xmlReader != null && VersionCheck && SkinIndex != -1) + if (VersionCheck && SkinIndex != -1) { _ThemePath = XmlPath; LoadThemeBasics(xmlReader, SkinIndex); diff --git a/VocaluxeLib/Menu/CXMLReader.cs b/VocaluxeLib/Menu/CXMLReader.cs index a176df21..2bf58133 100644 --- a/VocaluxeLib/Menu/CXMLReader.cs +++ b/VocaluxeLib/Menu/CXMLReader.cs @@ -9,7 +9,8 @@ namespace Vocaluxe.Menu { private XPathNavigator _Navigator; - public CXMLReader(string uri) + //Private method. Use OpenFile factory method to get an instance + private CXMLReader(string uri) { XPathDocument xPathDoc = new XPathDocument(uri); _Navigator = xPathDoc.CreateNavigator(); @@ -26,9 +27,9 @@ namespace Vocaluxe.Menu { return new CXMLReader(sUri); } - catch (Exception) + catch (Exception e) { - CBase.Log.LogError("Can't open XML file: " + sUri); + CBase.Log.LogError("Can't open XML file: " + sUri + ": " + e.Message); return null; } } diff --git a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs index f273604c..aaa648ee 100644 --- a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs +++ b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs @@ -530,7 +530,12 @@ namespace Vocaluxe.Menu.SingNotes CBase.Drawing.DrawTexture(NoteBegin, new SRectF(r.X, r.Y, dx, r.H, r.Z), Color); - CBase.Drawing.DrawTexture(NoteMiddle, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z), Color); + + if (r.W - 2 * dx >= 2 * dx) + CBase.Drawing.DrawTexture(NoteMiddle, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z), Color); + else + CBase.Drawing.DrawTexture(NoteMiddle, new SRectF(r.X + dx, r.Y, 2 * dx, r.H, r.Z), Color, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z)); + CBase.Drawing.DrawTexture(NoteEnd, new SRectF(r.X + r.W - dx, r.Y, dx, r.H, r.Z), Color); } @@ -573,7 +578,12 @@ namespace Vocaluxe.Menu.SingNotes SColorF col = new SColorF(Color.R, Color.G, Color.B, Color.A * alpha); CBase.Drawing.DrawTexture(NoteBackgroundBegin, new SRectF(r.X, r.Y, dx, r.H, r.Z), col); - CBase.Drawing.DrawTexture(NoteBackgroundMiddle, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z), col); + + if (r.W - 2 * dx >= 2 * dx) + CBase.Drawing.DrawTexture(NoteBackgroundMiddle, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z), col); + else + CBase.Drawing.DrawTexture(NoteBackgroundMiddle, new SRectF(r.X + dx, r.Y, 2 * dx, r.H, r.Z), col, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z)); + CBase.Drawing.DrawTexture(NoteBackgroundEnd, new SRectF(r.X + r.W - dx, r.Y, dx, r.H, r.Z), col); } diff --git a/VocaluxeLib/Menu/SongMenu/CSong.cs b/VocaluxeLib/Menu/SongMenu/CSong.cs index c8832dfd..324e024f 100644 --- a/VocaluxeLib/Menu/SongMenu/CSong.cs +++ b/VocaluxeLib/Menu/SongMenu/CSong.cs @@ -31,10 +31,15 @@ namespace Vocaluxe.Menu.SongMenu public class CCategory { public string Name = String.Empty; - private STexture _CoverTextureSmall = new STexture(); - private STexture _CoverTextureBig = new STexture(); + private STexture _CoverTextureSmall = new STexture(-1); + private STexture _CoverTextureBig = new STexture(-1); private bool _CoverBigLoaded = false; + public CCategory(string name) + { + Name = name; + } + public STexture CoverTextureSmall { get { return _CoverTextureSmall; } @@ -201,7 +206,8 @@ namespace Vocaluxe.Menu.SongMenu public List Edition = new List(); public List Genre = new List(); - public string Year = "0000"; + public string Year = ""; + public List Language = new List(); // Notes @@ -474,7 +480,7 @@ namespace Vocaluxe.Menu.SongMenu break; case "YEAR": int num = 0; - if (Value.Length == 4 && int.TryParse(Value, out num)) + if (Value.Length == 4 && int.TryParse(Value, out num) && num != 0) { this.Year = Value; } @@ -842,11 +848,9 @@ namespace Vocaluxe.Menu.SongMenu private void CheckFiles() { - CHelper Helper = new CHelper(); - if(this.CoverFileName == String.Empty){ - List files = Helper.ListFiles(this.Folder, "*.jpg", false); - files.AddRange(Helper.ListFiles(this.Folder, "*.png", false)); + List files = CHelper.ListFiles(this.Folder, "*.jpg", false); + files.AddRange(CHelper.ListFiles(this.Folder, "*.png", false)); foreach(String file in files) { if (Regex.IsMatch(file, @".[CO].", RegexOptions.IgnoreCase) && (Regex.IsMatch(file, @"" + Regex.Escape(this.Title), RegexOptions.IgnoreCase) || Regex.IsMatch(file, @"" + Regex.Escape(this.Artist), RegexOptions.IgnoreCase))) @@ -858,8 +862,8 @@ namespace Vocaluxe.Menu.SongMenu if (this.BackgroundFileName == String.Empty) { - List files = Helper.ListFiles(this.Folder, "*.jpg", false); - files.AddRange(Helper.ListFiles(this.Folder, "*.png", false)); + List files = CHelper.ListFiles(this.Folder, "*.jpg", false); + files.AddRange(CHelper.ListFiles(this.Folder, "*.png", false)); foreach (String file in files) {