From d5cb43a09fcd5733a7cfa58eda95bb4e666457e2 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 25 Feb 2013 23:22:01 +0100 Subject: [PATCH 01/31] Little Tweaks --- Vocaluxe/Base/CConfig.cs | 501 ++++++++++--------- Vocaluxe/Base/CDataBase.cs | 138 +++-- Vocaluxe/Base/CFont.cs | 14 +- Vocaluxe/Base/CLog.cs | 14 +- Vocaluxe/Base/CMain.cs | 14 +- Vocaluxe/Base/CSongs.cs | 17 + Vocaluxe/Base/CSound.cs | 14 +- Vocaluxe/GameModes/CGameMode.cs | 4 +- Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs | 14 +- Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs | 2 +- Vocaluxe/Vocaluxe.csproj | 1 + 11 files changed, 388 insertions(+), 345 deletions(-) diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index ecd3d5c1..03f86f73 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -284,270 +284,279 @@ namespace Vocaluxe.Base public static bool SaveConfig() { - XmlWriter writer = XmlWriter.Create(CSettings.sFileConfig, _settings); - writer.WriteStartDocument(); - writer.WriteStartElement("root"); - - #region Info - writer.WriteStartElement("Info"); - - writer.WriteElementString("Version", CSettings.GetFullVersionText()); - writer.WriteElementString("Time", System.DateTime.Now.ToString()); - writer.WriteElementString("Platform", System.Environment.OSVersion.Platform.ToString()); - writer.WriteElementString("OSVersion", System.Environment.OSVersion.ToString()); - writer.WriteElementString("ProcessorCount", System.Environment.ProcessorCount.ToString()); - - writer.WriteElementString("Screens", Screen.AllScreens.Length.ToString()); - writer.WriteElementString("PrimaryScreenResolution", Screen.PrimaryScreen.Bounds.Size.ToString()); - - writer.WriteElementString("Directory", System.Environment.CurrentDirectory.ToString()); - - writer.WriteEndElement(); - #endregion Info - - #region Debug - writer.WriteStartElement("Debug"); - - writer.WriteComment("DebugLevel: " + CHelper.ListStrings(Enum.GetNames(typeof(EDebugLevel)))); - writer.WriteElementString("DebugLevel", Enum.GetName(typeof(EDebugLevel), DebugLevel)); - - writer.WriteEndElement(); - #endregion Debug - - #region Graphics - writer.WriteStartElement("Graphics"); - - writer.WriteComment("Renderer: " + CHelper.ListStrings(Enum.GetNames(typeof(ERenderer)))); - writer.WriteElementString("Renderer", Enum.GetName(typeof(ERenderer), Renderer)); - - writer.WriteComment("TextureQuality: " + CHelper.ListStrings(Enum.GetNames(typeof(ETextureQuality)))); - writer.WriteElementString("TextureQuality", Enum.GetName(typeof(ETextureQuality), TextureQuality)); - - writer.WriteComment("CoverSize (pixels): 32, 64, 128, 256, 512, 1024 (default: 128)"); - writer.WriteElementString("CoverSize", CoverSize.ToString()); - - writer.WriteComment("Screen width and height (pixels)"); - writer.WriteElementString("ScreenW", ScreenW.ToString()); - writer.WriteElementString("ScreenH", ScreenH.ToString()); - - writer.WriteComment("AAMode: " + CHelper.ListStrings(Enum.GetNames(typeof(EAntiAliasingModes)))); - writer.WriteElementString("AAMode", Enum.GetName(typeof(EAntiAliasingModes), AAMode)); - - writer.WriteComment("Colors: " + CHelper.ListStrings(Enum.GetNames(typeof(EColorDeep)))); - writer.WriteElementString("Colors", Enum.GetName(typeof(EColorDeep), Colors)); - - writer.WriteComment("MaxFPS should be between 1..200"); - writer.WriteElementString("MaxFPS", MaxFPS.ToString("#")); - - writer.WriteComment("VSync: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VSync", Enum.GetName(typeof(EOffOn), VSync)); - - writer.WriteComment("FullScreen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("FullScreen", Enum.GetName(typeof(EOffOn), FullScreen)); - - writer.WriteComment("FadeTime should be between 0..3 Seconds"); - writer.WriteElementString("FadeTime", FadeTime.ToString("#0.00")); - - writer.WriteEndElement(); - #endregion Graphics - - #region Theme - writer.WriteStartElement("Theme"); - - writer.WriteComment("Theme name"); - writer.WriteElementString("Name", Theme); - - writer.WriteComment("Skin name"); - writer.WriteElementString("Skin", Skin); - - writer.WriteComment("Name of cover-theme"); - writer.WriteElementString("Cover", CoverTheme); - - writer.WriteComment("Draw note-lines:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("DrawNoteLines", Enum.GetName(typeof(EOffOn), DrawNoteLines)); - - writer.WriteComment("Draw tone-helper:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("DrawToneHelper", Enum.GetName(typeof(EOffOn), DrawToneHelper)); - - writer.WriteComment("Look of timer:" + CHelper.ListStrings(Enum.GetNames(typeof(ETimerLook)))); - writer.WriteElementString("TimerLook", Enum.GetName(typeof(ETimerLook), TimerLook)); - - writer.WriteComment("Information about players on SingScreen:" + CHelper.ListStrings(Enum.GetNames(typeof(EPlayerInfo)))); - writer.WriteElementString("PlayerInfo", Enum.GetName(typeof(EPlayerInfo), PlayerInfo)); - - writer.WriteComment("Fade player-information with lyrics and notebars:" + CHelper.ListStrings(Enum.GetNames(typeof(EFadePlayerInfo)))); - writer.WriteElementString("FadePlayerInfo", Enum.GetName(typeof(EFadePlayerInfo), FadePlayerInfo)); - - writer.WriteComment("Cover Loading:" + CHelper.ListStrings(Enum.GetNames(typeof(ECoverLoading)))); - writer.WriteElementString("CoverLoading", Enum.GetName(typeof(ECoverLoading), CoverLoading)); - - writer.WriteComment("Lyric Style:" + CHelper.ListStrings(Enum.GetNames(typeof(ELyricStyle)))); - writer.WriteElementString("LyricStyle", Enum.GetName(typeof(ELyricStyle), LyricStyle)); - - writer.WriteEndElement(); - #endregion Theme - - #region Sound - writer.WriteStartElement("Sound"); - - writer.WriteComment("PlayBackLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EPlaybackLib)))); - writer.WriteElementString("PlayBackLib", Enum.GetName(typeof(EPlaybackLib), PlayBackLib)); - - writer.WriteComment("RecordLib: " + CHelper.ListStrings(Enum.GetNames(typeof(ERecordLib)))); - writer.WriteElementString("RecordLib", Enum.GetName(typeof(ERecordLib), RecordLib)); - - writer.WriteComment("AudioBufferSize: " + CHelper.ListStrings(Enum.GetNames(typeof(EBufferSize)))); - writer.WriteElementString("AudioBufferSize", Enum.GetName(typeof(EBufferSize), AudioBufferSize)); - - writer.WriteComment("AudioLatency from -500 to 500 ms"); - writer.WriteElementString("AudioLatency", AudioLatency.ToString()); - - writer.WriteComment("Background Music"); - writer.WriteElementString("BackgroundMusic", Enum.GetName(typeof(EOffOn), BackgroundMusic)); - - writer.WriteComment("Background Music Volume from 0 to 100"); - writer.WriteElementString("BackgroundMusicVolume", BackgroundMusicVolume.ToString()); - - writer.WriteComment("Background Music Source"); - writer.WriteElementString("BackgroundMusicSource", Enum.GetName(typeof(EBackgroundMusicSource), BackgroundMusicSource)); - - writer.WriteComment("Preview Volume from 0 to 100"); - writer.WriteElementString("PreviewMusicVolume", PreviewMusicVolume.ToString()); - - writer.WriteComment("Game Volume from 0 to 100"); - writer.WriteElementString("GameMusicVolume", GameMusicVolume.ToString()); - - writer.WriteEndElement(); - #endregion Sound - - #region Game - writer.WriteStartElement("Game"); - - writer.WriteComment("Game-Language:"); - writer.WriteElementString("Language", Language); - - // SongFolder - // Check, if program was started with songfolder-parameters - if (SongFolderOld.Count > 0) + XmlWriter writer = null; + try { - //Write "old" song-folders to config. - writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); - for (int i = 0; i < SongFolderOld.Count; i++) + writer = XmlWriter.Create(CSettings.sFileConfig, _settings); + writer.WriteStartDocument(); + writer.WriteStartElement("root"); + + #region Info + writer.WriteStartElement("Info"); + + writer.WriteElementString("Version", CSettings.GetFullVersionText()); + writer.WriteElementString("Time", System.DateTime.Now.ToString()); + writer.WriteElementString("Platform", System.Environment.OSVersion.Platform.ToString()); + writer.WriteElementString("OSVersion", System.Environment.OSVersion.ToString()); + writer.WriteElementString("ProcessorCount", System.Environment.ProcessorCount.ToString()); + + writer.WriteElementString("Screens", Screen.AllScreens.Length.ToString()); + writer.WriteElementString("PrimaryScreenResolution", Screen.PrimaryScreen.Bounds.Size.ToString()); + + writer.WriteElementString("Directory", System.Environment.CurrentDirectory.ToString()); + + writer.WriteEndElement(); + #endregion Info + + #region Debug + writer.WriteStartElement("Debug"); + + writer.WriteComment("DebugLevel: " + CHelper.ListStrings(Enum.GetNames(typeof(EDebugLevel)))); + writer.WriteElementString("DebugLevel", Enum.GetName(typeof(EDebugLevel), DebugLevel)); + + writer.WriteEndElement(); + #endregion Debug + + #region Graphics + writer.WriteStartElement("Graphics"); + + writer.WriteComment("Renderer: " + CHelper.ListStrings(Enum.GetNames(typeof(ERenderer)))); + writer.WriteElementString("Renderer", Enum.GetName(typeof(ERenderer), Renderer)); + + writer.WriteComment("TextureQuality: " + CHelper.ListStrings(Enum.GetNames(typeof(ETextureQuality)))); + writer.WriteElementString("TextureQuality", Enum.GetName(typeof(ETextureQuality), TextureQuality)); + + writer.WriteComment("CoverSize (pixels): 32, 64, 128, 256, 512, 1024 (default: 128)"); + writer.WriteElementString("CoverSize", CoverSize.ToString()); + + writer.WriteComment("Screen width and height (pixels)"); + writer.WriteElementString("ScreenW", ScreenW.ToString()); + writer.WriteElementString("ScreenH", ScreenH.ToString()); + + writer.WriteComment("AAMode: " + CHelper.ListStrings(Enum.GetNames(typeof(EAntiAliasingModes)))); + writer.WriteElementString("AAMode", Enum.GetName(typeof(EAntiAliasingModes), AAMode)); + + writer.WriteComment("Colors: " + CHelper.ListStrings(Enum.GetNames(typeof(EColorDeep)))); + writer.WriteElementString("Colors", Enum.GetName(typeof(EColorDeep), Colors)); + + writer.WriteComment("MaxFPS should be between 1..200"); + writer.WriteElementString("MaxFPS", MaxFPS.ToString("#")); + + writer.WriteComment("VSync: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VSync", Enum.GetName(typeof(EOffOn), VSync)); + + writer.WriteComment("FullScreen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("FullScreen", Enum.GetName(typeof(EOffOn), FullScreen)); + + writer.WriteComment("FadeTime should be between 0..3 Seconds"); + writer.WriteElementString("FadeTime", FadeTime.ToString("#0.00")); + + writer.WriteEndElement(); + #endregion Graphics + + #region Theme + writer.WriteStartElement("Theme"); + + writer.WriteComment("Theme name"); + writer.WriteElementString("Name", Theme); + + writer.WriteComment("Skin name"); + writer.WriteElementString("Skin", Skin); + + writer.WriteComment("Name of cover-theme"); + writer.WriteElementString("Cover", CoverTheme); + + writer.WriteComment("Draw note-lines:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("DrawNoteLines", Enum.GetName(typeof(EOffOn), DrawNoteLines)); + + writer.WriteComment("Draw tone-helper:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("DrawToneHelper", Enum.GetName(typeof(EOffOn), DrawToneHelper)); + + writer.WriteComment("Look of timer:" + CHelper.ListStrings(Enum.GetNames(typeof(ETimerLook)))); + writer.WriteElementString("TimerLook", Enum.GetName(typeof(ETimerLook), TimerLook)); + + writer.WriteComment("Information about players on SingScreen:" + CHelper.ListStrings(Enum.GetNames(typeof(EPlayerInfo)))); + writer.WriteElementString("PlayerInfo", Enum.GetName(typeof(EPlayerInfo), PlayerInfo)); + + writer.WriteComment("Fade player-information with lyrics and notebars:" + CHelper.ListStrings(Enum.GetNames(typeof(EFadePlayerInfo)))); + writer.WriteElementString("FadePlayerInfo", Enum.GetName(typeof(EFadePlayerInfo), FadePlayerInfo)); + + writer.WriteComment("Cover Loading:" + CHelper.ListStrings(Enum.GetNames(typeof(ECoverLoading)))); + writer.WriteElementString("CoverLoading", Enum.GetName(typeof(ECoverLoading), CoverLoading)); + + writer.WriteComment("Lyric Style:" + CHelper.ListStrings(Enum.GetNames(typeof(ELyricStyle)))); + writer.WriteElementString("LyricStyle", Enum.GetName(typeof(ELyricStyle), LyricStyle)); + + writer.WriteEndElement(); + #endregion Theme + + #region Sound + writer.WriteStartElement("Sound"); + + writer.WriteComment("PlayBackLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EPlaybackLib)))); + writer.WriteElementString("PlayBackLib", Enum.GetName(typeof(EPlaybackLib), PlayBackLib)); + + writer.WriteComment("RecordLib: " + CHelper.ListStrings(Enum.GetNames(typeof(ERecordLib)))); + writer.WriteElementString("RecordLib", Enum.GetName(typeof(ERecordLib), RecordLib)); + + writer.WriteComment("AudioBufferSize: " + CHelper.ListStrings(Enum.GetNames(typeof(EBufferSize)))); + writer.WriteElementString("AudioBufferSize", Enum.GetName(typeof(EBufferSize), AudioBufferSize)); + + writer.WriteComment("AudioLatency from -500 to 500 ms"); + writer.WriteElementString("AudioLatency", AudioLatency.ToString()); + + writer.WriteComment("Background Music"); + writer.WriteElementString("BackgroundMusic", Enum.GetName(typeof(EOffOn), BackgroundMusic)); + + writer.WriteComment("Background Music Volume from 0 to 100"); + writer.WriteElementString("BackgroundMusicVolume", BackgroundMusicVolume.ToString()); + + writer.WriteComment("Background Music Source"); + writer.WriteElementString("BackgroundMusicSource", Enum.GetName(typeof(EBackgroundMusicSource), BackgroundMusicSource)); + + writer.WriteComment("Preview Volume from 0 to 100"); + writer.WriteElementString("PreviewMusicVolume", PreviewMusicVolume.ToString()); + + writer.WriteComment("Game Volume from 0 to 100"); + writer.WriteElementString("GameMusicVolume", GameMusicVolume.ToString()); + + writer.WriteEndElement(); + #endregion Sound + + #region Game + writer.WriteStartElement("Game"); + + writer.WriteComment("Game-Language:"); + writer.WriteElementString("Language", Language); + + // SongFolder + // Check, if program was started with songfolder-parameters + if (SongFolderOld.Count > 0) { - writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolderOld[i]); + //Write "old" song-folders to config. + writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); + for (int i = 0; i < SongFolderOld.Count; i++) + { + writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolderOld[i]); + } } - } - else - { - //Write "normal" song-folders to config. - writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); - for (int i = 0; i < SongFolder.Count; i++) + else { - writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolder[i]); + //Write "normal" song-folders to config. + writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); + for (int i = 0; i < SongFolder.Count; i++) + { + writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolder[i]); + } } - } - writer.WriteComment("SongMenu: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongMenu)))); - writer.WriteElementString("SongMenu", Enum.GetName(typeof(ESongMenu), SongMenu)); + writer.WriteComment("SongMenu: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongMenu)))); + writer.WriteElementString("SongMenu", Enum.GetName(typeof(ESongMenu), SongMenu)); - writer.WriteComment("SongSorting: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongSorting)))); - writer.WriteElementString("SongSorting", Enum.GetName(typeof(ESongSorting), SongSorting)); + writer.WriteComment("SongSorting: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongSorting)))); + writer.WriteElementString("SongSorting", Enum.GetName(typeof(ESongSorting), SongSorting)); - writer.WriteComment("Ignore articles on song-sorting: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("IgnoreArticles", Enum.GetName(typeof(EOffOn), IgnoreArticles)); + writer.WriteComment("Ignore articles on song-sorting: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("IgnoreArticles", Enum.GetName(typeof(EOffOn), IgnoreArticles)); - writer.WriteComment("ScoreAnimationTime: Values >= 1 or 0 for no animation. Time is in seconds."); - writer.WriteElementString("ScoreAnimationTime", ScoreAnimationTime.ToString()); + writer.WriteComment("ScoreAnimationTime: Values >= 1 or 0 for no animation. Time is in seconds."); + writer.WriteElementString("ScoreAnimationTime", ScoreAnimationTime.ToString()); - writer.WriteComment("TimerMode: " + CHelper.ListStrings(Enum.GetNames(typeof(ETimerMode)))); - writer.WriteElementString("TimerMode", Enum.GetName(typeof(ETimerMode), TimerMode)); + writer.WriteComment("TimerMode: " + CHelper.ListStrings(Enum.GetNames(typeof(ETimerMode)))); + writer.WriteElementString("TimerMode", Enum.GetName(typeof(ETimerMode), TimerMode)); - writer.WriteComment("NumPlayer: 1.." + CSettings.MaxNumPlayer.ToString()); - writer.WriteElementString("NumPlayer", NumPlayer.ToString()); + writer.WriteComment("NumPlayer: 1.." + CSettings.MaxNumPlayer.ToString()); + writer.WriteElementString("NumPlayer", NumPlayer.ToString()); - writer.WriteComment("Order songs in tabs: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("Tabs", Enum.GetName(typeof(EOffOn), Tabs)); + writer.WriteComment("Order songs in tabs: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("Tabs", Enum.GetName(typeof(EOffOn), Tabs)); - writer.WriteComment("Lyrics also on Top of screen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("LyricsOnTop", Enum.GetName(typeof(EOffOn), LyricsOnTop)); + writer.WriteComment("Lyrics also on Top of screen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("LyricsOnTop", Enum.GetName(typeof(EOffOn), LyricsOnTop)); - writer.WriteComment("MinLineBreakTime: Value >= 0 in s. Minimum time the text is shown before it is to be sung"); - writer.WriteElementString("MinLineBreakTime", MinLineBreakTime.ToString()); + writer.WriteComment("MinLineBreakTime: Value >= 0 in s. Minimum time the text is shown before it is to be sung"); + writer.WriteElementString("MinLineBreakTime", MinLineBreakTime.ToString()); - writer.WriteComment("Default profile for players 1..." + CSettings.MaxNumPlayer.ToString() + ":"); - writer.WriteStartElement("Players"); - for (int i = 1; i <= CSettings.MaxNumPlayer; i++) - { - writer.WriteElementString("Player" + i.ToString(), Path.GetFileName(Players[i - 1])); - } - writer.WriteEndElement(); - - writer.WriteEndElement(); - #endregion Game - - #region Video - writer.WriteStartElement("Video"); - - writer.WriteComment("VideoDecoder: " + CHelper.ListStrings(Enum.GetNames(typeof(EVideoDecoder)))); - writer.WriteElementString("VideoDecoder", Enum.GetName(typeof(EVideoDecoder), VideoDecoder)); - - writer.WriteComment("VideoBackgrounds: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideoBackgrounds", Enum.GetName(typeof(EOffOn), VideoBackgrounds)); - - writer.WriteComment("VideoPreview: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideoPreview", Enum.GetName(typeof(EOffOn), VideoPreview)); - - writer.WriteComment("Show Videos while singing: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideosInSongs", Enum.GetName(typeof(EOffOn), VideosInSongs)); - - writer.WriteComment("Show backgroundmusic videos as background: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideosToBackground", Enum.GetName(typeof(EOffOn), VideosToBackground)); - - writer.WriteComment("WebcamLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EWebcamLib)))); - writer.WriteElementString("WebcamLib", Enum.GetName(typeof(EWebcamLib), WebcamLib)); - - writer.WriteStartElement("WebcamConfig"); - - writer.WriteElementString("MonikerString", WebcamConfig.MonikerString); - writer.WriteElementString("Framerate", WebcamConfig.Framerate.ToString()); - writer.WriteElementString("Width", WebcamConfig.Width.ToString()); - writer.WriteElementString("Height", WebcamConfig.Height.ToString()); - - writer.WriteEndElement(); - - writer.WriteEndElement(); - #endregion Video - - #region Record - writer.WriteStartElement("Record"); - - for (int p = 1; p <= CSettings.MaxNumPlayer; p++) - { - if (MicConfig[p - 1].DeviceName != String.Empty && MicConfig[p - 1].InputName != String.Empty && MicConfig[p - 1].Channel > 0) + writer.WriteComment("Default profile for players 1..." + CSettings.MaxNumPlayer.ToString() + ":"); + writer.WriteStartElement("Players"); + for (int i = 1; i <= CSettings.MaxNumPlayer; i++) { - writer.WriteStartElement("MicConfig" + p.ToString()); - - writer.WriteElementString("DeviceName", MicConfig[p - 1].DeviceName); - writer.WriteElementString("DeviceDriver", MicConfig[p - 1].DeviceDriver); - writer.WriteElementString("InputName", MicConfig[p - 1].InputName); - writer.WriteElementString("Channel", MicConfig[p - 1].Channel.ToString()); - - writer.WriteEndElement(); + writer.WriteElementString("Player" + i.ToString(), Path.GetFileName(Players[i - 1])); } + writer.WriteEndElement(); + + writer.WriteEndElement(); + #endregion Game + + #region Video + writer.WriteStartElement("Video"); + + writer.WriteComment("VideoDecoder: " + CHelper.ListStrings(Enum.GetNames(typeof(EVideoDecoder)))); + writer.WriteElementString("VideoDecoder", Enum.GetName(typeof(EVideoDecoder), VideoDecoder)); + + writer.WriteComment("VideoBackgrounds: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideoBackgrounds", Enum.GetName(typeof(EOffOn), VideoBackgrounds)); + + writer.WriteComment("VideoPreview: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideoPreview", Enum.GetName(typeof(EOffOn), VideoPreview)); + + writer.WriteComment("Show Videos while singing: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideosInSongs", Enum.GetName(typeof(EOffOn), VideosInSongs)); + + writer.WriteComment("Show backgroundmusic videos as background: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideosToBackground", Enum.GetName(typeof(EOffOn), VideosToBackground)); + + writer.WriteComment("WebcamLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EWebcamLib)))); + writer.WriteElementString("WebcamLib", Enum.GetName(typeof(EWebcamLib), WebcamLib)); + + writer.WriteStartElement("WebcamConfig"); + + writer.WriteElementString("MonikerString", WebcamConfig.MonikerString); + writer.WriteElementString("Framerate", WebcamConfig.Framerate.ToString()); + writer.WriteElementString("Width", WebcamConfig.Width.ToString()); + writer.WriteElementString("Height", WebcamConfig.Height.ToString()); + + writer.WriteEndElement(); + + writer.WriteEndElement(); + #endregion Video + + #region Record + writer.WriteStartElement("Record"); + + for (int p = 1; p <= CSettings.MaxNumPlayer; p++) + { + if (MicConfig[p - 1].DeviceName != String.Empty && MicConfig[p - 1].InputName != String.Empty && MicConfig[p - 1].Channel > 0) + { + writer.WriteStartElement("MicConfig" + p.ToString()); + + writer.WriteElementString("DeviceName", MicConfig[p - 1].DeviceName); + writer.WriteElementString("DeviceDriver", MicConfig[p - 1].DeviceDriver); + writer.WriteElementString("InputName", MicConfig[p - 1].InputName); + writer.WriteElementString("Channel", MicConfig[p - 1].Channel.ToString()); + + writer.WriteEndElement(); + } + } + + writer.WriteComment("Mic delay in ms. 0, 20, 40, 60 ... 500"); + writer.WriteElementString("MicDelay", MicDelay.ToString()); + + writer.WriteEndElement(); + #endregion Record + + // End of File + writer.WriteEndElement(); //end of root + writer.WriteEndDocument(); + writer.Flush(); + writer.Close(); } - - writer.WriteComment("Mic delay in ms. 0, 20, 40, 60 ... 500"); - writer.WriteElementString("MicDelay", MicDelay.ToString()); - - writer.WriteEndElement(); - #endregion Record - - // End of File - writer.WriteEndElement(); //end of root - writer.WriteEndDocument(); - - writer.Flush(); - writer.Close(); + catch (Exception) + { + writer = null; + return false; + } + writer = null; return true; } diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 0019008e..622038ab 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -1439,90 +1439,80 @@ namespace Vocaluxe.Base if (File.Exists(ImagePath)) { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; - SQLiteCommand command; - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); - } - catch (Exception) - { - return false; - } - command = new SQLiteCommand(connection); - - SQLiteDataReader reader = null; - - if (reader != null) - reader.Close(); - - Bitmap origin; - try - { - origin = new Bitmap(ImagePath); - } - catch (Exception) - { - CLog.LogError("Error loading Texture: " + ImagePath); - tex = new STexture(-1); - - if (reader != null) + connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; + try { - reader.Close(); - reader.Dispose(); + connection.Open(); } - command.Dispose(); - connection.Close(); - connection.Dispose(); + catch (Exception) + { + return false; + } + using (SQLiteCommand command = new SQLiteCommand(connection)) + { - return false; - } + Bitmap origin; + try + { + origin = new Bitmap(ImagePath); + } + catch (Exception) + { + CLog.LogError("Error loading Texture: " + ImagePath); + tex = new STexture(-1); - int w = origin.Width; - int h = origin.Height; + connection.Close(); - Bitmap bmp = new Bitmap(w, h); - Graphics g = Graphics.FromImage(bmp); - g.DrawImage(origin, new Rectangle(0, 0, w, h)); - g.Dispose(); - if (origin != null) - origin.Dispose(); - tex = CDraw.AddTexture(bmp); - byte[] data = new byte[w * h * 4]; + return false; + } - BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - Marshal.Copy(bmp_data.Scan0, data, 0, w * h * 4); - bmp.UnlockBits(bmp_data); - bmp.Dispose(); + int w = origin.Width; + int h = origin.Height; - command.CommandText = "INSERT INTO Images (Path, width, height) " + - "VALUES (@path, " + w.ToString() + ", " + h.ToString() + ")"; - command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = Path.GetFileName(ImagePath); - command.ExecuteNonQuery(); + Bitmap bmp = new Bitmap(w, h); + Graphics g = Graphics.FromImage(bmp); + g.DrawImage(origin, new Rectangle(0, 0, w, h)); + g.Dispose(); + origin.Dispose(); + tex = CDraw.AddTexture(bmp); + byte[] data = new byte[w * h * 4]; - command.CommandText = "SELECT id FROM Images WHERE [Path] = @path"; - command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = Path.GetFileName(ImagePath); - reader = null; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } + BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Marshal.Copy(bmp_data.Scan0, data, 0, w * h * 4); + bmp.UnlockBits(bmp_data); + bmp.Dispose(); - if (reader != null) - { - reader.Read(); - int id = reader.GetInt32(0); - reader.Close(); - command.CommandText = "INSERT INTO ImageData (ImageID, Data) " + - "VALUES ('" + id.ToString() + "', @data)"; - command.Parameters.Add("@data", System.Data.DbType.Binary, 20).Value = data; - command.ExecuteReader(); - result = true; + command.CommandText = "INSERT INTO Images (Path, width, height) " + + "VALUES (@path, " + w.ToString() + ", " + h.ToString() + ")"; + command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = Path.GetFileName(ImagePath); + command.ExecuteNonQuery(); + + command.CommandText = "SELECT id FROM Images WHERE [Path] = @path"; + command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = Path.GetFileName(ImagePath); + SQLiteDataReader reader = null; + try + { + reader = command.ExecuteReader(); + } + catch (Exception) + { + throw; + } + + if (reader != null) + { + reader.Read(); + int id = reader.GetInt32(0); + reader.Close(); + command.CommandText = "INSERT INTO ImageData (ImageID, Data) " + + "VALUES ('" + id.ToString() + "', @data)"; + command.Parameters.Add("@data", System.Data.DbType.Binary, 20).Value = data; + command.ExecuteReader(); + result = true; + } + } } } diff --git a/Vocaluxe/Base/CFont.cs b/Vocaluxe/Base/CFont.cs index dbdc14f9..c190e0d2 100644 --- a/Vocaluxe/Base/CFont.cs +++ b/Vocaluxe/Base/CFont.cs @@ -135,11 +135,11 @@ namespace Vocaluxe.Base } } - class CFont + class CFont:IDisposable { private List _Glyphs; private Hashtable _htGlyphs; - private PrivateFontCollection fonts; + private PrivateFontCollection fonts = null; private FontFamily family; private float SIZEh; @@ -268,6 +268,16 @@ namespace Vocaluxe.Base } _Glyphs.Clear(); } + + public void Dispose() + { + if (fonts != null) + { + fonts.Dispose(); + fonts = null; + } + GC.SuppressFinalize(this); + } } struct SFont diff --git a/Vocaluxe/Base/CLog.cs b/Vocaluxe/Base/CLog.cs index ab2e1695..18d30681 100644 --- a/Vocaluxe/Base/CLog.cs +++ b/Vocaluxe/Base/CLog.cs @@ -6,11 +6,11 @@ using System.Text; namespace Vocaluxe.Base { - class Log + class Log:IDisposable { private string _LogFileName; private string _LogName; - private StreamWriter _LogFile; + private StreamWriter _LogFile = null; public Log(string FileName, string LogName) { @@ -56,6 +56,16 @@ namespace Vocaluxe.Base _LogFile.WriteLine("----------------------------------------"); _LogFile.WriteLine(); } + + public void Dispose() + { + if (_LogFile != null) + { + _LogFile.Dispose(); + _LogFile = null; + } + GC.SuppressFinalize(this); + } } static class CLog diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index ef7e5aa0..a77459f6 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -605,23 +605,11 @@ namespace Vocaluxe.Base public CSong GetVisibleSong(int VisibleIndex) { - if (VisibleIndex >= CSongs.NumVisibleSongs) - return null; - - CSong song = CSongs.VisibleSongs[VisibleIndex]; - //Flamefire: Why copy the song-instance??? Cover and stuff will be loaded twice! - //And for unknown reason causes no-big-cover bug if covers are not loaded on startup - return song; - //if (song == null) - // return null; - - //return new CSong(song); + return CSongs.GetVisibleSongByIndex(VisibleIndex); } public CSong GetSongByID(int SongID) { - //Flamefire: Why copy? - //return new CSong(CSongs.GetSong(SongID)); return CSongs.GetSong(SongID); } diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 16b288c1..75241ded 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -381,6 +381,23 @@ namespace Vocaluxe.Base get { return _Categories.ToArray(); } } + public static CSong GetVisibleSongByIndex(int index) + { + if (index < 0) + return null; + + foreach (SongPointer sp in _SongsSortList) + { + if (sp.Visible) + { + if (index == 0) + return _Songs[sp.SongID]; + index--; + } + } + return null; + } + private static void _FilterSongs(String SearchFilter, bool ShowDuetSongs) { if (_Init && _SearchFilter == SearchFilter && _ShowDuetSongs == ShowDuetSongs) diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index d77c10ad..14747225 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -300,7 +300,7 @@ namespace Vocaluxe.Base #endregion Record } - class CBuffer + class CBuffer : IDisposable { private const double _BaseToneFreq = 65.4064; private const int _NumHalfTones = 47; @@ -315,7 +315,7 @@ namespace Vocaluxe.Base private double _MaxVolume = 0.0; private bool _NewSamples; - private MemoryStream _Stream; // full buffer + private MemoryStream _Stream = null; // full buffer public CBuffer() { @@ -554,6 +554,16 @@ namespace Vocaluxe.Base return 1 - AccumDist / _AnalysisBuffer.Length; } + + public void Dispose() + { + if (_Stream != null) + { + _Stream.Dispose(); + _Stream = null; + } + GC.SuppressFinalize(this); + } } class CSyncTimer diff --git a/Vocaluxe/GameModes/CGameMode.cs b/Vocaluxe/GameModes/CGameMode.cs index a69065ae..1b38a8b8 100644 --- a/Vocaluxe/GameModes/CGameMode.cs +++ b/Vocaluxe/GameModes/CGameMode.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; using Vocaluxe.Base; using Vocaluxe.Menu; diff --git a/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs b/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs index cd717e3a..e9df11f7 100644 --- a/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs +++ b/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs @@ -11,9 +11,9 @@ using Vocaluxe.Menu; namespace Vocaluxe.Lib.Input.WiiMote { - class CWiiMote : IInput + class CWiiMote : IInput, IDisposable { - WiiMoteLib _WiiMote; + WiiMoteLib _WiiMote = null; private List _KeysPool; private List _CurrentKeysPool; @@ -324,5 +324,15 @@ namespace Vocaluxe.Lib.Input.WiiMote _MousePool.Clear(); } } + + public void Dispose() + { + if (_WiiMote != null) + { + _WiiMote.Dispose(); + _WiiMote = null; + } + GC.SuppressFinalize(this); + } } } diff --git a/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs b/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs index 0b3fbc90..ed486447 100644 --- a/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs +++ b/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs @@ -104,7 +104,7 @@ namespace Vocaluxe.Lib.Video.Acinerella public struct TAc_decoder { //Pointer on the Acinerella instance - public IntPtr pAcInstance; + private IntPtr pAcInstance; //Contains the type of the decoder. public TAc_decoder_type dec_type; diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 9df8a799..f0e6b365 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -229,6 +229,7 @@ Form + From 3ebd34fcc321817e300db70392a3ca35190991ee Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 26 Feb 2013 00:47:23 +0100 Subject: [PATCH 02/31] Made the code checker a bit happier --- CheckingRules.ruleset | 50 + Vocaluxe.sln | 2 +- Vocaluxe/Base/CBackgroundMusic.cs | 2 +- Vocaluxe/Base/CConfig.cs | 504 ++--- Vocaluxe/Base/CCover.cs | 4 +- Vocaluxe/Base/CDataBase.cs | 1981 ++++++++--------- Vocaluxe/Base/CDraw.cs | 30 +- Vocaluxe/Base/CFont.cs | 154 +- Vocaluxe/Base/CGraphics.cs | 2 +- Vocaluxe/Base/CInput.cs | 1 + Vocaluxe/Base/CParty.cs | 40 +- Vocaluxe/Base/CPlaylists.cs | 63 +- Vocaluxe/Base/CProfiles.cs | 53 +- Vocaluxe/Base/CSettings.cs | 2 +- Vocaluxe/Base/CSongs.cs | 10 +- Vocaluxe/Base/CSound.cs | 2 +- Vocaluxe/Base/CTheme.cs | 148 +- Vocaluxe/GlobalSuppressions.cs | 14 + Vocaluxe/Lib/Draw/CDirect3D.cs | 31 +- Vocaluxe/Lib/Draw/CDrawWinForm.cs | 49 +- Vocaluxe/Lib/Draw/COpenGL.cs | 49 +- Vocaluxe/Lib/Input/WiiMote/WiiMoteLib.cs | 7 +- Vocaluxe/Lib/Playlist/CPlaylistFile.cs | 64 +- Vocaluxe/Lib/Sound/CDirectSoundRecord.cs | 40 +- Vocaluxe/Lib/Webcam/CAForgeNet.cs | 2 +- Vocaluxe/Properties/AssemblyInfo.cs | 33 + Vocaluxe/Screens/CScreenNames.cs | 4 +- Vocaluxe/Screens/CScreenSing.cs | 4 +- Vocaluxe/Screens/CScreenSong.cs | 4 +- Vocaluxe/Vocaluxe.csproj | 2 + VocaluxeLib/GlobalSuppressions.cs | 12 + VocaluxeLib/Menu/CBackground.cs | 10 +- VocaluxeLib/Menu/CButton.cs | 8 +- VocaluxeLib/Menu/CEqualizer.cs | 8 +- VocaluxeLib/Menu/CHelper.cs | 5 +- VocaluxeLib/Menu/CLyric.cs | 8 +- VocaluxeLib/Menu/CMenu.cs | 185 +- VocaluxeLib/Menu/CNameSelection.cs | 8 +- VocaluxeLib/Menu/CObjectInteractions.cs | 2 +- VocaluxeLib/Menu/CParticle.cs | 10 +- VocaluxeLib/Menu/CPlaylist.cs | 8 +- VocaluxeLib/Menu/CSelectSlide.cs | 28 +- VocaluxeLib/Menu/CStatic.cs | 4 +- VocaluxeLib/Menu/CText.cs | 10 +- VocaluxeLib/Menu/SongMenu/CSong.cs | 47 +- .../Menu/SongMenu/CSongMenuFramework.cs | 6 +- .../Menu/SongMenu/CSongMenuTileBoard.cs | 2 +- VocaluxeLib/VocaluxeLib.csproj | 2 + 48 files changed, 1880 insertions(+), 1834 deletions(-) create mode 100644 CheckingRules.ruleset create mode 100644 Vocaluxe/GlobalSuppressions.cs create mode 100644 Vocaluxe/Properties/AssemblyInfo.cs create mode 100644 VocaluxeLib/GlobalSuppressions.cs diff --git a/CheckingRules.ruleset b/CheckingRules.ruleset new file mode 100644 index 00000000..de4b78c7 --- /dev/null +++ b/CheckingRules.ruleset @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Vocaluxe.sln b/Vocaluxe.sln index 3714a400..f7c3f8c7 100644 --- a/Vocaluxe.sln +++ b/Vocaluxe.sln @@ -1,6 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2012 for Windows Desktop +# Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocaluxe.csproj", "{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}" ProjectSection(ProjectDependencies) = postProject {6F3E1874-F28A-40E9-AFBD-31934D593679} = {6F3E1874-F28A-40E9-AFBD-31934D593679} diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 7137d260..aa88b3ab 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -133,7 +133,7 @@ namespace Vocaluxe.Base { get { - if (_CurrentPlaylistElement.Artist != "" && _CurrentPlaylistElement.Title != "") + if (_CurrentPlaylistElement.Artist.Length > 0 && _CurrentPlaylistElement.Title.Length > 0) return _CurrentPlaylistElement.Artist + " - " + _CurrentPlaylistElement.Title; else return Path.GetFileNameWithoutExtension(_CurrentPlaylistElement.MusicFilePath); diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 03f86f73..8458ae16 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -287,276 +287,278 @@ namespace Vocaluxe.Base XmlWriter writer = null; try { - writer = XmlWriter.Create(CSettings.sFileConfig, _settings); - writer.WriteStartDocument(); - writer.WriteStartElement("root"); - - #region Info - writer.WriteStartElement("Info"); - - writer.WriteElementString("Version", CSettings.GetFullVersionText()); - writer.WriteElementString("Time", System.DateTime.Now.ToString()); - writer.WriteElementString("Platform", System.Environment.OSVersion.Platform.ToString()); - writer.WriteElementString("OSVersion", System.Environment.OSVersion.ToString()); - writer.WriteElementString("ProcessorCount", System.Environment.ProcessorCount.ToString()); - - writer.WriteElementString("Screens", Screen.AllScreens.Length.ToString()); - writer.WriteElementString("PrimaryScreenResolution", Screen.PrimaryScreen.Bounds.Size.ToString()); - - writer.WriteElementString("Directory", System.Environment.CurrentDirectory.ToString()); - - writer.WriteEndElement(); - #endregion Info - - #region Debug - writer.WriteStartElement("Debug"); - - writer.WriteComment("DebugLevel: " + CHelper.ListStrings(Enum.GetNames(typeof(EDebugLevel)))); - writer.WriteElementString("DebugLevel", Enum.GetName(typeof(EDebugLevel), DebugLevel)); - - writer.WriteEndElement(); - #endregion Debug - - #region Graphics - writer.WriteStartElement("Graphics"); - - writer.WriteComment("Renderer: " + CHelper.ListStrings(Enum.GetNames(typeof(ERenderer)))); - writer.WriteElementString("Renderer", Enum.GetName(typeof(ERenderer), Renderer)); - - writer.WriteComment("TextureQuality: " + CHelper.ListStrings(Enum.GetNames(typeof(ETextureQuality)))); - writer.WriteElementString("TextureQuality", Enum.GetName(typeof(ETextureQuality), TextureQuality)); - - writer.WriteComment("CoverSize (pixels): 32, 64, 128, 256, 512, 1024 (default: 128)"); - writer.WriteElementString("CoverSize", CoverSize.ToString()); - - writer.WriteComment("Screen width and height (pixels)"); - writer.WriteElementString("ScreenW", ScreenW.ToString()); - writer.WriteElementString("ScreenH", ScreenH.ToString()); - - writer.WriteComment("AAMode: " + CHelper.ListStrings(Enum.GetNames(typeof(EAntiAliasingModes)))); - writer.WriteElementString("AAMode", Enum.GetName(typeof(EAntiAliasingModes), AAMode)); - - writer.WriteComment("Colors: " + CHelper.ListStrings(Enum.GetNames(typeof(EColorDeep)))); - writer.WriteElementString("Colors", Enum.GetName(typeof(EColorDeep), Colors)); - - writer.WriteComment("MaxFPS should be between 1..200"); - writer.WriteElementString("MaxFPS", MaxFPS.ToString("#")); - - writer.WriteComment("VSync: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VSync", Enum.GetName(typeof(EOffOn), VSync)); - - writer.WriteComment("FullScreen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("FullScreen", Enum.GetName(typeof(EOffOn), FullScreen)); - - writer.WriteComment("FadeTime should be between 0..3 Seconds"); - writer.WriteElementString("FadeTime", FadeTime.ToString("#0.00")); - - writer.WriteEndElement(); - #endregion Graphics - - #region Theme - writer.WriteStartElement("Theme"); - - writer.WriteComment("Theme name"); - writer.WriteElementString("Name", Theme); - - writer.WriteComment("Skin name"); - writer.WriteElementString("Skin", Skin); - - writer.WriteComment("Name of cover-theme"); - writer.WriteElementString("Cover", CoverTheme); - - writer.WriteComment("Draw note-lines:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("DrawNoteLines", Enum.GetName(typeof(EOffOn), DrawNoteLines)); - - writer.WriteComment("Draw tone-helper:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("DrawToneHelper", Enum.GetName(typeof(EOffOn), DrawToneHelper)); - - writer.WriteComment("Look of timer:" + CHelper.ListStrings(Enum.GetNames(typeof(ETimerLook)))); - writer.WriteElementString("TimerLook", Enum.GetName(typeof(ETimerLook), TimerLook)); - - writer.WriteComment("Information about players on SingScreen:" + CHelper.ListStrings(Enum.GetNames(typeof(EPlayerInfo)))); - writer.WriteElementString("PlayerInfo", Enum.GetName(typeof(EPlayerInfo), PlayerInfo)); - - writer.WriteComment("Fade player-information with lyrics and notebars:" + CHelper.ListStrings(Enum.GetNames(typeof(EFadePlayerInfo)))); - writer.WriteElementString("FadePlayerInfo", Enum.GetName(typeof(EFadePlayerInfo), FadePlayerInfo)); - - writer.WriteComment("Cover Loading:" + CHelper.ListStrings(Enum.GetNames(typeof(ECoverLoading)))); - writer.WriteElementString("CoverLoading", Enum.GetName(typeof(ECoverLoading), CoverLoading)); - - writer.WriteComment("Lyric Style:" + CHelper.ListStrings(Enum.GetNames(typeof(ELyricStyle)))); - writer.WriteElementString("LyricStyle", Enum.GetName(typeof(ELyricStyle), LyricStyle)); - - writer.WriteEndElement(); - #endregion Theme - - #region Sound - writer.WriteStartElement("Sound"); - - writer.WriteComment("PlayBackLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EPlaybackLib)))); - writer.WriteElementString("PlayBackLib", Enum.GetName(typeof(EPlaybackLib), PlayBackLib)); - - writer.WriteComment("RecordLib: " + CHelper.ListStrings(Enum.GetNames(typeof(ERecordLib)))); - writer.WriteElementString("RecordLib", Enum.GetName(typeof(ERecordLib), RecordLib)); - - writer.WriteComment("AudioBufferSize: " + CHelper.ListStrings(Enum.GetNames(typeof(EBufferSize)))); - writer.WriteElementString("AudioBufferSize", Enum.GetName(typeof(EBufferSize), AudioBufferSize)); - - writer.WriteComment("AudioLatency from -500 to 500 ms"); - writer.WriteElementString("AudioLatency", AudioLatency.ToString()); - - writer.WriteComment("Background Music"); - writer.WriteElementString("BackgroundMusic", Enum.GetName(typeof(EOffOn), BackgroundMusic)); - - writer.WriteComment("Background Music Volume from 0 to 100"); - writer.WriteElementString("BackgroundMusicVolume", BackgroundMusicVolume.ToString()); - - writer.WriteComment("Background Music Source"); - writer.WriteElementString("BackgroundMusicSource", Enum.GetName(typeof(EBackgroundMusicSource), BackgroundMusicSource)); - - writer.WriteComment("Preview Volume from 0 to 100"); - writer.WriteElementString("PreviewMusicVolume", PreviewMusicVolume.ToString()); - - writer.WriteComment("Game Volume from 0 to 100"); - writer.WriteElementString("GameMusicVolume", GameMusicVolume.ToString()); - - writer.WriteEndElement(); - #endregion Sound - - #region Game - writer.WriteStartElement("Game"); - - writer.WriteComment("Game-Language:"); - writer.WriteElementString("Language", Language); - - // SongFolder - // Check, if program was started with songfolder-parameters - if (SongFolderOld.Count > 0) + using (writer = XmlWriter.Create(CSettings.sFileConfig, _settings)) { - //Write "old" song-folders to config. - writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); - for (int i = 0; i < SongFolderOld.Count; i++) + writer.WriteStartDocument(); + writer.WriteStartElement("root"); + + #region Info + writer.WriteStartElement("Info"); + + writer.WriteElementString("Version", CSettings.GetFullVersionText()); + writer.WriteElementString("Time", System.DateTime.Now.ToString()); + writer.WriteElementString("Platform", System.Environment.OSVersion.Platform.ToString()); + writer.WriteElementString("OSVersion", System.Environment.OSVersion.ToString()); + writer.WriteElementString("ProcessorCount", System.Environment.ProcessorCount.ToString()); + + writer.WriteElementString("Screens", Screen.AllScreens.Length.ToString()); + writer.WriteElementString("PrimaryScreenResolution", Screen.PrimaryScreen.Bounds.Size.ToString()); + + writer.WriteElementString("Directory", System.Environment.CurrentDirectory.ToString()); + + writer.WriteEndElement(); + #endregion Info + + #region Debug + writer.WriteStartElement("Debug"); + + writer.WriteComment("DebugLevel: " + CHelper.ListStrings(Enum.GetNames(typeof(EDebugLevel)))); + writer.WriteElementString("DebugLevel", Enum.GetName(typeof(EDebugLevel), DebugLevel)); + + writer.WriteEndElement(); + #endregion Debug + + #region Graphics + writer.WriteStartElement("Graphics"); + + writer.WriteComment("Renderer: " + CHelper.ListStrings(Enum.GetNames(typeof(ERenderer)))); + writer.WriteElementString("Renderer", Enum.GetName(typeof(ERenderer), Renderer)); + + writer.WriteComment("TextureQuality: " + CHelper.ListStrings(Enum.GetNames(typeof(ETextureQuality)))); + writer.WriteElementString("TextureQuality", Enum.GetName(typeof(ETextureQuality), TextureQuality)); + + writer.WriteComment("CoverSize (pixels): 32, 64, 128, 256, 512, 1024 (default: 128)"); + writer.WriteElementString("CoverSize", CoverSize.ToString()); + + writer.WriteComment("Screen width and height (pixels)"); + writer.WriteElementString("ScreenW", ScreenW.ToString()); + writer.WriteElementString("ScreenH", ScreenH.ToString()); + + writer.WriteComment("AAMode: " + CHelper.ListStrings(Enum.GetNames(typeof(EAntiAliasingModes)))); + writer.WriteElementString("AAMode", Enum.GetName(typeof(EAntiAliasingModes), AAMode)); + + writer.WriteComment("Colors: " + CHelper.ListStrings(Enum.GetNames(typeof(EColorDeep)))); + writer.WriteElementString("Colors", Enum.GetName(typeof(EColorDeep), Colors)); + + writer.WriteComment("MaxFPS should be between 1..200"); + writer.WriteElementString("MaxFPS", MaxFPS.ToString("#")); + + writer.WriteComment("VSync: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VSync", Enum.GetName(typeof(EOffOn), VSync)); + + writer.WriteComment("FullScreen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("FullScreen", Enum.GetName(typeof(EOffOn), FullScreen)); + + writer.WriteComment("FadeTime should be between 0..3 Seconds"); + writer.WriteElementString("FadeTime", FadeTime.ToString("#0.00")); + + writer.WriteEndElement(); + #endregion Graphics + + #region Theme + writer.WriteStartElement("Theme"); + + writer.WriteComment("Theme name"); + writer.WriteElementString("Name", Theme); + + writer.WriteComment("Skin name"); + writer.WriteElementString("Skin", Skin); + + writer.WriteComment("Name of cover-theme"); + writer.WriteElementString("Cover", CoverTheme); + + writer.WriteComment("Draw note-lines:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("DrawNoteLines", Enum.GetName(typeof(EOffOn), DrawNoteLines)); + + writer.WriteComment("Draw tone-helper:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("DrawToneHelper", Enum.GetName(typeof(EOffOn), DrawToneHelper)); + + writer.WriteComment("Look of timer:" + CHelper.ListStrings(Enum.GetNames(typeof(ETimerLook)))); + writer.WriteElementString("TimerLook", Enum.GetName(typeof(ETimerLook), TimerLook)); + + writer.WriteComment("Information about players on SingScreen:" + CHelper.ListStrings(Enum.GetNames(typeof(EPlayerInfo)))); + writer.WriteElementString("PlayerInfo", Enum.GetName(typeof(EPlayerInfo), PlayerInfo)); + + writer.WriteComment("Fade player-information with lyrics and notebars:" + CHelper.ListStrings(Enum.GetNames(typeof(EFadePlayerInfo)))); + writer.WriteElementString("FadePlayerInfo", Enum.GetName(typeof(EFadePlayerInfo), FadePlayerInfo)); + + writer.WriteComment("Cover Loading:" + CHelper.ListStrings(Enum.GetNames(typeof(ECoverLoading)))); + writer.WriteElementString("CoverLoading", Enum.GetName(typeof(ECoverLoading), CoverLoading)); + + writer.WriteComment("Lyric Style:" + CHelper.ListStrings(Enum.GetNames(typeof(ELyricStyle)))); + writer.WriteElementString("LyricStyle", Enum.GetName(typeof(ELyricStyle), LyricStyle)); + + writer.WriteEndElement(); + #endregion Theme + + #region Sound + writer.WriteStartElement("Sound"); + + writer.WriteComment("PlayBackLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EPlaybackLib)))); + writer.WriteElementString("PlayBackLib", Enum.GetName(typeof(EPlaybackLib), PlayBackLib)); + + writer.WriteComment("RecordLib: " + CHelper.ListStrings(Enum.GetNames(typeof(ERecordLib)))); + writer.WriteElementString("RecordLib", Enum.GetName(typeof(ERecordLib), RecordLib)); + + writer.WriteComment("AudioBufferSize: " + CHelper.ListStrings(Enum.GetNames(typeof(EBufferSize)))); + writer.WriteElementString("AudioBufferSize", Enum.GetName(typeof(EBufferSize), AudioBufferSize)); + + writer.WriteComment("AudioLatency from -500 to 500 ms"); + writer.WriteElementString("AudioLatency", AudioLatency.ToString()); + + writer.WriteComment("Background Music"); + writer.WriteElementString("BackgroundMusic", Enum.GetName(typeof(EOffOn), BackgroundMusic)); + + writer.WriteComment("Background Music Volume from 0 to 100"); + writer.WriteElementString("BackgroundMusicVolume", BackgroundMusicVolume.ToString()); + + writer.WriteComment("Background Music Source"); + writer.WriteElementString("BackgroundMusicSource", Enum.GetName(typeof(EBackgroundMusicSource), BackgroundMusicSource)); + + writer.WriteComment("Preview Volume from 0 to 100"); + writer.WriteElementString("PreviewMusicVolume", PreviewMusicVolume.ToString()); + + writer.WriteComment("Game Volume from 0 to 100"); + writer.WriteElementString("GameMusicVolume", GameMusicVolume.ToString()); + + writer.WriteEndElement(); + #endregion Sound + + #region Game + writer.WriteStartElement("Game"); + + writer.WriteComment("Game-Language:"); + writer.WriteElementString("Language", Language); + + // SongFolder + // Check, if program was started with songfolder-parameters + if (SongFolderOld.Count > 0) { - writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolderOld[i]); + //Write "old" song-folders to config. + writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); + for (int i = 0; i < SongFolderOld.Count; i++) + { + writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolderOld[i]); + } } - } - else - { - //Write "normal" song-folders to config. - writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); - for (int i = 0; i < SongFolder.Count; i++) + else { - writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolder[i]); + //Write "normal" song-folders to config. + writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); + for (int i = 0; i < SongFolder.Count; i++) + { + writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolder[i]); + } } - } - writer.WriteComment("SongMenu: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongMenu)))); - writer.WriteElementString("SongMenu", Enum.GetName(typeof(ESongMenu), SongMenu)); + writer.WriteComment("SongMenu: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongMenu)))); + writer.WriteElementString("SongMenu", Enum.GetName(typeof(ESongMenu), SongMenu)); - writer.WriteComment("SongSorting: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongSorting)))); - writer.WriteElementString("SongSorting", Enum.GetName(typeof(ESongSorting), SongSorting)); + writer.WriteComment("SongSorting: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongSorting)))); + writer.WriteElementString("SongSorting", Enum.GetName(typeof(ESongSorting), SongSorting)); - writer.WriteComment("Ignore articles on song-sorting: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("IgnoreArticles", Enum.GetName(typeof(EOffOn), IgnoreArticles)); + writer.WriteComment("Ignore articles on song-sorting: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("IgnoreArticles", Enum.GetName(typeof(EOffOn), IgnoreArticles)); - writer.WriteComment("ScoreAnimationTime: Values >= 1 or 0 for no animation. Time is in seconds."); - writer.WriteElementString("ScoreAnimationTime", ScoreAnimationTime.ToString()); + writer.WriteComment("ScoreAnimationTime: Values >= 1 or 0 for no animation. Time is in seconds."); + writer.WriteElementString("ScoreAnimationTime", ScoreAnimationTime.ToString()); - writer.WriteComment("TimerMode: " + CHelper.ListStrings(Enum.GetNames(typeof(ETimerMode)))); - writer.WriteElementString("TimerMode", Enum.GetName(typeof(ETimerMode), TimerMode)); + writer.WriteComment("TimerMode: " + CHelper.ListStrings(Enum.GetNames(typeof(ETimerMode)))); + writer.WriteElementString("TimerMode", Enum.GetName(typeof(ETimerMode), TimerMode)); - writer.WriteComment("NumPlayer: 1.." + CSettings.MaxNumPlayer.ToString()); - writer.WriteElementString("NumPlayer", NumPlayer.ToString()); + writer.WriteComment("NumPlayer: 1.." + CSettings.MaxNumPlayer.ToString()); + writer.WriteElementString("NumPlayer", NumPlayer.ToString()); - writer.WriteComment("Order songs in tabs: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("Tabs", Enum.GetName(typeof(EOffOn), Tabs)); + writer.WriteComment("Order songs in tabs: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("Tabs", Enum.GetName(typeof(EOffOn), Tabs)); - writer.WriteComment("Lyrics also on Top of screen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("LyricsOnTop", Enum.GetName(typeof(EOffOn), LyricsOnTop)); + writer.WriteComment("Lyrics also on Top of screen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("LyricsOnTop", Enum.GetName(typeof(EOffOn), LyricsOnTop)); - writer.WriteComment("MinLineBreakTime: Value >= 0 in s. Minimum time the text is shown before it is to be sung"); - writer.WriteElementString("MinLineBreakTime", MinLineBreakTime.ToString()); + writer.WriteComment("MinLineBreakTime: Value >= 0 in s. Minimum time the text is shown before it is to be sung"); + writer.WriteElementString("MinLineBreakTime", MinLineBreakTime.ToString()); - writer.WriteComment("Default profile for players 1..." + CSettings.MaxNumPlayer.ToString() + ":"); - writer.WriteStartElement("Players"); - for (int i = 1; i <= CSettings.MaxNumPlayer; i++) - { - writer.WriteElementString("Player" + i.ToString(), Path.GetFileName(Players[i - 1])); - } - writer.WriteEndElement(); - - writer.WriteEndElement(); - #endregion Game - - #region Video - writer.WriteStartElement("Video"); - - writer.WriteComment("VideoDecoder: " + CHelper.ListStrings(Enum.GetNames(typeof(EVideoDecoder)))); - writer.WriteElementString("VideoDecoder", Enum.GetName(typeof(EVideoDecoder), VideoDecoder)); - - writer.WriteComment("VideoBackgrounds: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideoBackgrounds", Enum.GetName(typeof(EOffOn), VideoBackgrounds)); - - writer.WriteComment("VideoPreview: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideoPreview", Enum.GetName(typeof(EOffOn), VideoPreview)); - - writer.WriteComment("Show Videos while singing: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideosInSongs", Enum.GetName(typeof(EOffOn), VideosInSongs)); - - writer.WriteComment("Show backgroundmusic videos as background: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideosToBackground", Enum.GetName(typeof(EOffOn), VideosToBackground)); - - writer.WriteComment("WebcamLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EWebcamLib)))); - writer.WriteElementString("WebcamLib", Enum.GetName(typeof(EWebcamLib), WebcamLib)); - - writer.WriteStartElement("WebcamConfig"); - - writer.WriteElementString("MonikerString", WebcamConfig.MonikerString); - writer.WriteElementString("Framerate", WebcamConfig.Framerate.ToString()); - writer.WriteElementString("Width", WebcamConfig.Width.ToString()); - writer.WriteElementString("Height", WebcamConfig.Height.ToString()); - - writer.WriteEndElement(); - - writer.WriteEndElement(); - #endregion Video - - #region Record - writer.WriteStartElement("Record"); - - for (int p = 1; p <= CSettings.MaxNumPlayer; p++) - { - if (MicConfig[p - 1].DeviceName != String.Empty && MicConfig[p - 1].InputName != String.Empty && MicConfig[p - 1].Channel > 0) + writer.WriteComment("Default profile for players 1..." + CSettings.MaxNumPlayer.ToString() + ":"); + writer.WriteStartElement("Players"); + for (int i = 1; i <= CSettings.MaxNumPlayer; i++) { - writer.WriteStartElement("MicConfig" + p.ToString()); - - writer.WriteElementString("DeviceName", MicConfig[p - 1].DeviceName); - writer.WriteElementString("DeviceDriver", MicConfig[p - 1].DeviceDriver); - writer.WriteElementString("InputName", MicConfig[p - 1].InputName); - writer.WriteElementString("Channel", MicConfig[p - 1].Channel.ToString()); - - writer.WriteEndElement(); + writer.WriteElementString("Player" + i.ToString(), Path.GetFileName(Players[i - 1])); } + writer.WriteEndElement(); + + writer.WriteEndElement(); + #endregion Game + + #region Video + writer.WriteStartElement("Video"); + + writer.WriteComment("VideoDecoder: " + CHelper.ListStrings(Enum.GetNames(typeof(EVideoDecoder)))); + writer.WriteElementString("VideoDecoder", Enum.GetName(typeof(EVideoDecoder), VideoDecoder)); + + writer.WriteComment("VideoBackgrounds: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideoBackgrounds", Enum.GetName(typeof(EOffOn), VideoBackgrounds)); + + writer.WriteComment("VideoPreview: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideoPreview", Enum.GetName(typeof(EOffOn), VideoPreview)); + + writer.WriteComment("Show Videos while singing: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideosInSongs", Enum.GetName(typeof(EOffOn), VideosInSongs)); + + writer.WriteComment("Show backgroundmusic videos as background: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideosToBackground", Enum.GetName(typeof(EOffOn), VideosToBackground)); + + writer.WriteComment("WebcamLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EWebcamLib)))); + writer.WriteElementString("WebcamLib", Enum.GetName(typeof(EWebcamLib), WebcamLib)); + + writer.WriteStartElement("WebcamConfig"); + + writer.WriteElementString("MonikerString", WebcamConfig.MonikerString); + writer.WriteElementString("Framerate", WebcamConfig.Framerate.ToString()); + writer.WriteElementString("Width", WebcamConfig.Width.ToString()); + writer.WriteElementString("Height", WebcamConfig.Height.ToString()); + + writer.WriteEndElement(); + + writer.WriteEndElement(); + #endregion Video + + #region Record + writer.WriteStartElement("Record"); + + for (int p = 1; p <= CSettings.MaxNumPlayer; p++) + { + if (MicConfig[p - 1].DeviceName.Length > 0 && MicConfig[p - 1].InputName.Length > 0 && MicConfig[p - 1].Channel > 0) + { + writer.WriteStartElement("MicConfig" + p.ToString()); + + writer.WriteElementString("DeviceName", MicConfig[p - 1].DeviceName); + writer.WriteElementString("DeviceDriver", MicConfig[p - 1].DeviceDriver); + writer.WriteElementString("InputName", MicConfig[p - 1].InputName); + writer.WriteElementString("Channel", MicConfig[p - 1].Channel.ToString()); + + writer.WriteEndElement(); + } + } + + writer.WriteComment("Mic delay in ms. 0, 20, 40, 60 ... 500"); + writer.WriteElementString("MicDelay", MicDelay.ToString()); + + writer.WriteEndElement(); + #endregion Record + + // End of File + writer.WriteEndElement(); //end of root + writer.WriteEndDocument(); + writer.Flush(); + writer.Close(); } - - writer.WriteComment("Mic delay in ms. 0, 20, 40, 60 ... 500"); - writer.WriteElementString("MicDelay", MicDelay.ToString()); - - writer.WriteEndElement(); - #endregion Record - - // End of File - writer.WriteEndElement(); //end of root - writer.WriteEndDocument(); - writer.Flush(); - writer.Close(); } catch (Exception) { - writer = null; + if (writer != null) + writer.Close(); return false; } - writer = null; return true; } @@ -731,7 +733,7 @@ namespace Vocaluxe.Base //Only found a parameter case 1: - if (!Regex.IsMatch(parts[0], @"\s") && parts[0] != string.Empty) + if (!Regex.IsMatch(parts[0], @"\s") && parts[0].Length > 0) { //Add parameter _Params.Add(parts[0]); @@ -744,7 +746,7 @@ namespace Vocaluxe.Base //Found parameter and value case 2: - if (!Regex.IsMatch(parts[0], @"\s") && parts[0] != string.Empty) + if (!Regex.IsMatch(parts[0], @"\s") && parts[0].Length > 0) { //Add parameter _Params.Add(parts[0]); @@ -856,7 +858,7 @@ namespace Vocaluxe.Base return false; } } - if (Path.GetFileName(value) == string.Empty) + if (Path.GetFileName(value).Length == 0) { return false; } @@ -876,7 +878,7 @@ namespace Vocaluxe.Base { for (int j = 0; j < CSettings.MaxNumPlayer; j++) { - if (Players[j] != string.Empty) + if (Players[j].Length > 0) { if (Path.GetFileName(CProfiles.Profiles[i].ProfileFile) == Players[j] && CProfiles.Profiles[i].Active == EOffOn.TR_CONFIG_ON) { diff --git a/Vocaluxe/Base/CCover.cs b/Vocaluxe/Base/CCover.cs index dc402c45..493d9ed5 100644 --- a/Vocaluxe/Base/CCover.cs +++ b/Vocaluxe/Base/CCover.cs @@ -171,7 +171,7 @@ namespace Vocaluxe.Base xmlReader.GetValue("//root/Info/Name", ref coverTheme.Name, String.Empty); xmlReader.GetValue("//root/Info/Folder", ref coverTheme.Folder, String.Empty); - if (coverTheme.Folder != String.Empty && coverTheme.Name != String.Empty) + if (coverTheme.Folder.Length > 0 && coverTheme.Name.Length > 0) { coverTheme.File = file; @@ -190,7 +190,7 @@ namespace Vocaluxe.Base coverTheme = CoverTheme(coverThemeName); - if (coverTheme.Name != String.Empty) + if (coverTheme.Name.Length > 0) { CXMLReader xmlReader = CXMLReader.OpenFile((Path.Combine(CSettings.sFolderCover, coverTheme.File))); diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 622038ab..6c8ff5f3 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -68,57 +68,54 @@ namespace Vocaluxe.Base player.ShortSong = (ShortSong == 1); player.Difficulty = (EGameDifficulty)Diff; - SQLiteConnection connection = new SQLiteConnection(); - SQLiteCommand command; - - connection.ConnectionString = "Data Source=" + FilePath; - - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); - } - catch (Exception) - { - return -1; + connection.ConnectionString = "Data Source=" + FilePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return -1; + } + + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + + int DataBaseSongID = GetDataBaseSongID(Artist, Title, NumPlayed, command); + int result = AddScore(player, command, DataBaseSongID); + return result; + } } - command = new SQLiteCommand(connection); - - int DataBaseSongID = GetDataBaseSongID(Artist, Title, NumPlayed, command); - int result = AddScore(player, command, DataBaseSongID); - - command.Dispose(); - connection.Close(); - connection.Dispose(); - - return result; } public static int AddScore(SPlayer player) { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + _HighscoreFilePath; - SQLiteCommand command; - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); - } - catch (Exception) - { - return -1; - } + connection.ConnectionString = "Data Source=" + _HighscoreFilePath; - command = new SQLiteCommand(connection); + try + { + connection.Open(); + } + catch (Exception) + { + return -1; + } - int DataBaseSongID = GetDataBaseSongID(player, command); - int result = AddScore(player, command, DataBaseSongID); + using (SQLiteCommand command = new SQLiteCommand(connection)) + { - connection.Close(); - connection.Dispose(); + int DataBaseSongID = GetDataBaseSongID(player, command); + int result = AddScore(player, command, DataBaseSongID); - return result; + return result; + } + } } private static int AddScore(SPlayer player, SQLiteCommand command, int DataBaseSongID) @@ -159,7 +156,6 @@ namespace Vocaluxe.Base } catch (Exception) { - ; } if (reader != null && reader.HasRows) @@ -169,8 +165,10 @@ namespace Vocaluxe.Base } if (reader != null) - reader.Close(); - + { + reader.Dispose(); + reader = null; + } command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, ShortSong, Difficulty) " + "VALUES (@SongID, @PlayerName, @Score, @LineNr, @Date, @Medley, @Duet, @ShortSong, @Difficulty)"; @@ -188,15 +186,7 @@ namespace Vocaluxe.Base //Read last insert line command.CommandText = "SELECT id FROM Scores ORDER BY id DESC LIMIT 0, 1"; - reader = null; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } + reader = command.ExecuteReader(); if (reader != null && reader.HasRows) { @@ -204,8 +194,6 @@ namespace Vocaluxe.Base { lastInsertID = reader.GetInt32(0); } - - reader.Close(); reader.Dispose(); } } @@ -215,81 +203,70 @@ namespace Vocaluxe.Base public static void LoadScore(ref List Score, SPlayer player) { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + _HighscoreFilePath; - SQLiteCommand command; - - Score = new List(); - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); - } - catch (Exception) - { - return; - } + connection.ConnectionString = "Data Source=" + _HighscoreFilePath; - command = new SQLiteCommand(connection); + Score = new List(); - int Medley = 0; - if (player.Medley) - Medley = 1; - - int Duet = 0; - if (player.Duet) - Duet = 1; - - int ShortSong = 0; - if (player.ShortSong) - ShortSong = 1; - - int DataBaseSongID = GetDataBaseSongID(player, command); - if (DataBaseSongID >= 0) - { - command.CommandText = "SELECT PlayerName, Score, Date, Difficulty, LineNr, id FROM Scores " + - "WHERE [SongID] = @SongID AND [Medley] = @Medley AND [Duet] = @Duet AND [ShortSong] = @ShortSong " + - "ORDER BY [Score] DESC"; - command.Parameters.Add("@SongID", System.Data.DbType.Int32, 0).Value = DataBaseSongID; - command.Parameters.Add("@Medley", System.Data.DbType.Int32, 0).Value = Medley; - command.Parameters.Add("@Duet", System.Data.DbType.Int32, 0).Value = Duet; - command.Parameters.Add("@ShortSong", System.Data.DbType.Int32, 0).Value = ShortSong; - - SQLiteDataReader reader = null; try { - reader = command.ExecuteReader(); + connection.Open(); } catch (Exception) { - throw; + return; } - if (reader != null && reader.HasRows) + using (SQLiteCommand command = new SQLiteCommand(connection)) { - while (reader.Read()) - { - SScores score = new SScores(); - score.Name = reader.GetString(0); - score.Score = reader.GetInt32(1); - score.Date = new DateTime(reader.GetInt64(2)).ToString("dd/MM/yyyy"); - score.Difficulty = (EGameDifficulty)reader.GetInt32(3); - score.LineNr = reader.GetInt32(4); - score.ID = reader.GetInt32(5); - Score.Add(score); + int Medley = 0; + if (player.Medley) + Medley = 1; + + int Duet = 0; + if (player.Duet) + Duet = 1; + + int ShortSong = 0; + if (player.ShortSong) + ShortSong = 1; + + int DataBaseSongID = GetDataBaseSongID(player, command); + if (DataBaseSongID >= 0) + { + command.CommandText = "SELECT PlayerName, Score, Date, Difficulty, LineNr, id FROM Scores " + + "WHERE [SongID] = @SongID AND [Medley] = @Medley AND [Duet] = @Duet AND [ShortSong] = @ShortSong " + + "ORDER BY [Score] DESC"; + command.Parameters.Add("@SongID", System.Data.DbType.Int32, 0).Value = DataBaseSongID; + command.Parameters.Add("@Medley", System.Data.DbType.Int32, 0).Value = Medley; + command.Parameters.Add("@Duet", System.Data.DbType.Int32, 0).Value = Duet; + command.Parameters.Add("@ShortSong", System.Data.DbType.Int32, 0).Value = ShortSong; + + SQLiteDataReader reader = command.ExecuteReader(); + if (reader != null && reader.HasRows) + { + while (reader.Read()) + { + SScores score = new SScores(); + score.Name = reader.GetString(0); + score.Score = reader.GetInt32(1); + score.Date = new DateTime(reader.GetInt64(2)).ToString("dd/MM/yyyy"); + score.Difficulty = (EGameDifficulty)reader.GetInt32(3); + score.LineNr = reader.GetInt32(4); + score.ID = reader.GetInt32(5); + + Score.Add(score); + } + reader.Dispose(); + } + } - reader.Close(); - reader.Dispose(); + } - } - - - command.Dispose(); - connection.Close(); - connection.Dispose(); } private static int GetDataBaseSongID(SPlayer player, SQLiteCommand command) @@ -304,26 +281,25 @@ namespace Vocaluxe.Base private static int GetDataBaseSongID(string Artist, string Title, string FilePath, int DefNumPlayed) { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + FilePath; - SQLiteCommand command; + using (SQLiteConnection connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + FilePath; - try - { - connection.Open(); - } - catch (Exception) - { - return -1; + try + { + connection.Open(); + } + catch (Exception) + { + return -1; + } + + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + return GetDataBaseSongID(Artist, Title, DefNumPlayed, command); + } } - command = new SQLiteCommand(connection); - int id = GetDataBaseSongID(Artist, Title, DefNumPlayed, command); - command.Dispose(); - connection.Close(); - connection.Dispose(); - - return id; } private static int GetDataBaseSongID(string Artist, string Title, int DefNumPlayed, SQLiteCommand command) @@ -332,21 +308,12 @@ namespace Vocaluxe.Base command.Parameters.Add("@title", System.Data.DbType.String, 0).Value = Title; command.Parameters.Add("@artist", System.Data.DbType.String, 0).Value = Artist; - SQLiteDataReader reader = null; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } + SQLiteDataReader reader = command.ExecuteReader(); if (reader != null && reader.HasRows) { reader.Read(); int id = reader.GetInt32(0); - reader.Close(); reader.Dispose(); return id; } @@ -366,31 +333,19 @@ namespace Vocaluxe.Base command.Parameters.Add("@title", System.Data.DbType.String, 0).Value = Title; command.Parameters.Add("@artist", System.Data.DbType.String, 0).Value = Artist; - reader = null; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } + reader = command.ExecuteReader(); if (reader != null) { reader.Read(); int id = reader.GetInt32(0); - reader.Close(); reader.Dispose(); return id; } } if (reader != null) - { - reader.Close(); reader.Dispose(); - } return -1; } @@ -401,56 +356,47 @@ namespace Vocaluxe.Base Title = String.Empty; NumPlayed = 0; - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + FilePath; - SQLiteCommand command; - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); - } - catch (Exception) - { - return false; - } + connection.ConnectionString = "Data Source=" + FilePath; - command = new SQLiteCommand(connection); - command.CommandText = "SELECT Artist, Title, NumPlayed FROM Songs WHERE [id] = @id"; - command.Parameters.Add("@id", System.Data.DbType.String, 0).Value = SongID; + try + { + connection.Open(); + } + catch (Exception) + { + return false; + } - SQLiteDataReader reader = null; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - return false; - } + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + command.CommandText = "SELECT Artist, Title, NumPlayed FROM Songs WHERE [id] = @id"; + command.Parameters.Add("@id", System.Data.DbType.String, 0).Value = SongID; - if (reader != null && reader.HasRows) - { - reader.Read(); - Artist = reader.GetString(0); - Title = reader.GetString(1); - NumPlayed = reader.GetInt32(2); - reader.Close(); - reader.Dispose(); + SQLiteDataReader reader = null; + try + { + reader = command.ExecuteReader(); + } + catch (Exception) + { + return false; + } - command.Dispose(); - connection.Close(); - connection.Dispose(); - return true; + if (reader != null && reader.HasRows) + { + reader.Read(); + Artist = reader.GetString(0); + Title = reader.GetString(1); + NumPlayed = reader.GetInt32(2); + reader.Dispose(); + return true; + } + if (reader != null) + reader.Dispose(); + } } - else - { - if (reader != null) - reader.Close(); - } - - command.Dispose(); - connection.Close(); - connection.Dispose(); return false; } @@ -481,76 +427,77 @@ namespace Vocaluxe.Base private static void CreateHighscoreDB(string FilePath) { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + FilePath; - SQLiteCommand command; - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); + connection.ConnectionString = "Data Source=" + FilePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return; + } + + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + + command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, @Value)"; + command.Parameters.Add("@Value",DbType.Int32).Value = CSettings.iDatabaseHighscoreVersion; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Songs ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "Artist TEXT NOT NULL, Title TEXT NOT NULL, NumPlayed INTEGER);"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Scores ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "SongID INTEGER NOT NULL, PlayerName TEXT NOT NULL, Score INTEGER NOT NULL, LineNr INTEGER NOT NULL, Date BIGINT NOT NULL, " + + "Medley INTEGER NOT NULL, Duet INTEGER NOT NULL, ShortSong INTEGER NOT NULL, Difficulty INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + } } - catch (Exception) - { - return; - } - - command = new SQLiteCommand(connection); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, " + CSettings.iDatabaseHighscoreVersion.ToString() + ")"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Songs ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "Artist TEXT NOT NULL, Title TEXT NOT NULL, NumPlayed INTEGER);"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Scores ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "SongID INTEGER NOT NULL, PlayerName TEXT NOT NULL, Score INTEGER NOT NULL, LineNr INTEGER NOT NULL, Date BIGINT NOT NULL, " + - "Medley INTEGER NOT NULL, Duet INTEGER NOT NULL, ShortSong INTEGER NOT NULL, Difficulty INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.Dispose(); - connection.Close(); - connection.Dispose(); } private static void CreateHighscoreDBV1(string FilePath) { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + FilePath; - SQLiteCommand command; - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); + connection.ConnectionString = "Data Source=" + FilePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return; + } + + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + + command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, 1 )"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Songs ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "Artist TEXT NOT NULL, Title TEXT NOT NULL, NumPlayed INTEGER);"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Scores ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "SongID INTEGER NOT NULL, PlayerName TEXT NOT NULL, Score INTEGER NOT NULL, LineNr INTEGER NOT NULL, Date BIGINT NOT NULL, " + + "Medley INTEGER NOT NULL, Duet INTEGER NOT NULL, Difficulty INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + } } - catch (Exception) - { - return; - } - - command = new SQLiteCommand(connection); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, 1 )"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Songs ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "Artist TEXT NOT NULL, Title TEXT NOT NULL, NumPlayed INTEGER);"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Scores ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "SongID INTEGER NOT NULL, PlayerName TEXT NOT NULL, Score INTEGER NOT NULL, LineNr INTEGER NOT NULL, Date BIGINT NOT NULL, " + - "Medley INTEGER NOT NULL, Duet INTEGER NOT NULL, Difficulty INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.Dispose(); - connection.Close(); - connection.Dispose(); } /// @@ -560,110 +507,102 @@ namespace Vocaluxe.Base /// private static bool CreateOrConvert(string FilePath) { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + FilePath; - SQLiteCommand command; - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); - } - catch (Exception) - { - return false; - } + connection.ConnectionString = "Data Source=" + FilePath; - SQLiteDataReader reader = null; - command = new SQLiteCommand(connection); - - command.CommandText = "PRAGMA user_version"; - reader = command.ExecuteReader(); - reader.Read(); - - int version = reader.GetInt32(0); - - reader.Close(); - reader.Dispose(); - - //Check if old scores table exists - command.CommandText = "SELECT name FROM sqlite_master WHERE type='table' AND name='US_Scores';"; - reader = command.ExecuteReader(); - reader.Read(); - bool scoresTableExists = reader.HasRows; - - reader.Close(); - reader.Dispose(); - - command.CommandText = "SELECT Value FROM Version"; - reader = null; - - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - ; - } - - if (reader == null) - { - // create new database/tables - if (version == 1) //Check for USDX 1.1 DB + try { - CreateHighscoreDBV1(FilePath); - ConvertFrom110(FilePath); - UpdateDatabase(1, connection); + connection.Open(); } - else if (version == 0 && scoresTableExists) //Check for USDX 1.01 or CMD Mod DB + catch (Exception) { - CreateHighscoreDBV1(FilePath); - ConvertFrom101(FilePath); - UpdateDatabase(1, connection); + return false; } - else - CreateHighscoreDB(FilePath); - } - else if (reader.FieldCount == 0) - { - // create new database/tables - if (version == 1) //Check for USDX 1.1 DB + + SQLiteDataReader reader = null; + using (SQLiteCommand command = new SQLiteCommand(connection)) { - CreateHighscoreDBV1(FilePath); - ConvertFrom110(FilePath); - UpdateDatabase(1, connection); - } - else if (version == 0 && scoresTableExists) //Check for USDX 1.01 or CMD Mod DB - { - CreateHighscoreDBV1(FilePath); - ConvertFrom101(FilePath); - UpdateDatabase(1, connection); - } - else - CreateHighscoreDB(FilePath); - } - else - { - reader.Read(); - int CurrentVersion = reader.GetInt32(0); - if (CurrentVersion < CSettings.iDatabaseHighscoreVersion) - { - // update database - UpdateDatabase(CurrentVersion, connection); + + command.CommandText = "PRAGMA user_version"; + reader = command.ExecuteReader(); + reader.Read(); + + int version = reader.GetInt32(0); + + reader.Dispose(); + + //Check if old scores table exists + command.CommandText = "SELECT name FROM sqlite_master WHERE type='table' AND name='US_Scores';"; + reader = command.ExecuteReader(); + reader.Read(); + bool scoresTableExists = reader.HasRows; + + reader.Dispose(); + + command.CommandText = "SELECT Value FROM Version"; + reader = null; + + try + { + reader = command.ExecuteReader(); + } + catch (Exception) + { + } + + if (reader == null) + { + // create new database/tables + if (version == 1) //Check for USDX 1.1 DB + { + CreateHighscoreDBV1(FilePath); + ConvertFrom110(FilePath); + UpdateDatabase(1, connection); + } + else if (version == 0 && scoresTableExists) //Check for USDX 1.01 or CMD Mod DB + { + CreateHighscoreDBV1(FilePath); + ConvertFrom101(FilePath); + UpdateDatabase(1, connection); + } + else + CreateHighscoreDB(FilePath); + } + else if (reader.FieldCount == 0) + { + // create new database/tables + if (version == 1) //Check for USDX 1.1 DB + { + CreateHighscoreDBV1(FilePath); + ConvertFrom110(FilePath); + UpdateDatabase(1, connection); + } + else if (version == 0 && scoresTableExists) //Check for USDX 1.01 or CMD Mod DB + { + CreateHighscoreDBV1(FilePath); + ConvertFrom101(FilePath); + UpdateDatabase(1, connection); + } + else + CreateHighscoreDB(FilePath); + } + else + { + reader.Read(); + int CurrentVersion = reader.GetInt32(0); + if (CurrentVersion < CSettings.iDatabaseHighscoreVersion) + { + // update database + UpdateDatabase(CurrentVersion, connection); + } + } + + if (reader != null) + reader.Dispose(); } } - if (reader != null) - { - reader.Close(); - reader.Dispose(); - } - - command.Dispose(); - - connection.Close(); - connection.Dispose(); - return true; } @@ -674,129 +613,123 @@ namespace Vocaluxe.Base /// True if succeeded private static bool ConvertFrom110(string FilePath) { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + FilePath; - SQLiteCommand command; - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); - } - catch (Exception) - { - return false; - } + connection.ConnectionString = "Data Source=" + FilePath; - command = new SQLiteCommand(connection); - - //The USDX database has no column for LineNr, Medley and Duet so just fill 0 in there - command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', Date, '0', '0', Difficulty from US_Scores"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; - command.ExecuteNonQuery(); - - List scores = new List(); - List songs = new List(); - - SQLiteDataReader reader = null; - command.CommandText = "SELECT id, PlayerName, Date FROM Scores"; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } - - if (reader != null && reader.HasRows) - { - while (reader.Read()) + try { - SData data = new SData(); - data.id = reader.GetInt32(0); - data.str1 = reader.GetString(1); - Int64 ticks = 0; + connection.Open(); + } + catch (Exception) + { + return false; + } + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + + //The USDX database has no column for LineNr, Medley and Duet so just fill 0 in there + command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', Date, '0', '0', Difficulty from US_Scores"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; + command.ExecuteNonQuery(); + + List scores = new List(); + List songs = new List(); + + SQLiteDataReader reader = null; + command.CommandText = "SELECT id, PlayerName, Date FROM Scores"; try { - ticks = reader.GetInt64(2); + reader = command.ExecuteReader(); + } + catch (Exception) + { + throw; } - catch { } - data.ticks = UnixTimeToTicks((int)ticks); + if (reader != null && reader.HasRows) + { + while (reader.Read()) + { + SData data = new SData(); + data.id = reader.GetInt32(0); + data.str1 = reader.GetString(1); + Int64 ticks = 0; + + try + { + ticks = reader.GetInt64(2); + } + catch { } + + data.ticks = UnixTimeToTicks((int)ticks); + + scores.Add(data); + } + reader.Close(); + } + + command.CommandText = "SELECT id, Artist, Title FROM Songs"; + + reader = command.ExecuteReader(); + + if (reader != null && reader.HasRows) + { + while (reader.Read()) + { + SData data = new SData(); + data.id = reader.GetInt32(0); + data.str1 = reader.GetString(1); + data.str2 = reader.GetString(2); + songs.Add(data); + } + } + + if(reader != null) + reader.Dispose(); + + SQLiteTransaction _Transaction = connection.BeginTransaction(); + // update Title and Artist strings + foreach (SData data in songs) + { + command.CommandText = "UPDATE Songs SET [Artist] = @artist, [Title] = @title WHERE [ID] = @id"; + command.Parameters.Add("@title", System.Data.DbType.String, 0).Value = data.str2; + command.Parameters.Add("@artist", System.Data.DbType.String, 0).Value = data.str1; + command.Parameters.Add("@id", System.Data.DbType.Int32, 0).Value = data.id; + command.ExecuteNonQuery(); + } + + // update player names + foreach (SData data in scores) + { + command.CommandText = "UPDATE Scores SET [PlayerName] = @player, [Date] = @date WHERE [id] = @id"; + command.Parameters.Add("@player", System.Data.DbType.String, 0).Value = data.str1; + command.Parameters.Add("@date", System.Data.DbType.Int64, 0).Value = data.ticks; + command.Parameters.Add("@id", System.Data.DbType.Int32, 0).Value = data.id; + command.ExecuteNonQuery(); + } + _Transaction.Commit(); + + //Delete old tables after conversion + command.CommandText = "DROP TABLE US_Scores;"; + command.ExecuteNonQuery(); + + command.CommandText = "DROP TABLE US_Songs;"; + command.ExecuteNonQuery(); + + command.CommandText = "DROP TABLE us_statistics_info;"; + command.ExecuteNonQuery(); + + //This versioning is not used in Vocaluxe so reset it to 0 + command.CommandText = "PRAGMA user_version = 0"; + command.ExecuteNonQuery(); - scores.Add(data); } - reader.Close(); } - command.CommandText = "SELECT id, Artist, Title FROM Songs"; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } - - if (reader != null && reader.HasRows) - { - while (reader.Read()) - { - SData data = new SData(); - data.id = reader.GetInt32(0); - data.str1 = reader.GetString(1); - data.str2 = reader.GetString(2); - songs.Add(data); - } - reader.Close(); - } - - reader.Dispose(); - - SQLiteTransaction _Transaction = connection.BeginTransaction(); - // update Title and Artist strings - foreach (SData data in songs) - { - command.CommandText = "UPDATE Songs SET [Artist] = @artist, [Title] = @title WHERE [ID] = @id"; - command.Parameters.Add("@title", System.Data.DbType.String, 0).Value = data.str2; - command.Parameters.Add("@artist", System.Data.DbType.String, 0).Value = data.str1; - command.Parameters.Add("@id", System.Data.DbType.Int32, 0).Value = data.id; - command.ExecuteNonQuery(); - } - - // update player names - foreach (SData data in scores) - { - command.CommandText = "UPDATE Scores SET [PlayerName] = @player, [Date] = @date WHERE [id] = @id"; - command.Parameters.Add("@player", System.Data.DbType.String, 0).Value = data.str1; - command.Parameters.Add("@date", System.Data.DbType.Int64, 0).Value = data.ticks; - command.Parameters.Add("@id", System.Data.DbType.Int32, 0).Value = data.id; - command.ExecuteNonQuery(); - } - _Transaction.Commit(); - - //Delete old tables after conversion - command.CommandText = "DROP TABLE US_Scores;"; - command.ExecuteNonQuery(); - - command.CommandText = "DROP TABLE US_Songs;"; - command.ExecuteNonQuery(); - - command.CommandText = "DROP TABLE us_statistics_info;"; - command.ExecuteNonQuery(); - - //This versioning is not used in Vocaluxe so reset it to 0 - command.CommandText = "PRAGMA user_version = 0"; - command.ExecuteNonQuery(); - - command.Dispose(); - connection.Close(); - connection.Dispose(); - return true; } @@ -807,184 +740,178 @@ namespace Vocaluxe.Base /// True if succeeded private static bool ConvertFrom101(string FilePath) { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + FilePath; - SQLiteCommand command; - SQLiteDataReader reader = null; - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); - } - catch (Exception) - { - return false; - } + connection.ConnectionString = "Data Source=" + FilePath; - command = new SQLiteCommand(connection); - - command.CommandText = "PRAGMA table_info(US_Scores);"; - reader = command.ExecuteReader(); - - - bool dateExists = false; - - //Check for column Date - while (reader.Read()) - { - for (int i = 0; i < reader.FieldCount; i++) + try { - if (reader.GetName(i) == "name") + connection.Open(); + } + catch (Exception) + { + return false; + } + + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + + command.CommandText = "PRAGMA table_info(US_Scores);"; + bool dateExists = false; + using (SQLiteDataReader reader = command.ExecuteReader()) { - if (reader.GetString(i) == "Date") - dateExists = true; - break; + //Check for column Date + while (reader.Read()) + { + for (int i = 0; i < reader.FieldCount; i++) + { + if (reader.GetName(i) == "name") + { + if (reader.GetString(i) == "Date") + dateExists = true; + break; + } + } + } + } - } - } + //This is a USDX 1.01 DB + if (!dateExists) + command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', '0', '0', '0', Difficulty from US_Scores"; + else // This is a CMD 1.01 DB + command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', Date, '0', '0', Difficulty from US_Scores"; + command.ExecuteNonQuery(); - reader.Close(); + command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; + command.ExecuteNonQuery(); - //This is a USDX 1.01 DB - if (!dateExists) - command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', '0', '0', '0', Difficulty from US_Scores"; - else // This is a CMD 1.01 DB - command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', Date, '0', '0', Difficulty from US_Scores"; - command.ExecuteNonQuery(); + // convert from CP1252 to UTF8 + List scores = new List(); + List songs = new List(); - command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; - command.ExecuteNonQuery(); + Sqlite3.sqlite3 OldDB; + int res = Sqlite3.sqlite3_open(FilePath, out OldDB); - // convert from CP1252 to UTF8 - List scores = new List(); - List songs = new List(); - - Sqlite3.sqlite3 OldDB; - int res = Sqlite3.sqlite3_open(FilePath, out OldDB); - - if (res != Sqlite3.SQLITE_OK) - { - CLog.LogError("Error opening Database: " + FilePath + " (" + Sqlite3.sqlite3_errmsg(OldDB) + ")"); - } - else - { - Sqlite3.Vdbe Stmt = new Sqlite3.Vdbe(); - res = Sqlite3.sqlite3_prepare_v2(OldDB, "SELECT id, Artist, Title FROM Songs", -1, ref Stmt, 0); - - if (res != Sqlite3.SQLITE_OK) - { - CLog.LogError("Error query Database: " + FilePath + " (" + Sqlite3.sqlite3_errmsg(OldDB) + ")"); - } - else - { - //Sqlite3.sqlite3_step(Stmt); - - Encoding UTF8 = Encoding.UTF8; - Encoding CP1252 = Encoding.GetEncoding(1252); - - while (Sqlite3.sqlite3_step(Stmt) == Sqlite3.SQLITE_ROW) + if (res != Sqlite3.SQLITE_OK) { - SData data = new SData(); - - data.id = Sqlite3.sqlite3_column_int(Stmt, 0); - - byte[] bytes = Sqlite3.sqlite3_column_rawbytes(Stmt, 1); - if (bytes != null) - data.str1 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes)); - else - data.str1 = "Someone"; - - bytes = Sqlite3.sqlite3_column_rawbytes(Stmt, 2); - if (bytes != null) - data.str2 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes)); - else - data.str2 = "Someone"; - - songs.Add(data); + CLog.LogError("Error opening Database: " + FilePath + " (" + Sqlite3.sqlite3_errmsg(OldDB) + ")"); } - Sqlite3.sqlite3_finalize(Stmt); - } - - Stmt = new Sqlite3.Vdbe(); - - if (!dateExists) - res = Sqlite3.sqlite3_prepare_v2(OldDB, "SELECT id, PlayerName FROM Scores", -1, ref Stmt, 0); - else - res = Sqlite3.sqlite3_prepare_v2(OldDB, "SELECT id, PlayerName, Date FROM Scores", -1, ref Stmt, 0); - - if (res != Sqlite3.SQLITE_OK) - { - CLog.LogError("Error query Database: " + FilePath + " (" + Sqlite3.sqlite3_errmsg(OldDB) + ")"); - } - else - { - //Sqlite3.sqlite3_step(Stmt); - - Encoding UTF8 = Encoding.UTF8; - Encoding CP1252 = Encoding.GetEncoding(1252); - - while (Sqlite3.sqlite3_step(Stmt) == Sqlite3.SQLITE_ROW) + else { - SData data = new SData(); + Sqlite3.Vdbe Stmt = new Sqlite3.Vdbe(); + res = Sqlite3.sqlite3_prepare_v2(OldDB, "SELECT id, Artist, Title FROM Songs", -1, ref Stmt, 0); - data.id = Sqlite3.sqlite3_column_int(Stmt, 0); - - byte[] bytes = Sqlite3.sqlite3_column_rawbytes(Stmt, 1); - if (bytes != null) - data.str1 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes)); + if (res != Sqlite3.SQLITE_OK) + { + CLog.LogError("Error query Database: " + FilePath + " (" + Sqlite3.sqlite3_errmsg(OldDB) + ")"); + } else - data.str1 = "Someone"; + { + //Sqlite3.sqlite3_step(Stmt); - if (dateExists) - data.ticks = UnixTimeToTicks(Sqlite3.sqlite3_column_int(Stmt, 2)); + Encoding UTF8 = Encoding.UTF8; + Encoding CP1252 = Encoding.GetEncoding(1252); - scores.Add(data); + while (Sqlite3.sqlite3_step(Stmt) == Sqlite3.SQLITE_ROW) + { + SData data = new SData(); + + data.id = Sqlite3.sqlite3_column_int(Stmt, 0); + + byte[] bytes = Sqlite3.sqlite3_column_rawbytes(Stmt, 1); + if (bytes != null) + data.str1 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes)); + else + data.str1 = "Someone"; + + bytes = Sqlite3.sqlite3_column_rawbytes(Stmt, 2); + if (bytes != null) + data.str2 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes)); + else + data.str2 = "Someone"; + + songs.Add(data); + } + Sqlite3.sqlite3_finalize(Stmt); + } + + Stmt = new Sqlite3.Vdbe(); + + if (!dateExists) + res = Sqlite3.sqlite3_prepare_v2(OldDB, "SELECT id, PlayerName FROM Scores", -1, ref Stmt, 0); + else + res = Sqlite3.sqlite3_prepare_v2(OldDB, "SELECT id, PlayerName, Date FROM Scores", -1, ref Stmt, 0); + + if (res != Sqlite3.SQLITE_OK) + { + CLog.LogError("Error query Database: " + FilePath + " (" + Sqlite3.sqlite3_errmsg(OldDB) + ")"); + } + else + { + //Sqlite3.sqlite3_step(Stmt); + + Encoding UTF8 = Encoding.UTF8; + Encoding CP1252 = Encoding.GetEncoding(1252); + + while (Sqlite3.sqlite3_step(Stmt) == Sqlite3.SQLITE_ROW) + { + SData data = new SData(); + + data.id = Sqlite3.sqlite3_column_int(Stmt, 0); + + byte[] bytes = Sqlite3.sqlite3_column_rawbytes(Stmt, 1); + if (bytes != null) + data.str1 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes)); + else + data.str1 = "Someone"; + + if (dateExists) + data.ticks = UnixTimeToTicks(Sqlite3.sqlite3_column_int(Stmt, 2)); + + scores.Add(data); + } + Sqlite3.sqlite3_finalize(Stmt); + } } - Sqlite3.sqlite3_finalize(Stmt); + Sqlite3.sqlite3_close(OldDB); + + SQLiteTransaction _Transaction = connection.BeginTransaction(); + + // update Title and Artist strings + foreach (SData data in songs) + { + command.CommandText = "UPDATE Songs SET [Artist] = @artist, [Title] = @title WHERE [ID] = @id"; + command.Parameters.Add("@title", System.Data.DbType.String, 0).Value = data.str2; + command.Parameters.Add("@artist", System.Data.DbType.String, 0).Value = data.str1; + command.Parameters.Add("@id", System.Data.DbType.Int32, 0).Value = data.id; + command.ExecuteNonQuery(); + } + + // update player names + foreach (SData data in scores) + { + if (!dateExists) + command.CommandText = "UPDATE Scores SET [PlayerName] = @player WHERE [id] = @id"; + else + { + command.CommandText = "UPDATE Scores SET [PlayerName] = @player, [Date] = @date WHERE [id] = @id"; + command.Parameters.Add("@date", System.Data.DbType.Int64, 0).Value = data.ticks; + } + command.Parameters.Add("@player", System.Data.DbType.String, 0).Value = data.str1; + command.Parameters.Add("@id", System.Data.DbType.Int32, 0).Value = data.id; + command.ExecuteNonQuery(); + } + _Transaction.Commit(); + + //Delete old tables after conversion + command.CommandText = "DROP TABLE US_Scores;"; + command.ExecuteNonQuery(); + + command.CommandText = "DROP TABLE US_Songs;"; + command.ExecuteNonQuery(); } } - Sqlite3.sqlite3_close(OldDB); - - SQLiteTransaction _Transaction = connection.BeginTransaction(); - - // update Title and Artist strings - foreach (SData data in songs) - { - command.CommandText = "UPDATE Songs SET [Artist] = @artist, [Title] = @title WHERE [ID] = @id"; - command.Parameters.Add("@title", System.Data.DbType.String, 0).Value = data.str2; - command.Parameters.Add("@artist", System.Data.DbType.String, 0).Value = data.str1; - command.Parameters.Add("@id", System.Data.DbType.Int32, 0).Value = data.id; - command.ExecuteNonQuery(); - } - - // update player names - foreach (SData data in scores) - { - if (!dateExists) - command.CommandText = "UPDATE Scores SET [PlayerName] = @player WHERE [id] = @id"; - else - { - command.CommandText = "UPDATE Scores SET [PlayerName] = @player, [Date] = @date WHERE [id] = @id"; - command.Parameters.Add("@date", System.Data.DbType.Int64, 0).Value = data.ticks; - } - command.Parameters.Add("@player", System.Data.DbType.String, 0).Value = data.str1; - command.Parameters.Add("@id", System.Data.DbType.Int32, 0).Value = data.id; - command.ExecuteNonQuery(); - } - _Transaction.Commit(); - - //Delete old tables after conversion - command.CommandText = "DROP TABLE US_Scores;"; - command.ExecuteNonQuery(); - - command.CommandText = "DROP TABLE US_Songs;"; - command.ExecuteNonQuery(); - - reader.Dispose(); - command.Dispose(); - connection.Close(); - connection.Dispose(); return true; } @@ -1001,19 +928,19 @@ namespace Vocaluxe.Base private static bool ConvertV1toV2(SQLiteConnection connection) { - SQLiteCommand command; - command = new SQLiteCommand(connection); + using (SQLiteCommand command = new SQLiteCommand(connection)) + { - command.CommandText = "ALTER TABLE Scores ADD ShortSong INTEGER"; - command.ExecuteNonQuery(); - command.CommandText = "UPDATE Scores SET [ShortSong] = @ShortSong"; - command.Parameters.Add("@ShortSong", System.Data.DbType.Int32, 0).Value = 0; - command.ExecuteNonQuery(); - command.CommandText = "UPDATE Version SET [Value] = @version"; - command.Parameters.Add("@version", System.Data.DbType.Int32, 0).Value = 2; - command.ExecuteNonQuery(); - command.Dispose(); + command.CommandText = "ALTER TABLE Scores ADD ShortSong INTEGER"; + command.ExecuteNonQuery(); + command.CommandText = "UPDATE Scores SET [ShortSong] = @ShortSong"; + command.Parameters.Add("@ShortSong", System.Data.DbType.Int32, 0).Value = 0; + command.ExecuteNonQuery(); + command.CommandText = "UPDATE Version SET [Value] = @version"; + command.Parameters.Add("@version", System.Data.DbType.Int32, 0).Value = 2; + command.ExecuteNonQuery(); + } return true; } @@ -1021,65 +948,61 @@ namespace Vocaluxe.Base private static bool ImportData(string SourceDBPath, string DestinationDBPath) { #region open db - SQLiteConnection connSource = new SQLiteConnection(); - connSource.ConnectionString = "Data Source=" + SourceDBPath; + using (SQLiteConnection connSource = new SQLiteConnection()) + { + connSource.ConnectionString = "Data Source=" + SourceDBPath; - try - { - connSource.Open(); - } - catch (Exception e) - { - CLog.LogError("Error on import high score data. Can't open source database \"" + SourceDBPath + "\" (" + e.Message + ")"); - return false; - } + try + { + connSource.Open(); + } + catch (Exception e) + { + CLog.LogError("Error on import high score data. Can't open source database \"" + SourceDBPath + "\" (" + e.Message + ")"); + return false; + } #endregion open db - SQLiteCommand cmdSource = new SQLiteCommand(connSource); - SQLiteDataReader rSource; - - #region import table scores - cmdSource.CommandText = "SELECT SongID, PlayerName, Score, LineNr, Date, Medley, Duet, ShortSong, Difficulty FROM Scores"; - rSource = cmdSource.ExecuteReader(); - if (rSource == null) - { - cmdSource.Dispose(); - connSource.Close(); - return false; - } - - if (rSource.FieldCount == 0) - { - rSource.Close(); - cmdSource.Dispose(); - connSource.Close(); - return true; - } - - while (rSource.Read()) - { - int songid = rSource.GetInt32(0); - string player = rSource.GetString(1); - int score = rSource.GetInt32(2); - int linenr = rSource.GetInt32(3); - long date = rSource.GetInt64(4); - int medley = rSource.GetInt32(5); - int duet = rSource.GetInt32(6); - int shortsong = rSource.GetInt32(7); - int diff = rSource.GetInt32(8); - - string artist, title; - int numplayed; - if (GetDataBaseSongInfos(songid, out artist, out title, out numplayed, SourceDBPath)) + using (SQLiteCommand cmdSource = new SQLiteCommand(connSource)) { - AddScore(player, score, linenr, date, medley, duet, shortsong, diff, artist, title, numplayed, _HighscoreFilePath); + SQLiteDataReader rSource; + + #region import table scores + cmdSource.CommandText = "SELECT SongID, PlayerName, Score, LineNr, Date, Medley, Duet, ShortSong, Difficulty FROM Scores"; + rSource = cmdSource.ExecuteReader(); + if (rSource == null) + return false; + + if (rSource.FieldCount == 0) + { + rSource.Close(); + return true; + } + + while (rSource.Read()) + { + int songid = rSource.GetInt32(0); + string player = rSource.GetString(1); + int score = rSource.GetInt32(2); + int linenr = rSource.GetInt32(3); + long date = rSource.GetInt64(4); + int medley = rSource.GetInt32(5); + int duet = rSource.GetInt32(6); + int shortsong = rSource.GetInt32(7); + int diff = rSource.GetInt32(8); + + string artist, title; + int numplayed; + if (GetDataBaseSongInfos(songid, out artist, out title, out numplayed, SourceDBPath)) + { + AddScore(player, score, linenr, date, medley, duet, shortsong, diff, artist, title, numplayed, _HighscoreFilePath); + } + } + #endregion import table scores + + rSource.Close(); } } - #endregion import table scores - - rSource.Close(); - cmdSource.Dispose(); - connSource.Close(); return true; } @@ -1103,138 +1026,111 @@ namespace Vocaluxe.Base _ConnectionCover.Open(); } - SQLiteCommand command; - command = new SQLiteCommand(_ConnectionCover); - - command.CommandText = "SELECT id, width, height FROM Cover WHERE [Path] = @path"; - command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = CoverPath; - - SQLiteDataReader reader = null; - try + using (SQLiteCommand command = new SQLiteCommand(_ConnectionCover)) { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } - if (reader != null && reader.HasRows) - { - reader.Read(); - int id = reader.GetInt32(0); - int w = reader.GetInt32(1); - int h = reader.GetInt32(2); - reader.Close(); - - command.CommandText = "SELECT Data FROM CoverData WHERE CoverID = " + id.ToString(); - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } - - if (reader.HasRows) - { - result = true; - reader.Read(); - byte[] data = GetBytes(reader); - tex = CDraw.QuequeTexture(w, h, ref data); - } - } - else - { - if (reader != null) - reader.Close(); - - if (_TransactionCover == null) - { - _TransactionCover = _ConnectionCover.BeginTransaction(); - } - - Bitmap origin; - try - { - origin = new Bitmap(CoverPath); - } - catch (Exception) - { - CLog.LogError("Error loading Texture: " + CoverPath); - tex = new STexture(-1); - - if (reader != null) - { - reader.Close(); - reader.Dispose(); - } - command.Dispose(); - - return false; - } - - int w = MaxSize; - int h = MaxSize; - - if (origin.Width >= origin.Height && origin.Width > w) - h = (int)Math.Round((float)w / origin.Width * origin.Height); - else if (origin.Height > origin.Width && origin.Height > h) - w = (int)Math.Round((float)h / origin.Height * origin.Width); - - Bitmap bmp = new Bitmap(w, h); - Graphics g = Graphics.FromImage(bmp); - g.DrawImage(origin, new Rectangle(0, 0, w, h)); - g.Dispose(); - if (origin != null) - origin.Dispose(); - - byte[] data = new byte[w * h * 4]; - - BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - Marshal.Copy(bmp_data.Scan0, data, 0, w * h * 4); - bmp.UnlockBits(bmp_data); - bmp.Dispose(); - - tex = CDraw.QuequeTexture(w, h, ref data); - - command.CommandText = "INSERT INTO Cover (Path, width, height) " + - "VALUES (@path, " + w.ToString() + ", " + h.ToString() + ")"; + command.CommandText = "SELECT id, width, height FROM Cover WHERE [Path] = @path"; command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = CoverPath; - command.ExecuteNonQuery(); - command.CommandText = "SELECT id FROM Cover WHERE [Path] = @path"; - command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = CoverPath; - reader = null; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } + SQLiteDataReader reader = command.ExecuteReader(); - if (reader != null) + if (reader != null && reader.HasRows) { reader.Read(); int id = reader.GetInt32(0); + int w = reader.GetInt32(1); + int h = reader.GetInt32(2); reader.Close(); - command.CommandText = "INSERT INTO CoverData (CoverID, Data) " + - "VALUES ('" + id.ToString() + "', @data)"; - command.Parameters.Add("@data", System.Data.DbType.Binary, 20).Value = data; - command.ExecuteReader(); - result = true; - } - } - if (reader != null) - { - reader.Close(); - reader.Dispose(); + command.CommandText = "SELECT Data FROM CoverData WHERE CoverID = @id"; + command.Parameters.Add("@id",DbType.Int32).Value=id; + reader = command.ExecuteReader(); + + if (reader.HasRows) + { + result = true; + reader.Read(); + byte[] data = GetBytes(reader); + tex = CDraw.QuequeTexture(w, h, ref data); + } + } + else + { + if (reader != null) + reader.Close(); + + if (_TransactionCover == null) + { + _TransactionCover = _ConnectionCover.BeginTransaction(); + } + + Bitmap origin; + try + { + origin = new Bitmap(CoverPath); + } + catch (Exception) + { + CLog.LogError("Error loading Texture: " + CoverPath); + return false; + } + + int w = MaxSize; + int h = MaxSize; + byte[] data; + + try + { + if (origin.Width >= origin.Height && origin.Width > w) + h = (int)Math.Round((float)w / origin.Width * origin.Height); + else if (origin.Height > origin.Width && origin.Height > h) + w = (int)Math.Round((float)h / origin.Height * origin.Width); + + using (Bitmap bmp = new Bitmap(w, h)) + { + using (Graphics g = Graphics.FromImage(bmp)) + { + g.DrawImage(origin, new Rectangle(0, 0, w, h)); + } + + data = new byte[w * h * 4]; + BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Marshal.Copy(bmp_data.Scan0, data, 0, w * h * 4); + bmp.UnlockBits(bmp_data); + } + } + finally + { + origin.Dispose(); + } + + tex = CDraw.QuequeTexture(w, h, ref data); + + command.CommandText = "INSERT INTO Cover (Path, width, height) VALUES (@path, @w, @h)"; + command.Parameters.Add("@w", DbType.Int32).Value = w; + command.Parameters.Add("@h", DbType.Int32).Value = h; + command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = CoverPath; + command.ExecuteNonQuery(); + + command.CommandText = "SELECT id FROM Cover WHERE [Path] = @path"; + command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = CoverPath; + reader = command.ExecuteReader(); + + if (reader != null) + { + reader.Read(); + int id = reader.GetInt32(0); + command.CommandText = "INSERT INTO CoverData (CoverID, Data) VALUES (@id, @data)"; + command.Parameters.Add("@id", DbType.Int32).Value = id; + command.Parameters.Add("@data", System.Data.DbType.Binary, 20).Value = data; + command.ExecuteReader(); + result = true; + } + } + + if (reader != null) + reader.Dispose(); } - command.Dispose(); return result; } @@ -1256,107 +1152,101 @@ namespace Vocaluxe.Base if (_ConnectionCover != null) { _ConnectionCover.Close(); + _ConnectionCover.Dispose(); _ConnectionCover = null; } } private static bool InitCoverDB() { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + _CoverFilePath; - SQLiteCommand command; + using (SQLiteConnection connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + _CoverFilePath; - try - { - connection.Open(); - } - catch (Exception) - { - return false; - } - - command = new SQLiteCommand(connection); - command.CommandText = "SELECT Value FROM Version"; - - SQLiteDataReader reader = null; - - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - ; - } - - if (reader == null) - { - // create new database/tables - CreateCoverDB(); - } - else if (reader.FieldCount == 0) - { - // create new database/tables - CreateCoverDB(); - } - else - { - reader.Read(); - - if (reader.GetInt32(0) < CSettings.iDatabaseHighscoreVersion) + try { - // update database + connection.Open(); + } + catch (Exception) + { + return false; + } + + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + command.CommandText = "SELECT Value FROM Version"; + + SQLiteDataReader reader = null; + + try + { + reader = command.ExecuteReader(); + } + catch (Exception) + { + } + + if (reader == null) + { + // create new database/tables + CreateCoverDB(); + } + else if (reader.FieldCount == 0) + { + // create new database/tables + CreateCoverDB(); + } + else + { + reader.Read(); + + if (reader.GetInt32(0) < CSettings.iDatabaseHighscoreVersion) + { + // update database + } + } + if (reader != null) + reader.Dispose(); } } - - if (reader != null) - { - reader.Close(); - reader.Dispose(); - } - - command.Dispose(); - - connection.Close(); - connection.Dispose(); - return true; } private static void CreateCoverDB() { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + _CoverFilePath; - SQLiteCommand command; - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); + connection.ConnectionString = "Data Source=" + _CoverFilePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return; + } + + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + + command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, @Value)"; + command.Parameters.Add("@Value", DbType.Int32).Value = CSettings.iDatabaseCoverVersion; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Cover ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "Path TEXT NOT NULL, width INTEGER NOT NULL, height INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS CoverData ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "CoverID INTEGER NOT NULL, Data BLOB NOT NULL);"; + command.ExecuteNonQuery(); + + } } - catch (Exception) - { - return; - } - - command = new SQLiteCommand(connection); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, " + CSettings.iDatabaseCoverVersion.ToString() + ")"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Cover ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "Path TEXT NOT NULL, width INTEGER NOT NULL, height INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS CoverData ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "CoverID INTEGER NOT NULL, Data BLOB NOT NULL);"; - command.ExecuteNonQuery(); - - command.Dispose(); - connection.Close(); - connection.Dispose(); } #endregion Cover @@ -1365,68 +1255,58 @@ namespace Vocaluxe.Base { bool result = false; - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; - SQLiteCommand command; - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); - } - catch (Exception) - { - return false; - } - command = new SQLiteCommand(connection); - - command.CommandText = "SELECT id, width, height FROM Images WHERE [Path] = @path"; - command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = FileName; - - SQLiteDataReader reader = null; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } - - if (reader != null && reader.HasRows) - { - reader.Read(); - int id = reader.GetInt32(0); - int w = reader.GetInt32(1); - int h = reader.GetInt32(2); - reader.Close(); - - command.CommandText = "SELECT Data FROM ImageData WHERE ImageID = " + id.ToString(); + connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; try { - reader = command.ExecuteReader(); + connection.Open(); } catch (Exception) { - throw; + return false; } - - if (reader.HasRows) + using (SQLiteCommand command = new SQLiteCommand(connection)) { - result = true; - reader.Read(); - byte[] data = GetBytes(reader); - tex = CDraw.AddTexture(w, h, ref data); + + command.CommandText = "SELECT id, width, height FROM Images WHERE [Path] = @path"; + command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = FileName; + + SQLiteDataReader reader = command.ExecuteReader(); + + if (reader != null && reader.HasRows) + { + reader.Read(); + int id = reader.GetInt32(0); + int w = reader.GetInt32(1); + int h = reader.GetInt32(2); + reader.Close(); + + command.CommandText = "SELECT Data FROM ImageData WHERE ImageID = @id"; + command.Parameters.Add("@id",DbType.Int32).Value=id; + try + { + reader = command.ExecuteReader(); + } + catch (Exception) + { + throw; + } + + if (reader.HasRows) + { + result = true; + reader.Read(); + byte[] data = GetBytes(reader); + tex = CDraw.AddTexture(w, h, ref data); + } + } + + if (reader != null) + reader.Dispose(); } } - if (reader != null) - { - reader.Close(); - reader.Dispose(); - } - command.Dispose(); - connection.Close(); - connection.Dispose(); - return result; } @@ -1461,53 +1341,50 @@ namespace Vocaluxe.Base catch (Exception) { CLog.LogError("Error loading Texture: " + ImagePath); - tex = new STexture(-1); - - connection.Close(); - return false; } - int w = origin.Width; int h = origin.Height; + byte[] data; + + try + { + using (Bitmap bmp = new Bitmap(w, h)) + { + using (Graphics g = Graphics.FromImage(bmp)) + { + g.DrawImage(origin, new Rectangle(0, 0, w, h)); + } + tex = CDraw.AddTexture(bmp); + data = new byte[w * h * 4]; - Bitmap bmp = new Bitmap(w, h); - Graphics g = Graphics.FromImage(bmp); - g.DrawImage(origin, new Rectangle(0, 0, w, h)); - g.Dispose(); - origin.Dispose(); - tex = CDraw.AddTexture(bmp); - byte[] data = new byte[w * h * 4]; + BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Marshal.Copy(bmp_data.Scan0, data, 0, w * h * 4); + bmp.UnlockBits(bmp_data); + } + } + finally + { + origin.Dispose(); + } - BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - Marshal.Copy(bmp_data.Scan0, data, 0, w * h * 4); - bmp.UnlockBits(bmp_data); - bmp.Dispose(); - - command.CommandText = "INSERT INTO Images (Path, width, height) " + - "VALUES (@path, " + w.ToString() + ", " + h.ToString() + ")"; + command.CommandText = "INSERT INTO Images (Path, width, height) VALUES (@path, @w, @h)"; command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = Path.GetFileName(ImagePath); + command.Parameters.Add("@w", System.Data.DbType.Int32, 0).Value = w; + command.Parameters.Add("@h", System.Data.DbType.Int32, 0).Value = h; command.ExecuteNonQuery(); command.CommandText = "SELECT id FROM Images WHERE [Path] = @path"; command.Parameters.Add("@path", System.Data.DbType.String, 0).Value = Path.GetFileName(ImagePath); - SQLiteDataReader reader = null; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } + SQLiteDataReader reader = command.ExecuteReader(); if (reader != null) { reader.Read(); int id = reader.GetInt32(0); reader.Close(); - command.CommandText = "INSERT INTO ImageData (ImageID, Data) " + - "VALUES ('" + id.ToString() + "', @data)"; + command.CommandText = "INSERT INTO ImageData (ImageID, Data) VALUES (@id, @data)"; + command.Parameters.Add("@id", System.Data.DbType.Int32, 20).Value = id; command.Parameters.Add("@data", System.Data.DbType.Binary, 20).Value = data; command.ExecuteReader(); result = true; @@ -1521,101 +1398,95 @@ namespace Vocaluxe.Base private static bool InitCreditsRessourcesDB() { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; - SQLiteCommand command; + using (SQLiteConnection connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; - try - { - connection.Open(); - } - catch (Exception) - { - return false; - } - - command = new SQLiteCommand(connection); - command.CommandText = "SELECT Value FROM Version"; - - SQLiteDataReader reader = null; - - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - ; - } - - if (reader == null) - { - // Log error - CLog.LogError("Can't find Credits-DB!"); - } - else if (reader.FieldCount == 0) - { - // Log error - CLog.LogError("Can't find Credits-DB! Field-Count = 0"); - } - else - { - reader.Read(); - - if (reader.GetInt32(0) < CSettings.iDatabaseHighscoreVersion) + try { - // update database + connection.Open(); + } + catch (Exception) + { + return false; + } + + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + command.CommandText = "SELECT Value FROM Version"; + + SQLiteDataReader reader = null; + + try + { + reader = command.ExecuteReader(); + } + catch (Exception) + { + } + + if (reader == null) + { + // Log error + CLog.LogError("Can't find Credits-DB!"); + } + else if (reader.FieldCount == 0) + { + // Log error + CLog.LogError("Can't find Credits-DB! Field-Count = 0"); + } + else + { + reader.Read(); + + if (reader.GetInt32(0) < CSettings.iDatabaseHighscoreVersion) + { + // update database + } + } + + if (reader != null) + reader.Dispose(); } } - - if (reader != null) - { - reader.Close(); - reader.Dispose(); - } - - command.Dispose(); - - connection.Close(); - connection.Dispose(); - return true; } private static void CreateCreditsRessourcesDB() { - SQLiteConnection connection = new SQLiteConnection(); - connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; - SQLiteCommand command; - - try + using (SQLiteConnection connection = new SQLiteConnection()) { - connection.Open(); + connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return; + } + + using (SQLiteCommand command = new SQLiteCommand(connection)) + { + + command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, @Value)"; + command.Parameters.Add("@Value", DbType.Int32).Value = CSettings.iDatabaseCreditsRessourcesVersion; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Images ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "Path TEXT NOT NULL, width INTEGER NOT NULL, height INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS ImageData ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "ImageID INTEGER NOT NULL, Data BLOB NOT NULL);"; + command.ExecuteNonQuery(); + + } } - catch (Exception) - { - return; - } - - command = new SQLiteCommand(connection); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, " + CSettings.iDatabaseCreditsRessourcesVersion.ToString() + ")"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Images ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "Path TEXT NOT NULL, width INTEGER NOT NULL, height INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS ImageData ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "ImageID INTEGER NOT NULL, Data BLOB NOT NULL);"; - command.ExecuteNonQuery(); - - command.Dispose(); - connection.Close(); - connection.Dispose(); } #endregion CreditsRessources diff --git a/Vocaluxe/Base/CDraw.cs b/Vocaluxe/Base/CDraw.cs index 06967894..3b2e9d17 100644 --- a/Vocaluxe/Base/CDraw.cs +++ b/Vocaluxe/Base/CDraw.cs @@ -73,7 +73,9 @@ namespace Vocaluxe.Base public static bool Unload() { - return _Draw.Unload(); + bool result = _Draw.Unload(); + _Draw = null; + return result; } public static int GetScreenWidth() @@ -166,20 +168,22 @@ namespace Vocaluxe.Base if (!System.IO.File.Exists(TexturePath)) return new STexture(-1); - Bitmap origin = new Bitmap(TexturePath); - int w = MaxSize; - int h = MaxSize; + using (Bitmap origin = new Bitmap(TexturePath)) + { + int w = MaxSize; + int h = MaxSize; - if (origin.Width >= origin.Height && origin.Width > w) - h = (int)Math.Round((float)w / origin.Width * origin.Height); - else if (origin.Height > origin.Width && origin.Height > h) - w = (int)Math.Round((float)h / origin.Height * origin.Width); + if (origin.Width >= origin.Height && origin.Width > w) + h = (int)Math.Round((float)w / origin.Width * origin.Height); + else if (origin.Height > origin.Width && origin.Height > h) + w = (int)Math.Round((float)h / origin.Height * origin.Width); - Bitmap bmp = new Bitmap(origin, w, h); - STexture tex = _Draw.AddTexture(bmp); - bmp.Dispose(); - origin.Dispose(); - return tex; + using (Bitmap bmp = new Bitmap(origin, w, h)) + { + STexture tex = _Draw.AddTexture(bmp); + return tex; + } + } } public static STexture AddTexture(int W, int H, IntPtr Data) diff --git a/Vocaluxe/Base/CFont.cs b/Vocaluxe/Base/CFont.cs index c190e0d2..3361f00c 100644 --- a/Vocaluxe/Base/CFont.cs +++ b/Vocaluxe/Base/CFont.cs @@ -36,66 +36,76 @@ namespace Vocaluxe.Base float factor = GetFactor(chr, flags); CFonts.Height = SIZEh * factor; - Bitmap bmp = new Bitmap(10, 10); - System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp); + Font fo; + Size sizeB; + SizeF size; + System.Drawing.Graphics g; + using (Bitmap bmp = new Bitmap(10, 10)) + { + g = System.Drawing.Graphics.FromImage(bmp); - Font fo = CFonts.GetFont(); - Size sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); + fo = CFonts.GetFont(); + sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); - SizeF size = g.MeasureString(chr.ToString(), fo); - - g.Dispose(); - bmp.Dispose(); + size = g.MeasureString(chr.ToString(), fo); - bmp = new Bitmap((int)(sizeB.Width * 2f), sizeB.Height); - g = System.Drawing.Graphics.FromImage(bmp); - g.Clear(System.Drawing.Color.Transparent); + g.Dispose(); + } - g.SmoothingMode = SmoothingMode.AntiAlias; - g.InterpolationMode = InterpolationMode.HighQualityBicubic; - g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; - CFonts.Height = SIZEh; - fo = CFonts.GetFont(); + using (Bitmap bmp = new Bitmap((int)(sizeB.Width * 2f), sizeB.Height)) + { + g = System.Drawing.Graphics.FromImage(bmp); + g.Clear(System.Drawing.Color.Transparent); - PointF point = new PointF( - outline * Math.Abs(sizeB.Width - size.Width) + (sizeB.Width - size.Width) / 2f + SIZEh / 5f, - (sizeB.Height - size.Height - (size.Height + SIZEh/4f) * (1f - factor)) / 2f); + g.SmoothingMode = SmoothingMode.AntiAlias; + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; + CFonts.Height = SIZEh; + fo = CFonts.GetFont(); - GraphicsPath path = new GraphicsPath(); - path.AddString( - chr.ToString(), - fo.FontFamily, - (int)fo.Style, - SIZEh, - point, - new StringFormat()); + PointF point = new PointF( + outline * Math.Abs(sizeB.Width - size.Width) + (sizeB.Width - size.Width) / 2f + SIZEh / 5f, + (sizeB.Height - size.Height - (size.Height + SIZEh / 4f) * (1f - factor)) / 2f); - Pen pen = new Pen( - Color.FromArgb( - (int)CFonts.OutlineColor.A * 255, - (int)CFonts.OutlineColor.R * 255, - (int)CFonts.OutlineColor.G * 255, - (int)CFonts.OutlineColor.B * 255), - SIZEh * outline); + using (GraphicsPath path = new GraphicsPath()) + { + path.AddString( + chr.ToString(), + fo.FontFamily, + (int)fo.Style, + SIZEh, + point, + new StringFormat()); - pen.LineJoin = LineJoin.Round; - g.DrawPath(pen, path); - g.FillPath(Brushes.White, path); + using (Pen pen = new Pen( + Color.FromArgb( + (int)CFonts.OutlineColor.A * 255, + (int)CFonts.OutlineColor.R * 255, + (int)CFonts.OutlineColor.G * 255, + (int)CFonts.OutlineColor.B * 255), + SIZEh * outline)) + { - /* - g.DrawString( - chr.ToString(), - fo, - Brushes.White, - point); - * */ + pen.LineJoin = LineJoin.Round; + g.DrawPath(pen, path); + g.FillPath(Brushes.White, path); + } + } - Texture = CDraw.AddTexture(bmp); - //bmp.Save("test.png", ImageFormat.Png); - Chr = chr; - width = (int)((1f + outline / 2f) * sizeB.Width * Texture.width/factor / bmp.Width); + /* + g.DrawString( + chr.ToString(), + fo, + Brushes.White, + point); + * */ - bmp.Dispose(); + Texture = CDraw.AddTexture(bmp); + //bmp.Save("test.png", ImageFormat.Png); + Chr = chr; + width = (int)((1f + outline / 2f) * sizeB.Width * Texture.width / factor / bmp.Width); + + } g.Dispose(); fo.Dispose(); } @@ -114,23 +124,31 @@ namespace Vocaluxe.Base CFonts.Style = EStyle.Normal; CFonts.Height = SIZEh; - Bitmap bmp = new Bitmap(10, 10); - System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp); + float h_style, h_normal; + using (Bitmap bmp = new Bitmap(10, 10)) + { + using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp)) + { - Font fo = CFonts.GetFont(); - Size sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); - //SizeF size = g.MeasureString(chr.ToString(), fo); - float h_normal = sizeB.Height; + Font fo = CFonts.GetFont(); + Size sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); + //SizeF size = g.MeasureString(chr.ToString(), fo); + h_normal = sizeB.Height; + } + CFonts.Style = style; - CFonts.Style = style; - bmp = new Bitmap(10, 10); - g = System.Drawing.Graphics.FromImage(bmp); + } + using (Bitmap bmp = new Bitmap(10, 10)) + { + using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp)) + { - fo = CFonts.GetFont(); - sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); - //size = g.MeasureString(chr.ToString(), fo); - float h_style = sizeB.Height; - g.Dispose(); + Font fo = CFonts.GetFont(); + Size sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); + //size = g.MeasureString(chr.ToString(), fo); + h_style = sizeB.Height; + } + } return h_normal / h_style; } } @@ -415,7 +433,7 @@ namespace Vocaluxe.Base if (h <= 0f) return; - if (Text == String.Empty) + if (Text.Length == 0) return; Height = h; @@ -452,7 +470,7 @@ namespace Vocaluxe.Base if (h <= 0f) return; - if (Text == String.Empty) + if (Text.Length == 0) return; Height = h; @@ -489,7 +507,7 @@ namespace Vocaluxe.Base if (h <= 0f) return; - if (Text == String.Empty) + if (Text.Length == 0) return; Height = h; @@ -955,7 +973,7 @@ namespace Vocaluxe.Base private static int GetFontIndex(string ThemeName, string FontName) { - if (ThemeName == String.Empty || FontName == String.Empty) + if (ThemeName.Length == 0 || FontName.Length == 0) return -1; for (int i = 0; i < _Fonts.Count; i++) @@ -969,7 +987,7 @@ namespace Vocaluxe.Base private static int GetFontIndexParty(int PartyModeID, string FontName) { - if (PartyModeID == -1 || FontName == String.Empty) + if (PartyModeID == -1 || FontName.Length == 0) return -1; for (int i = 0; i < _Fonts.Count; i++) diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index 2ceb98d3..0d24defd 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -871,7 +871,7 @@ namespace Vocaluxe.Base { _Cursor.UnloadTextures(); - if (CTheme.Cursor.color != string.Empty) + if (CTheme.Cursor.color.Length > 0) { SColorF color; color = CTheme.GetColor(CTheme.Cursor.color, -1); diff --git a/Vocaluxe/Base/CInput.cs b/Vocaluxe/Base/CInput.cs index e6465d31..d8aae95e 100644 --- a/Vocaluxe/Base/CInput.cs +++ b/Vocaluxe/Base/CInput.cs @@ -22,6 +22,7 @@ namespace Vocaluxe.Base public static void Close() { _Input.Close(); + _Input = null; } public static bool Connect() diff --git a/Vocaluxe/Base/CParty.cs b/Vocaluxe/Base/CParty.cs index 3ade852f..4c393ddb 100644 --- a/Vocaluxe/Base/CParty.cs +++ b/Vocaluxe/Base/CParty.cs @@ -351,28 +351,30 @@ namespace Vocaluxe.Base Params.IncludeDebugInformation = true; #endif - CodeDomProvider CDP = CodeDomProvider.CreateProvider("CSharp"); - CompilerResults CompileResult = null; + using (CodeDomProvider CDP = CodeDomProvider.CreateProvider("CSharp")) + { + CompilerResults CompileResult = null; - try - { - CompileResult = CDP.CompileAssemblyFromFile(Params, files); - } - catch (Exception e) - { - CLog.LogError("Error Compiling Source (" + CHelper.ListStrings(files) + "): " + e.Message); - return null; - } - - if (CompileResult.Errors.Count > 0) - { - for (int i = 0; i < CompileResult.Errors.Count; i++) + try { - CLog.LogError("Error Compiling Source (" + CHelper.ListStrings(files) + "): " + CompileResult.Errors[i].ErrorText); - } - return null; + CompileResult = CDP.CompileAssemblyFromFile(Params, files); + } + catch (Exception e) + { + CLog.LogError("Error Compiling Source (" + CHelper.ListStrings(files) + "): " + e.Message); + return null; + } + + if (CompileResult.Errors.Count > 0) + { + for (int i = 0; i < CompileResult.Errors.Count; i++) + { + CLog.LogError("Error Compiling Source (" + CHelper.ListStrings(files) + "): " + CompileResult.Errors[i].ErrorText); + } + return null; + } + return CompileResult.CompiledAssembly; } - return CompileResult.CompiledAssembly; } private static CMenuParty GetPartyScreenInstance(Assembly Assembly, string ScreenName, string XmlPath) diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs index 70569215..5ef193db 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -105,7 +105,7 @@ namespace Vocaluxe.Base { if (PlaylistID < 0 || PlaylistID >= _Playlists.Count) return; - if (_Playlists[PlaylistID].PlaylistFile != String.Empty) + if (_Playlists[PlaylistID].PlaylistFile.Length > 0) { try { @@ -233,46 +233,47 @@ namespace Vocaluxe.Base try { - sr = new StreamReader(file, Encoding.Default, true); - - int pos = -1; - string line; - while((line = sr.ReadLine()) != null) + using (sr = new StreamReader(file, Encoding.Default, true)) { - pos = line.IndexOf(":"); - if (pos > 0) + + int pos = -1; + string line; + while ((line = sr.ReadLine()) != null) { - //Name or comment - if (line[0] == '#') + pos = line.IndexOf(":"); + if (pos > 0) { - string Identifier = line.Substring(1, pos - 1).Trim(); - string Value = line.Substring(pos + 1, line.Length - pos - 1).Trim(); - if (Identifier.ToUpper() == "NAME") + //Name or comment + if (line[0] == '#') { - pl.PlaylistName = Value; - } - } - //Song - else - { - string Artist = line.Substring(0, pos - 1).Trim(); - string Title = line.Substring(pos + 1, line.Length - pos - 1).Trim(); - bool found = false; - for (int s = 0; s < AllSongs.Length; s++) - { - if (AllSongs[s].Artist == Artist && AllSongs[s].Title == Title) + string Identifier = line.Substring(1, pos - 1).Trim(); + string Value = line.Substring(pos + 1, line.Length - pos - 1).Trim(); + if (Identifier.ToUpper() == "NAME") { - pl.AddSong(AllSongs[s].ID); - found = true; - break; + pl.PlaylistName = Value; } } - if (!found) - CLog.LogError("Can't find song '" + Title + "' from '" + Artist + "' in playlist file: " + file); + //Song + else + { + string Artist = line.Substring(0, pos - 1).Trim(); + string Title = line.Substring(pos + 1, line.Length - pos - 1).Trim(); + bool found = false; + for (int s = 0; s < AllSongs.Length; s++) + { + if (AllSongs[s].Artist == Artist && AllSongs[s].Title == Title) + { + pl.AddSong(AllSongs[s].ID); + found = true; + break; + } + } + if (!found) + CLog.LogError("Can't find song '" + Title + "' from '" + Artist + "' in playlist file: " + file); + } } } } - sr.Close(); File.Delete(file); } catch diff --git a/Vocaluxe/Base/CProfiles.cs b/Vocaluxe/Base/CProfiles.cs index 686f5c4a..9fc9da0f 100644 --- a/Vocaluxe/Base/CProfiles.cs +++ b/Vocaluxe/Base/CProfiles.cs @@ -59,8 +59,8 @@ namespace Vocaluxe.Base profile.Avatar = new SAvatar(-1); profile.GuestProfile = EOffOn.TR_CONFIG_OFF; profile.Active = EOffOn.TR_CONFIG_ON; - - if (FileName != String.Empty) + + if (FileName.Length > 0) profile.ProfileFile = Path.Combine(CSettings.sFolderProfiles, FileName); else profile.ProfileFile = String.Empty; @@ -253,7 +253,7 @@ namespace Vocaluxe.Base { if (ProfileID < 0 || ProfileID >= _Profiles.Count) return; - if (_Profiles[ProfileID].ProfileFile != String.Empty) + if (_Profiles[ProfileID].ProfileFile.Length > 0) { try { @@ -293,7 +293,7 @@ namespace Vocaluxe.Base if (ProfileID < 0 || ProfileID >= _Profiles.Count) return; - if (_Profiles[ProfileID].ProfileFile == String.Empty) + if (_Profiles[ProfileID].ProfileFile.Length == 0) { string filename = string.Empty; foreach (char chr in _Profiles[ProfileID].PlayerName) @@ -302,7 +302,7 @@ namespace Vocaluxe.Base filename += chr.ToString(); } - if (filename == String.Empty) + if (filename.Length == 0) filename = "1"; int i = 0; @@ -330,29 +330,30 @@ namespace Vocaluxe.Base CLog.LogError("Error creating/opening Profile File " + _Profiles[ProfileID].ProfileFile + ": " + e.Message); return; } - - if (writer == null) + try { - CLog.LogError("Error creating/opening Profile File " + _Profiles[ProfileID].ProfileFile); - return; + + writer.WriteStartDocument(); + writer.WriteStartElement("root"); + + writer.WriteStartElement("Info"); + writer.WriteElementString("PlayerName", _Profiles[ProfileID].PlayerName); + writer.WriteElementString("Difficulty", Enum.GetName(typeof(EGameDifficulty), _Profiles[ProfileID].Difficulty)); + writer.WriteElementString("Avatar", _Profiles[ProfileID].Avatar.FileName); + writer.WriteElementString("GuestProfile", Enum.GetName(typeof(EOffOn), _Profiles[ProfileID].GuestProfile)); + writer.WriteElementString("Active", Enum.GetName(typeof(EOffOn), _Profiles[ProfileID].Active)); + writer.WriteEndElement(); + + writer.WriteEndElement(); //end of root + writer.WriteEndDocument(); + + writer.Flush(); + } + finally + { + writer.Close(); + writer = null; } - - writer.WriteStartDocument(); - writer.WriteStartElement("root"); - - writer.WriteStartElement("Info"); - writer.WriteElementString("PlayerName", _Profiles[ProfileID].PlayerName); - writer.WriteElementString("Difficulty", Enum.GetName(typeof(EGameDifficulty), _Profiles[ProfileID].Difficulty)); - writer.WriteElementString("Avatar", _Profiles[ProfileID].Avatar.FileName); - writer.WriteElementString("GuestProfile", Enum.GetName(typeof(EOffOn), _Profiles[ProfileID].GuestProfile)); - writer.WriteElementString("Active", Enum.GetName(typeof(EOffOn), _Profiles[ProfileID].Active)); - writer.WriteEndElement(); - - writer.WriteEndElement(); //end of root - writer.WriteEndDocument(); - - writer.Flush(); - writer.Close(); } private static void LoadProfile(string FileName) diff --git a/Vocaluxe/Base/CSettings.cs b/Vocaluxe/Base/CSettings.cs index 79133616..c13bd022 100644 --- a/Vocaluxe/Base/CSettings.cs +++ b/Vocaluxe/Base/CSettings.cs @@ -145,7 +145,7 @@ namespace Vocaluxe.Base { string sVersion = sProgramName; - if (sProgramCodeName != String.Empty) + if (sProgramCodeName.Length > 0) sVersion += " \"" + sProgramCodeName + "\""; return sVersion += " " + GetVersionText(); diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 75241ded..4a3751c5 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -64,7 +64,7 @@ namespace Vocaluxe.Base get { return _SearchFilter; } set { - if (value != String.Empty) + if (value.Length > 0) { _Sort(_SongSorting, EOffOn.TR_CONFIG_OFF, _IgnoreArticles, value, false, _ShowDuetSongs); } @@ -409,14 +409,14 @@ namespace Vocaluxe.Base _FilteredSongs.Clear(); string[] searchStrings = null; - if (_SearchFilter != String.Empty) + if (_SearchFilter.Length > 0) searchStrings = _SearchFilter.ToUpper().Split(new char[] { ' ' }); foreach (CSong song in _Songs) { if (!song.IsDuet || _ShowDuetSongs) { - if (_SearchFilter == String.Empty) + if (_SearchFilter.Length == 0) _FilteredSongs.Add(song); else if (searchStrings != null) { @@ -480,7 +480,7 @@ namespace Vocaluxe.Base FieldInfo field = null; bool isString = false; List SortList = new List(); - if (fieldName == String.Empty) + if (fieldName.Length == 0) _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); @@ -657,7 +657,7 @@ namespace Vocaluxe.Base for (int i = 0; i < _SongsSortList.Length; i++) { string Year = _SongsSortList[i].SortString; - if (Year != "") + if (Year.Length > 0) { Year = Year.Substring(0, 3); _SongsSortList[i].SortString = Year + "0 - " + Year + "9"; diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index 14747225..2f902c67 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -165,7 +165,7 @@ namespace Vocaluxe.Base break; } - if (file == String.Empty) + if (file.Length == 0) return -1; int stream = CSound.Load(file); diff --git a/Vocaluxe/Base/CTheme.cs b/Vocaluxe/Base/CTheme.cs index cbd80aab..225a5256 100644 --- a/Vocaluxe/Base/CTheme.cs +++ b/Vocaluxe/Base/CTheme.cs @@ -313,40 +313,41 @@ namespace Vocaluxe.Base private static void SaveTheme(int ThemeIndex) { #region ThemeMainFile - XmlWriter writer = XmlWriter.Create(Path.Combine(_Themes[ThemeIndex].Path, _Themes[ThemeIndex].FileName), _settings); - writer.WriteStartDocument(); - writer.WriteStartElement("root"); + using (XmlWriter writer = XmlWriter.Create(Path.Combine(_Themes[ThemeIndex].Path, _Themes[ThemeIndex].FileName), _settings)) + { + writer.WriteStartDocument(); + writer.WriteStartElement("root"); - // ThemeSystemVersion - writer.WriteElementString("ThemeSystemVersion", ThemeSystemVersion.ToString()); + // ThemeSystemVersion + writer.WriteElementString("ThemeSystemVersion", ThemeSystemVersion.ToString()); - #region Info - writer.WriteStartElement("Info"); + #region Info + writer.WriteStartElement("Info"); - writer.WriteElementString("Name", _Themes[ThemeIndex].Name); - writer.WriteElementString("Author", _Themes[ThemeIndex].Author); - writer.WriteElementString("SkinFolder", _Themes[ThemeIndex].SkinFolder); - writer.WriteElementString("ThemeVersionMajor", _Themes[ThemeIndex].ThemeVersionMajor.ToString()); - writer.WriteElementString("ThemeVersionMinor", _Themes[ThemeIndex].ThemeVersionMinor.ToString()); + writer.WriteElementString("Name", _Themes[ThemeIndex].Name); + writer.WriteElementString("Author", _Themes[ThemeIndex].Author); + writer.WriteElementString("SkinFolder", _Themes[ThemeIndex].SkinFolder); + writer.WriteElementString("ThemeVersionMajor", _Themes[ThemeIndex].ThemeVersionMajor.ToString()); + writer.WriteElementString("ThemeVersionMinor", _Themes[ThemeIndex].ThemeVersionMinor.ToString()); - writer.WriteEndElement(); - #endregion Info + writer.WriteEndElement(); + #endregion Info - // Cursor - if (_Themes[ThemeIndex].PartyModeID == -1) - SaveCursor(writer); + // Cursor + if (_Themes[ThemeIndex].PartyModeID == -1) + SaveCursor(writer); - // save fonts - if (_Themes[ThemeIndex].PartyModeID == -1) - CFonts.SaveThemeFonts(_Themes[ThemeIndex].Name, writer); + // save fonts + if (_Themes[ThemeIndex].PartyModeID == -1) + CFonts.SaveThemeFonts(_Themes[ThemeIndex].Name, writer); - // End of File - writer.WriteEndElement(); //end of root - writer.WriteEndDocument(); + // End of File + writer.WriteEndElement(); //end of root + writer.WriteEndDocument(); - writer.Flush(); - writer.Close(); + writer.Flush(); + } #endregion ThemeMainFile } @@ -354,53 +355,54 @@ namespace Vocaluxe.Base { for (int SkinIndex = 0; SkinIndex < _Skins.Count; SkinIndex++) { - XmlWriter writer = XmlWriter.Create(Path.Combine(_Skins[SkinIndex].Path, _Skins[SkinIndex].FileName), _settings); - writer.WriteStartDocument(); - writer.WriteStartElement("root"); - - // ThemeSystemVersion - writer.WriteElementString("SkinSystemVersion", SkinSystemVersion.ToString()); - - #region Info - writer.WriteStartElement("Info"); - - writer.WriteElementString("Name", _Skins[SkinIndex].Name); - writer.WriteElementString("Author", _Skins[SkinIndex].Author); - writer.WriteElementString("SkinVersionMajor", _Skins[SkinIndex].SkinVersionMajor.ToString()); - writer.WriteElementString("SkinVersionMinor", _Skins[SkinIndex].SkinVersionMinor.ToString()); - - writer.WriteEndElement(); - #endregion Info - - // save colors - SaveColors(writer, SkinIndex); - - #region Skins - writer.WriteStartElement("Skins"); - - foreach (SkinElement element in _Skins[SkinIndex].SkinList.Values) + using (XmlWriter writer = XmlWriter.Create(Path.Combine(_Skins[SkinIndex].Path, _Skins[SkinIndex].FileName), _settings)) { - writer.WriteElementString(element.Name, element.Value); + writer.WriteStartDocument(); + writer.WriteStartElement("root"); + + // ThemeSystemVersion + writer.WriteElementString("SkinSystemVersion", SkinSystemVersion.ToString()); + + #region Info + writer.WriteStartElement("Info"); + + writer.WriteElementString("Name", _Skins[SkinIndex].Name); + writer.WriteElementString("Author", _Skins[SkinIndex].Author); + writer.WriteElementString("SkinVersionMajor", _Skins[SkinIndex].SkinVersionMajor.ToString()); + writer.WriteElementString("SkinVersionMinor", _Skins[SkinIndex].SkinVersionMinor.ToString()); + + writer.WriteEndElement(); + #endregion Info + + // save colors + SaveColors(writer, SkinIndex); + + #region Skins + writer.WriteStartElement("Skins"); + + foreach (SkinElement element in _Skins[SkinIndex].SkinList.Values) + { + writer.WriteElementString(element.Name, element.Value); + } + writer.WriteEndElement(); + #endregion Skins + + #region Videos + writer.WriteStartElement("Videos"); + + foreach (SkinElement element in _Skins[SkinIndex].VideoList) + { + writer.WriteElementString(element.Name, element.Value); + } + writer.WriteEndElement(); + #endregion Videos + + // End of File + writer.WriteEndElement(); //end of root + writer.WriteEndDocument(); + + writer.Flush(); } - writer.WriteEndElement(); - #endregion Skins - - #region Videos - writer.WriteStartElement("Videos"); - - foreach (SkinElement element in _Skins[SkinIndex].VideoList) - { - writer.WriteElementString(element.Name, element.Value); - } - writer.WriteEndElement(); - #endregion Videos - - // End of File - writer.WriteEndElement(); //end of root - writer.WriteEndDocument(); - - writer.Flush(); - writer.Close(); } } @@ -439,7 +441,7 @@ namespace Vocaluxe.Base if (version == ThemeSystemVersion) { xmlReader.GetValue("//root/Info/Name", ref theme.Name, String.Empty); - if (theme.Name != String.Empty) + if (theme.Name.Length > 0) { xmlReader.GetValue("//root/Info/Author", ref theme.Author, String.Empty); xmlReader.GetValue("//root/Info/SkinFolder", ref theme.SkinFolder, String.Empty); @@ -514,7 +516,7 @@ namespace Vocaluxe.Base if (version == SkinSystemVersion) { xmlReader.GetValue("//root/Info/Name", ref skin.Name, String.Empty); - if (skin.Name != String.Empty) + if (skin.Name.Length > 0) { xmlReader.GetValue("//root/Info/Author", ref skin.Author, String.Empty); xmlReader.TryGetIntValue("//root/Info/SkinVersionMajor", ref skin.SkinVersionMajor); @@ -866,7 +868,7 @@ namespace Vocaluxe.Base writer.WriteElementString("W", Cursor.w.ToString("#0.000")); writer.WriteElementString("H", Cursor.h.ToString("#0.000")); - if (Cursor.color != String.Empty) + if (Cursor.color.Length > 0) { writer.WriteElementString("Color", Cursor.color); } diff --git a/Vocaluxe/GlobalSuppressions.cs b/Vocaluxe/GlobalSuppressions.cs new file mode 100644 index 00000000..0b83f3ab --- /dev/null +++ b/Vocaluxe/GlobalSuppressions.cs @@ -0,0 +1,14 @@ +// Diese Datei wird von der Codeanalyse zur Wartung der SuppressMessage- +// Attribute verwendet, die auf dieses Projekt angewendet werden. +// Unterdrückungen auf Projektebene haben entweder kein Ziel oder +// erhalten ein spezifisches Ziel mit Namespace-, Typ-, Memberbereich usw. +// +// Wenn Sie dieser Datei eine Unterdrückung hinzufügen möchten, klicken Sie mit der +// rechten Maustaste auf die Meldung in der Fehlerliste, zeigen Sie auf +// "Meldung(en) unterdrücken", und klicken Sie auf "In Projektunterdrückungsdatei". +// Sie müssen dieser Datei nicht manuell Unterdrückungen hinzufügen. + +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods", MessageId = "System.Reflection.Assembly.LoadFrom", Scope = "member", Target = "Vocaluxe.MainProgram.#AssemblyResolver(System.Object,System.ResolveEventArgs)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDrawWinForm.#ColorizeBitmap(System.Drawing.Bitmap,Vocaluxe.Menu.SColorF)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDrawWinForm.#CopyScreen(Vocaluxe.Menu.STexture&)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Base.CGlyph.#.ctor(System.Char,System.Single)")] diff --git a/Vocaluxe/Lib/Draw/CDirect3D.cs b/Vocaluxe/Lib/Draw/CDirect3D.cs index d7aa03e6..ae483f01 100644 --- a/Vocaluxe/Lib/Draw/CDirect3D.cs +++ b/Vocaluxe/Lib/Draw/CDirect3D.cs @@ -493,13 +493,14 @@ namespace Vocaluxe.Lib.Draw //This creates a new white texture and adds it to the texture pool //This texture is used for the DrawRect method - Bitmap blankMap = new Bitmap(1, 1); - Graphics g = Graphics.FromImage(blankMap); - g.Clear(Color.White); - g.Dispose(); - _BlankTexture = AddTexture(blankMap); + using (Bitmap blankMap = new Bitmap(1, 1)) + { + Graphics g = Graphics.FromImage(blankMap); + g.Clear(Color.White); + g.Dispose(); + _BlankTexture = AddTexture(blankMap); - blankMap.Dispose(); + } return true; } else @@ -560,7 +561,7 @@ namespace Vocaluxe.Lib.Draw } } //Apply fullscreen mode - if ((CSettings.bFullScreen && !_fullscreen) || (!CSettings.bFullScreen && _fullscreen)) + if (CSettings.bFullScreen != _fullscreen) { if (!_fullscreen) EnterFullScreen(); @@ -575,10 +576,9 @@ namespace Vocaluxe.Lib.Draw //Calculate the FPS Rate and restart the timer after a frame CTime.CalculateFPS(); CTime.Restart(); - } - else - this.Close(); + } } + this.Close(); } /// @@ -881,8 +881,15 @@ namespace Vocaluxe.Lib.Draw CLog.LogError("Error loading Texture: " + TexturePath); return new STexture(-1); } - STexture s = AddTexture(bmp, TexturePath); - bmp.Dispose(); + STexture s; + try + { + s = AddTexture(bmp, TexturePath); + } + finally + { + bmp.Dispose(); + } return s; } CLog.LogError("Can't find File: " + TexturePath); diff --git a/Vocaluxe/Lib/Draw/CDrawWinForm.cs b/Vocaluxe/Lib/Draw/CDrawWinForm.cs index 51cc0c4f..7edd16c7 100644 --- a/Vocaluxe/Lib/Draw/CDrawWinForm.cs +++ b/Vocaluxe/Lib/Draw/CDrawWinForm.cs @@ -246,9 +246,8 @@ namespace Vocaluxe.Lib.Draw CTime.CalculateFPS(); CTime.Restart(); } - else - this.Close(); } + this.Close(); } public bool Unload() @@ -396,8 +395,10 @@ namespace Vocaluxe.Lib.Draw if (!found) { - Bitmap bmp = new Bitmap(TexturePath); - return AddTexture(bmp); + using (Bitmap bmp = new Bitmap(TexturePath)) + { + return AddTexture(bmp); + } } } @@ -433,11 +434,13 @@ namespace Vocaluxe.Lib.Draw public STexture AddTexture(int W, int H, ref byte[] Data) { - Bitmap bmp = new Bitmap(W, H); - BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - Marshal.Copy(Data, 0, bmp_data.Scan0, Data.Length); - bmp.UnlockBits(bmp_data); - return AddTexture(bmp); + using (Bitmap bmp = new Bitmap(W, H)) + { + BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Marshal.Copy(Data, 0, bmp_data.Scan0, Data.Length); + bmp.UnlockBits(bmp_data); + return AddTexture(bmp); + } } public bool UpdateTexture(ref STexture Texture, IntPtr Data) @@ -525,23 +528,25 @@ namespace Vocaluxe.Lib.Draw { Bitmap newBitmap = new Bitmap(original.Width, original.Height); - Graphics g = Graphics.FromImage(newBitmap); + using (Graphics g = Graphics.FromImage(newBitmap)) + { - ColorMatrix cm = new ColorMatrix(); - cm.Matrix33 = color.A; - cm.Matrix00 = color.R; - cm.Matrix11 = color.G; - cm.Matrix22 = color.B; - cm.Matrix44 = 1; + ColorMatrix cm = new ColorMatrix(); + cm.Matrix33 = color.A; + cm.Matrix00 = color.R; + cm.Matrix11 = color.G; + cm.Matrix22 = color.B; + cm.Matrix44 = 1; - ImageAttributes ia = new ImageAttributes(); - ia.SetColorMatrix(cm); + using (ImageAttributes ia = new ImageAttributes()) + { + ia.SetColorMatrix(cm); - g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height), - 0, 0, original.Width, original.Height, GraphicsUnit.Pixel, ia); + g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height), + 0, 0, original.Width, original.Height, GraphicsUnit.Pixel, ia); - ia.Dispose(); - g.Dispose(); + } + } return newBitmap; } diff --git a/Vocaluxe/Lib/Draw/COpenGL.cs b/Vocaluxe/Lib/Draw/COpenGL.cs index 06a09e95..8300f10b 100644 --- a/Vocaluxe/Lib/Draw/COpenGL.cs +++ b/Vocaluxe/Lib/Draw/COpenGL.cs @@ -500,9 +500,8 @@ namespace Vocaluxe.Lib.Draw CTime.CalculateFPS(); CTime.Restart(); } - else - this.Close(); } + this.Close(); } public bool Unload() @@ -617,17 +616,18 @@ namespace Vocaluxe.Lib.Draw int width = GetScreenWidth(); int height = GetScreenHeight(); - Bitmap screen = new Bitmap(width, height); + using (Bitmap screen = new Bitmap(width, height)) + { - BitmapData bmp_data = screen.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + BitmapData bmp_data = screen.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - GL.ReadPixels(0, 0, width, height, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bmp_data.Scan0); - screen.UnlockBits(bmp_data); + GL.ReadPixels(0, 0, width, height, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bmp_data.Scan0); + screen.UnlockBits(bmp_data); - screen.RotateFlip(RotateFlipType.RotateNoneFlipY); - screen.Save(Path.Combine(path, file + i.ToString("00000") + ".bmp"), ImageFormat.Bmp); - screen.Dispose(); + screen.RotateFlip(RotateFlipType.RotateNoneFlipY); + screen.Save(Path.Combine(path, file + i.ToString("00000") + ".bmp"), ImageFormat.Bmp); + } } public void DrawLine(int a, int r, int g, int b, int w, int x1, int y1, int x2, int y2) @@ -799,27 +799,28 @@ namespace Vocaluxe.Lib.Draw texture.w2 = (float)MathHelper.NextPowerOfTwo(w); texture.h2 = (float)MathHelper.NextPowerOfTwo(h); - Bitmap bmp2 = new Bitmap((int)texture.w2, (int)texture.h2); - Graphics g = Graphics.FromImage(bmp2); - g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; - g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; - g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height)); - g.Dispose(); + using (Bitmap bmp2 = new Bitmap((int)texture.w2, (int)texture.h2)) + { + Graphics g = Graphics.FromImage(bmp2); + g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; + g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height)); + g.Dispose(); - texture.width_ratio = 1f; - texture.height_ratio = 1f; + texture.width_ratio = 1f; + texture.height_ratio = 1f; - BitmapData bmp_data = bmp2.LockBits(new Rectangle(0, 0, bmp2.Width, bmp2.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + BitmapData bmp_data = bmp2.LockBits(new Rectangle(0, 0, bmp2.Width, bmp2.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, (int)texture.w2, (int)texture.h2, 0, - OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); + GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, (int)texture.w2, (int)texture.h2, 0, + OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); - GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, bmp_data.Width, bmp_data.Height, - OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bmp_data.Scan0); + GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, bmp_data.Width, bmp_data.Height, + OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bmp_data.Scan0); - bmp2.UnlockBits(bmp_data); - bmp2.Dispose(); + bmp2.UnlockBits(bmp_data); + } GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureParameterName.ClampToEdge); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureParameterName.ClampToEdge); diff --git a/Vocaluxe/Lib/Input/WiiMote/WiiMoteLib.cs b/Vocaluxe/Lib/Input/WiiMote/WiiMoteLib.cs index 4992a38d..8bb4c866 100644 --- a/Vocaluxe/Lib/Input/WiiMote/WiiMoteLib.cs +++ b/Vocaluxe/Lib/Input/WiiMote/WiiMoteLib.cs @@ -674,8 +674,11 @@ namespace Vocaluxe.Lib.Input.WiiMote protected virtual void Dispose(bool disposing) { - if(disposing) - Disconnect(); + if (disposing) + { + Disconnect(); + _ReadDone.Close(); + } } #endregion } diff --git a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs index 38cca523..4ee9bdd1 100644 --- a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs +++ b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs @@ -43,7 +43,7 @@ namespace Vocaluxe.Lib.Playlist public void SavePlaylist() { - if (PlaylistFile == string.Empty) + if (PlaylistFile.Length == 0) { string filename = string.Empty; foreach (char chr in PlaylistName) @@ -52,7 +52,7 @@ namespace Vocaluxe.Lib.Playlist filename += chr.ToString(); } - if (filename == String.Empty) + if (filename.Length == 0) filename = "1"; int i = 0; @@ -85,37 +85,43 @@ namespace Vocaluxe.Lib.Playlist return; } - writer.WriteStartDocument(); - writer.WriteStartElement("root"); - - writer.WriteStartElement("Info"); - writer.WriteElementString("PlaylistName", PlaylistName); - writer.WriteEndElement(); - - writer.WriteStartElement("Songs"); - for (int i = 0; i < Songs.Count; i++) + try { - CSong song = CSongs.GetSong(Songs[i].SongID); - if (song != null) + writer.WriteStartDocument(); + writer.WriteStartElement("root"); + + writer.WriteStartElement("Info"); + writer.WriteElementString("PlaylistName", PlaylistName); + writer.WriteEndElement(); + + writer.WriteStartElement("Songs"); + for (int i = 0; i < Songs.Count; i++) { - writer.WriteStartElement("Song" + (i + 1).ToString()); - writer.WriteElementString("Artist", song.Artist); - writer.WriteElementString("Title", song.Title); - writer.WriteElementString("GameMode", Enum.GetName(typeof(EGameMode), Songs[i].GameMode)); - writer.WriteEndElement(); - } - else - { - CLog.LogError("Playlist.SavePlaylist(): Can't find Song. This should never happen!"); + CSong song = CSongs.GetSong(Songs[i].SongID); + if (song != null) + { + writer.WriteStartElement("Song" + (i + 1).ToString()); + writer.WriteElementString("Artist", song.Artist); + writer.WriteElementString("Title", song.Title); + writer.WriteElementString("GameMode", Enum.GetName(typeof(EGameMode), Songs[i].GameMode)); + writer.WriteEndElement(); + } + else + { + CLog.LogError("Playlist.SavePlaylist(): Can't find Song. This should never happen!"); + } } + writer.WriteEndElement(); + + writer.WriteEndElement(); //end of root + writer.WriteEndDocument(); + + writer.Flush(); + } + finally + { + writer.Close(); } - writer.WriteEndElement(); - - writer.WriteEndElement(); //end of root - writer.WriteEndDocument(); - - writer.Flush(); - writer.Close(); } private void LoadPlaylist() diff --git a/Vocaluxe/Lib/Sound/CDirectSoundRecord.cs b/Vocaluxe/Lib/Sound/CDirectSoundRecord.cs index c8abe845..a16e9409 100644 --- a/Vocaluxe/Lib/Sound/CDirectSoundRecord.cs +++ b/Vocaluxe/Lib/Sound/CDirectSoundRecord.cs @@ -36,26 +36,27 @@ namespace Vocaluxe.Lib.Sound int id = 0; foreach (DeviceInformation dev in devices) { - DirectSoundCapture ds = new DirectSoundCapture(dev.DriverGuid); + using (DirectSoundCapture ds = new DirectSoundCapture(dev.DriverGuid)) + { - SRecordDevice device = new SRecordDevice(); - device.Driver = dev.DriverGuid.ToString(); - device.ID = id; - device.Name = dev.Description; - device.Inputs = new List(); + SRecordDevice device = new SRecordDevice(); + device.Driver = dev.DriverGuid.ToString(); + device.ID = id; + device.Name = dev.Description; + device.Inputs = new List(); - SInput inp = new SInput(); - inp.Name = "Default"; - inp.Channels = ds.Capabilities.Channels; + SInput inp = new SInput(); + inp.Name = "Default"; + inp.Channels = ds.Capabilities.Channels; - if (inp.Channels > 2) - inp.Channels = 2; //more are not supported in vocaluxe + if (inp.Channels > 2) + inp.Channels = 2; //more are not supported in vocaluxe - device.Inputs.Add(inp); - _Devices.Add(device); + device.Inputs.Add(inp); + _Devices.Add(device); - id++; - ds.Dispose(); + id++; + } } _DeviceConfig = _Devices.ToArray(); @@ -68,11 +69,7 @@ namespace Vocaluxe.Lib.Sound { if (_initialized) { - foreach (SoundCardSource source in _Sources) - { - source.Stop(); - source.Dispose(); - } + Stop(); _initialized = false; } //System.IO.File.WriteAllBytes("test0.raw", _Buffer[0].Buffer); @@ -131,7 +128,10 @@ namespace Vocaluxe.Lib.Sound foreach (SoundCardSource source in _Sources) { source.Stop(); + source.Dispose(); } + _Sources.Clear(); + return true; } public void AnalyzeBuffer(int Player) diff --git a/Vocaluxe/Lib/Webcam/CAForgeNet.cs b/Vocaluxe/Lib/Webcam/CAForgeNet.cs index 3dc53446..9b1a333c 100644 --- a/Vocaluxe/Lib/Webcam/CAForgeNet.cs +++ b/Vocaluxe/Lib/Webcam/CAForgeNet.cs @@ -164,7 +164,7 @@ namespace Vocaluxe.Lib.Webcam return false; //No MonikerString found, try first webcam - if (Config.MonikerString == String.Empty) + if (Config.MonikerString.Length == 0) _Webcam = new VideoCaptureDevice(_WebcamDevices[0].MonikerString); else //Found MonikerString _Webcam = new VideoCaptureDevice(Config.MonikerString); diff --git a/Vocaluxe/Properties/AssemblyInfo.cs b/Vocaluxe/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..dfc9df0d --- /dev/null +++ b/Vocaluxe/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die mit einer Assembly verknüpft sind. +[assembly: AssemblyTitle("Vocaluxe.Properties")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Vocaluxe.Properties")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar +// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von +// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("da631594-f891-4994-9869-c37e626e44f9")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +[assembly: AssemblyVersion("0.3.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs index 2ca30655..1767dd95 100644 --- a/Vocaluxe/Screens/CScreenNames.cs +++ b/Vocaluxe/Screens/CScreenNames.cs @@ -597,7 +597,7 @@ namespace Vocaluxe.Screens for (int i = 0; i < CSettings.MaxNumPlayer; i++) { //Update texture and name - if (CConfig.Players[i] != String.Empty) + if (CConfig.Players[i].Length > 0) { Statics[htStatics(StaticPlayerAvatar[i])].Texture = CProfiles.Profiles[CGame.Player[i].ProfileID].Avatar.Texture; Texts[htTexts(TextPlayer[i])].Text = CProfiles.Profiles[CGame.Player[i].ProfileID].PlayerName; @@ -692,7 +692,7 @@ namespace Vocaluxe.Screens Statics[htStatics("StaticPlayer" + i)].Visible = true; Statics[htStatics("StaticPlayerAvatar" + i)].Visible = true; Texts[htTexts("TextPlayer" + i)].Visible = true; - if (Texts[htTexts("TextPlayer" + i)].Text == string.Empty) + if (Texts[htTexts("TextPlayer" + i)].Text.Length == 0) { Texts[htTexts("TextPlayer" + i)].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + i.ToString(); } diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 29ef67a8..51ea197d 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -622,7 +622,7 @@ namespace Vocaluxe.Screens CDraw.RemoveTexture(ref _CurrentVideoTexture); - if (song.VideoFileName != String.Empty) + if (song.VideoFileName.Length > 0) { _CurrentVideo = CVideo.VdLoad(Path.Combine(song.Folder, song.VideoFileName)); CVideo.VdSkip(_CurrentVideo, song.Start, song.VideoGap); @@ -630,7 +630,7 @@ namespace Vocaluxe.Screens } CDraw.RemoveTexture(ref _Background); - if (song.BackgroundFileName != String.Empty) + if (song.BackgroundFileName.Length > 0) _Background = CDraw.AddTexture(Path.Combine(song.Folder, song.BackgroundFileName)); SingNotes[htSingNotes(SingBars)].Reset(); diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 6ee33631..ecbfdad2 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -1105,13 +1105,13 @@ namespace Vocaluxe.Screens SongID = CSongs.VisibleSongs[SongIndex].ID; } - if (NewFilterString == String.Empty && _sso.Sorting.Tabs == EOffOn.TR_CONFIG_ON) + if (NewFilterString.Length == 0 && _sso.Sorting.Tabs == EOffOn.TR_CONFIG_ON) { CSongs.Category = -1; refresh = true; } - if (NewFilterString != String.Empty && CSongs.Category != 0) + if (NewFilterString.Length > 0 && CSongs.Category != 0) { CSongs.Category = 0; refresh = true; diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index f0e6b365..062512ba 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -63,6 +63,7 @@ prompt 4 Off + ..\CheckingRules.ruleset x64 @@ -193,6 +194,7 @@ + Form diff --git a/VocaluxeLib/GlobalSuppressions.cs b/VocaluxeLib/GlobalSuppressions.cs new file mode 100644 index 00000000..c04a0e50 --- /dev/null +++ b/VocaluxeLib/GlobalSuppressions.cs @@ -0,0 +1,12 @@ +// Diese Datei wird von der Codeanalyse zur Wartung der SuppressMessage- +// Attribute verwendet, die auf dieses Projekt angewendet werden. +// Unterdrückungen auf Projektebene haben entweder kein Ziel oder +// erhalten ein spezifisches Ziel mit Namespace-, Typ-, Memberbereich usw. +// +// Wenn Sie dieser Datei eine Unterdrückung hinzufügen möchten, klicken Sie mit der +// rechten Maustaste auf die Meldung in der Fehlerliste, zeigen Sie auf +// "Meldung(en) unterdrücken", und klicken Sie auf "In Projektunterdrückungsdatei". +// Sie müssen dieser Datei nicht manuell Unterdrückungen hinzufügen. + +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "Vocaluxe.Menu.CHelper.TryParse(System.String,System.Single@)", Scope = "member", Target = "Vocaluxe.Menu.SongMenu.CSong.#ReadHeader(System.String)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "System.Int32.TryParse(System.String,System.Int32@)", Scope = "member", Target = "Vocaluxe.Menu.SongMenu.CSong.#ReadNotes(System.String,System.Boolean)")] diff --git a/VocaluxeLib/Menu/CBackground.cs b/VocaluxeLib/Menu/CBackground.cs index 7d0f06d7..41a7fbe9 100644 --- a/VocaluxeLib/Menu/CBackground.cs +++ b/VocaluxeLib/Menu/CBackground.cs @@ -104,7 +104,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Background color for type \"Color\" from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) { writer.WriteElementString("Color", _Theme.ColorName); } @@ -127,13 +127,13 @@ namespace Vocaluxe.Menu public void Resume() { - if (_Theme.Type == EBackgroundTypes.Video && _Theme.VideoName != String.Empty && CBase.Config.GetVideoBackgrounds() == EOffOn.TR_CONFIG_ON) + if (_Theme.Type == EBackgroundTypes.Video && _Theme.VideoName.Length > 0 && CBase.Config.GetVideoBackgrounds() == EOffOn.TR_CONFIG_ON) CBase.Theme.SkinVideoResume(_Theme.VideoName, _PartyModeID); } public void Pause() { - if (_Theme.VideoName != String.Empty) + if (_Theme.VideoName.Length > 0) CBase.Theme.SkinVideoPause(_Theme.VideoName, _PartyModeID); } @@ -153,7 +153,7 @@ namespace Vocaluxe.Menu ok = DrawVideo(); } - if (_Theme.TextureName != String.Empty && + if (_Theme.TextureName.Length > 0 && (_Theme.Type == EBackgroundTypes.Texture || (_Theme.Type == EBackgroundTypes.Video && (CBase.Config.GetVideoBackgrounds() == EOffOn.TR_CONFIG_OFF || !ok)))) ok = DrawTexture(); @@ -171,7 +171,7 @@ namespace Vocaluxe.Menu public void LoadTextures() { - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); } diff --git a/VocaluxeLib/Menu/CButton.cs b/VocaluxeLib/Menu/CButton.cs index f8b99d40..bf41eeea 100644 --- a/VocaluxeLib/Menu/CButton.cs +++ b/VocaluxeLib/Menu/CButton.cs @@ -227,7 +227,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Button color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) { writer.WriteElementString("Color", _Theme.ColorName); } @@ -241,7 +241,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Selected button color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.SColorName != String.Empty) + if (_Theme.SColorName.Length > 0) { writer.WriteElementString("SColor", _Theme.SColorName); } @@ -370,10 +370,10 @@ namespace Vocaluxe.Menu { Text.LoadTextures(); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); - if (_Theme.SColorName != String.Empty) + if (_Theme.SColorName.Length > 0) SColor = CBase.Theme.GetColor(_Theme.SColorName, _PartyModeID); } diff --git a/VocaluxeLib/Menu/CEqualizer.cs b/VocaluxeLib/Menu/CEqualizer.cs index 7e68a6c4..0cfe3d52 100644 --- a/VocaluxeLib/Menu/CEqualizer.cs +++ b/VocaluxeLib/Menu/CEqualizer.cs @@ -165,7 +165,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Equalizer color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) { writer.WriteElementString("Color", _Theme.ColorName); } @@ -178,7 +178,7 @@ namespace Vocaluxe.Menu } writer.WriteComment(": Equalizer color for maximal volume from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) { writer.WriteElementString("MaxColor", _Theme.ColorName); } @@ -273,10 +273,10 @@ namespace Vocaluxe.Menu public void LoadTextures() { - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); - if (_Theme.MaxColorName != String.Empty) + if (_Theme.MaxColorName.Length > 0) MaxColor = CBase.Theme.GetColor(_Theme.MaxColorName, _PartyModeID); } diff --git a/VocaluxeLib/Menu/CHelper.cs b/VocaluxeLib/Menu/CHelper.cs index 67d8a75e..f59c4fd6 100644 --- a/VocaluxeLib/Menu/CHelper.cs +++ b/VocaluxeLib/Menu/CHelper.cs @@ -73,8 +73,9 @@ namespace Vocaluxe.Menu return 0; } int result = 0; - int.TryParse(value, out result); - return result; + if(int.TryParse(value, out result)) + return result; + return 0; } public static void SetRect(RectangleF Bounds, ref RectangleF Rect, float RectAspect, EAspect Aspect) diff --git a/VocaluxeLib/Menu/CLyric.cs b/VocaluxeLib/Menu/CLyric.cs index 4034b312..33767112 100644 --- a/VocaluxeLib/Menu/CLyric.cs +++ b/VocaluxeLib/Menu/CLyric.cs @@ -164,7 +164,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Lyric text color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) { writer.WriteElementString("Color", _Theme.ColorName); } @@ -178,7 +178,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Highlighted lyric color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.SColorName != String.Empty) + if (_Theme.SColorName.Length > 0) { writer.WriteElementString("SColor", _Theme.SColorName); } @@ -547,10 +547,10 @@ namespace Vocaluxe.Menu public void LoadTextures() { - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); - if (_Theme.SColorName != String.Empty) + if (_Theme.SColorName.Length > 0) ColorProcessed = CBase.Theme.GetColor(_Theme.SColorName, _PartyModeID); } diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index 977674c5..c2e03576 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -409,7 +409,7 @@ namespace Vocaluxe.Menu public virtual void SaveTheme() { - if (_ThemePath == String.Empty) + if (_ThemePath.Length == 0) return; XmlWriterSettings settings = new XmlWriterSettings(); @@ -418,98 +418,99 @@ namespace Vocaluxe.Menu settings.ConformanceLevel = ConformanceLevel.Document; string file = Path.Combine(_ThemePath, _ThemeName + ".xml"); - XmlWriter writer = XmlWriter.Create(file, settings); - - writer.WriteStartDocument(); - writer.WriteStartElement("root"); - - writer.WriteStartElement(_ThemeName); - - // Screen Version - writer.WriteElementString("ScreenVersion", _ScreenVersion.ToString()); - - // Backgrounds - for (int i = 0; i < _Backgrounds.Count; i++) - _Backgrounds[i].SaveTheme(writer); - - // Statics - for (int i = 0; i < _Statics.Count; i++) - _Statics[i].SaveTheme(writer); - - // Texts - for (int i = 0; i < _Texts.Count; i++) + using (XmlWriter writer = XmlWriter.Create(file, settings)) { - _Texts[i].SaveTheme(writer); + + writer.WriteStartDocument(); + writer.WriteStartElement("root"); + + writer.WriteStartElement(_ThemeName); + + // Screen Version + writer.WriteElementString("ScreenVersion", _ScreenVersion.ToString()); + + // Backgrounds + for (int i = 0; i < _Backgrounds.Count; i++) + _Backgrounds[i].SaveTheme(writer); + + // Statics + for (int i = 0; i < _Statics.Count; i++) + _Statics[i].SaveTheme(writer); + + // Texts + for (int i = 0; i < _Texts.Count; i++) + { + _Texts[i].SaveTheme(writer); + } + + // Buttons + for (int i = 0; i < _Buttons.Count; i++) + { + _Buttons[i].SaveTheme(writer); + } + + // SelectSlides + for (int i = 0; i < _SelectSlides.Count; i++) + { + _SelectSlides[i].SaveTheme(writer); + } + + // SongMenus + for (int i = 0; i < _SongMenus.Count; i++) + { + _SongMenus[i].SaveTheme(writer); + } + + // Lyrics + for (int i = 0; i < _Lyrics.Count; i++) + { + _Lyrics[i].SaveTheme(writer); + } + + // SingBars + for (int i = 0; i < _SingNotes.Count; i++) + { + _SingNotes[i].SaveTheme(writer); + } + + // NameSelections + for (int i = 0; i < _NameSelections.Count; i++) + { + _NameSelections[i].SaveTheme(writer); + } + + //Equalizers + for (int i = 0; i < _Equalizers.Count; i++) + { + _Equalizers[i].SaveTheme(writer); + } + + //Playlists + for (int i = 0; i < _Playlists.Count; i++) + { + _Playlists[i].SaveTheme(writer); + } + + //ParticleEffects + for (int i = 0; i < _ParticleEffects.Count; i++) + { + _ParticleEffects[i].SaveTheme(writer); + } + + //ScreenSettings + for (int i = 0; i < _ScreenSettings.Count; i++) + { + _ScreenSettings[i].SaveTheme(writer); + } + + writer.WriteEndElement(); + + // End of File + writer.WriteEndElement(); //end of root + writer.WriteEndDocument(); + + writer.Flush(); } - - // Buttons - for (int i = 0; i < _Buttons.Count; i++) - { - _Buttons[i].SaveTheme(writer); - } - - // SelectSlides - for (int i = 0; i < _SelectSlides.Count; i++) - { - _SelectSlides[i].SaveTheme(writer); - } - - // SongMenus - for (int i = 0; i < _SongMenus.Count; i++) - { - _SongMenus[i].SaveTheme(writer); - } - - // Lyrics - for (int i = 0; i < _Lyrics.Count; i++) - { - _Lyrics[i].SaveTheme(writer); - } - - // SingBars - for (int i = 0; i < _SingNotes.Count; i++) - { - _SingNotes[i].SaveTheme(writer); - } - - // NameSelections - for (int i = 0; i < _NameSelections.Count; i++) - { - _NameSelections[i].SaveTheme(writer); - } - - //Equalizers - for (int i = 0; i < _Equalizers.Count; i++) - { - _Equalizers[i].SaveTheme(writer); - } - - //Playlists - for (int i = 0; i < _Playlists.Count; i++) - { - _Playlists[i].SaveTheme(writer); - } - - //ParticleEffects - for (int i = 0; i < _ParticleEffects.Count; i++) - { - _ParticleEffects[i].SaveTheme(writer); - } - - //ScreenSettings - for (int i = 0; i < _ScreenSettings.Count; i++) - { - _ScreenSettings[i].SaveTheme(writer); - } - - writer.WriteEndElement(); - - // End of File - writer.WriteEndElement(); //end of root - writer.WriteEndDocument(); - - writer.Flush(); - writer.Close(); } public virtual void ReloadTextures() @@ -649,7 +650,7 @@ namespace Vocaluxe.Menu public virtual void ReloadTheme(string XmlPath) { - if (_ThemePath == String.Empty) + if (_ThemePath.Length == 0) return; UnloadTextures(); diff --git a/VocaluxeLib/Menu/CNameSelection.cs b/VocaluxeLib/Menu/CNameSelection.cs index f8ec3b75..8e6eadcf 100644 --- a/VocaluxeLib/Menu/CNameSelection.cs +++ b/VocaluxeLib/Menu/CNameSelection.cs @@ -182,7 +182,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Static color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorEmptyTileName != String.Empty) + if (_Theme.ColorEmptyTileName.Length > 0) { writer.WriteElementString("ColorEmptyTile", _Theme.ColorEmptyTileName); } @@ -215,7 +215,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Text font name"); writer.WriteElementString("Font", _Theme.NameFont); writer.WriteComment(": Text color from ColorScheme (high priority)"); - if (_Theme.NameColorName != String.Empty) + if (_Theme.NameColorName.Length > 0) { writer.WriteElementString("Color", _Theme.NameColorName); } @@ -474,10 +474,10 @@ namespace Vocaluxe.Menu _TextureEmptyTile = CBase.Theme.GetSkinTexture(_Theme.TextureEmptyTileName, _PartyModeID); _TextureTileSelected = CBase.Theme.GetSkinTexture(_Theme.TextureTileSelectedName, _PartyModeID); - if (_Theme.ColorEmptyTileName != String.Empty) + if (_Theme.ColorEmptyTileName.Length > 0) ColorEmptyTile = CBase.Theme.GetColor(_Theme.ColorEmptyTileName, _PartyModeID); - if (_Theme.NameColorName != String.Empty) + if (_Theme.NameColorName.Length > 0) _Theme.NameColor = CBase.Theme.GetColor(_Theme.NameColorName, _PartyModeID); } diff --git a/VocaluxeLib/Menu/CObjectInteractions.cs b/VocaluxeLib/Menu/CObjectInteractions.cs index 525a00e3..631e12b7 100644 --- a/VocaluxeLib/Menu/CObjectInteractions.cs +++ b/VocaluxeLib/Menu/CObjectInteractions.cs @@ -42,7 +42,7 @@ namespace Vocaluxe.Menu Init(); } - protected virtual void Init() + protected void Init() { _Interactions = new List(); _Selection = 0; diff --git a/VocaluxeLib/Menu/CParticle.cs b/VocaluxeLib/Menu/CParticle.cs index 19227f0f..e321f755 100644 --- a/VocaluxeLib/Menu/CParticle.cs +++ b/VocaluxeLib/Menu/CParticle.cs @@ -287,7 +287,7 @@ namespace Vocaluxe.Menu public void Draw() { - if (_TextureName != String.Empty) + if (_TextureName.Length > 0) CBase.Drawing.DrawTexture(CBase.Theme.GetSkinTexture(_TextureName, _PartyModeID), _Rect, new SColorF(_Color.R, _Color.G, _Color.B, _Color.A * Alpha2 * _Alpha)); else CBase.Drawing.DrawTexture(_Texture, _Rect, new SColorF(_Color.R, _Color.G, _Color.B, _Color.A * Alpha2 * _Alpha)); @@ -428,7 +428,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": ParticleEffect color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) { writer.WriteElementString("Color", _Theme.ColorName); } @@ -544,7 +544,7 @@ namespace Vocaluxe.Menu h = 0; CParticle star; - if (_Theme.TextureName != String.Empty) + if (_Theme.TextureName.Length > 0) { star = new CParticle(_PartyModeID, _Theme.TextureName, Color, CBase.Game.GetRandom(w) + Rect.X - size / 4f, @@ -611,9 +611,9 @@ namespace Vocaluxe.Menu public void LoadTextures() { - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); - if(_Theme.TextureName != String.Empty) + if(_Theme.TextureName.Length > 0) Texture = CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID); } diff --git a/VocaluxeLib/Menu/CPlaylist.cs b/VocaluxeLib/Menu/CPlaylist.cs index 2102a64b..3df074d6 100644 --- a/VocaluxeLib/Menu/CPlaylist.cs +++ b/VocaluxeLib/Menu/CPlaylist.cs @@ -360,7 +360,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Button color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorBackgroundName != String.Empty) + if (_Theme.ColorBackgroundName.Length > 0) { writer.WriteElementString("ColorBackground", _Theme.ColorBackgroundName); } @@ -374,7 +374,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Selected paylist-entry color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.SColorBackgroundName != String.Empty) + if (_Theme.SColorBackgroundName.Length > 0) { writer.WriteElementString("SColorBackground", _Theme.SColorBackgroundName); } @@ -467,10 +467,10 @@ namespace Vocaluxe.Menu public void LoadTextures() { - if (_Theme.ColorBackgroundName != String.Empty) + if (_Theme.ColorBackgroundName.Length > 0) BackgroundColor = CBase.Theme.GetColor(_Theme.ColorBackgroundName, _PartyModeID); - if (_Theme.SColorBackgroundName != String.Empty) + if (_Theme.SColorBackgroundName.Length > 0) BackgroundSColor = CBase.Theme.GetColor(_Theme.SColorBackgroundName, _PartyModeID); _Theme.Text1.LoadTextures(); diff --git a/VocaluxeLib/Menu/CSelectSlide.cs b/VocaluxeLib/Menu/CSelectSlide.cs index 687f0a6b..e2d2df00 100644 --- a/VocaluxeLib/Menu/CSelectSlide.cs +++ b/VocaluxeLib/Menu/CSelectSlide.cs @@ -413,7 +413,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": SelectSlide color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) { writer.WriteElementString("Color", _Theme.ColorName); } @@ -427,7 +427,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Selected SelectSlide color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.SColorName != String.Empty) + if (_Theme.SColorName.Length > 0) { writer.WriteElementString("SColor", _Theme.SColorName); } @@ -441,7 +441,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Highlighted SelectSlide color from ColorScheme (high priority)"); writer.WriteComment("or
, , , (lower priority)"); - if (_Theme.HColorName != String.Empty) + if (_Theme.HColorName.Length > 0) { writer.WriteElementString("HColor", _Theme.HColorName); } @@ -455,7 +455,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Arrow color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ArrowColorName != String.Empty) + if (_Theme.ArrowColorName.Length > 0) { writer.WriteElementString("ArrowColor", _Theme.ArrowColorName); } @@ -469,7 +469,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Selected arrow color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.SArrowColorName != String.Empty) + if (_Theme.SArrowColorName.Length > 0) { writer.WriteElementString("ArrowSColor", _Theme.SArrowColorName); } @@ -483,7 +483,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Text color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.TextColorName != String.Empty) + if (_Theme.TextColorName.Length > 0) { writer.WriteElementString("TextColor", _Theme.TextColorName); } @@ -497,7 +497,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Selected text color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.STextColorName != String.Empty) + if (_Theme.STextColorName.Length > 0) { writer.WriteElementString("TextSColor", _Theme.STextColorName); } @@ -817,25 +817,25 @@ namespace Vocaluxe.Menu public void LoadTextures() { - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); - if (_Theme.SColorName != String.Empty) + if (_Theme.SColorName.Length > 0) SColor = CBase.Theme.GetColor(_Theme.SColorName, _PartyModeID); - if (_Theme.HColorName != String.Empty) + if (_Theme.HColorName.Length > 0) HColor = CBase.Theme.GetColor(_Theme.HColorName, _PartyModeID); - if (_Theme.ArrowColorName != String.Empty) + if (_Theme.ArrowColorName.Length > 0) ColorArrow = CBase.Theme.GetColor(_Theme.ArrowColorName, _PartyModeID); - if (_Theme.SArrowColorName != String.Empty) + if (_Theme.SArrowColorName.Length > 0) SColorArrow = CBase.Theme.GetColor(_Theme.SArrowColorName, _PartyModeID); - if (_Theme.TextColorName != String.Empty) + if (_Theme.TextColorName.Length > 0) TextColor = CBase.Theme.GetColor(_Theme.TextColorName, _PartyModeID); - if (_Theme.SColorName != String.Empty) + if (_Theme.SColorName.Length > 0) STextColor = CBase.Theme.GetColor(_Theme.STextColorName, _PartyModeID); } diff --git a/VocaluxeLib/Menu/CStatic.cs b/VocaluxeLib/Menu/CStatic.cs index cb8b4aa8..cbd1f0cc 100644 --- a/VocaluxeLib/Menu/CStatic.cs +++ b/VocaluxeLib/Menu/CStatic.cs @@ -186,7 +186,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Static color from ColorScheme (high priority)"); writer.WriteComment("or , , ,
(lower priority)"); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) { writer.WriteElementString("Color", _Theme.ColorName); } @@ -286,7 +286,7 @@ namespace Vocaluxe.Menu public void LoadTextures() { - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); } diff --git a/VocaluxeLib/Menu/CText.cs b/VocaluxeLib/Menu/CText.cs index d0e64f9f..4e5f1e0a 100644 --- a/VocaluxeLib/Menu/CText.cs +++ b/VocaluxeLib/Menu/CText.cs @@ -576,7 +576,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Text color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) { writer.WriteElementString("Color", _Theme.ColorName); } @@ -590,7 +590,7 @@ namespace Vocaluxe.Menu writer.WriteComment(": Selected Text color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.SColorName != String.Empty) + if (_Theme.SColorName.Length > 0) { writer.WriteElementString("SColor", _Theme.SColorName); } @@ -849,10 +849,10 @@ namespace Vocaluxe.Menu public void LoadTextures() { - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); - if (_Theme.SColorName != String.Empty) + if (_Theme.SColorName.Length > 0) SColor = CBase.Theme.GetColor(_Theme.SColorName, _PartyModeID); } @@ -879,7 +879,7 @@ namespace Vocaluxe.Menu private void UpdateTextPosition() { - if (_Text == String.Empty) + if (_Text.Length == 0) return; CBase.Fonts.SetFont(Fon); diff --git a/VocaluxeLib/Menu/SongMenu/CSong.cs b/VocaluxeLib/Menu/SongMenu/CSong.cs index 9dc01b08..66c4ab17 100644 --- a/VocaluxeLib/Menu/SongMenu/CSong.cs +++ b/VocaluxeLib/Menu/SongMenu/CSong.cs @@ -330,7 +330,7 @@ namespace Vocaluxe.Menu.SongMenu this.FileName = Path.GetFileName(FilePath); EHeaderFlags HeaderFlags = new EHeaderFlags(); - StreamReader sr; + StreamReader sr = null; try { @@ -362,6 +362,8 @@ namespace Vocaluxe.Menu.SongMenu { case "ENCODING": this.Encoding = CEncoding.GetEncoding(Value); + sr.Dispose(); + sr = null; sr = new StreamReader(FilePath, this.Encoding); Identifier = String.Empty; @@ -369,9 +371,9 @@ namespace Vocaluxe.Menu.SongMenu while (!sr.EndOfStream) { line = sr.ReadLine(); - if (line.Length == 0) + if (line.Length == 0) continue; - if(!line[0].ToString().Equals("#")) break; + if (!line[0].ToString().Equals("#")) break; pos = line.IndexOf(":"); @@ -384,39 +386,39 @@ namespace Vocaluxe.Menu.SongMenu } break; case "TITLE": - if (Value != String.Empty) + if (Value.Length > 0) { this.Title = Value; HeaderFlags |= EHeaderFlags.Title; } break; case "ARTIST": - if (Value != String.Empty) + if (Value.Length > 0) { this.Artist = Value; HeaderFlags |= EHeaderFlags.Artist; } break; case "TITLE-ON-SORTING": - if (Value != String.Empty) + if (Value.Length > 0) { this.TitleSorting = Value; } break; case "ARTIST-ON-SORTING": - if (Value != String.Empty) + if (Value.Length > 0) { this.ArtistSorting = Value; } break; case "P1": - if (Value != String.Empty) + if (Value.Length > 0) { this.DuetPart1 = Value; } break; case "P2": - if (Value != String.Empty) + if (Value.Length > 0) { this.DuetPart2 = Value; } @@ -586,19 +588,21 @@ namespace Vocaluxe.Menu.SongMenu } catch (Exception e) { + if (sr != null) + sr.Dispose(); CBase.Log.LogError("Error reading txt header in file \"" + FilePath + "\": " + e.Message); return false; } - + sr.Dispose(); CheckFiles(); //Before saving this tags to .txt: Check, if ArtistSorting and Artist are equal, then don't save this tag. - if (this.ArtistSorting == String.Empty) + if (this.ArtistSorting.Length == 0) { this.ArtistSorting = this.Artist; } - if (this.TitleSorting == String.Empty) + if (this.TitleSorting.Length == 0) { this.TitleSorting = this.Title; } @@ -634,7 +638,7 @@ namespace Vocaluxe.Menu.SongMenu int Player = 0; int FileLineNo = 0; - StreamReader sr; + StreamReader sr = null; try { @@ -776,8 +780,11 @@ namespace Vocaluxe.Menu.SongMenu catch (Exception e) { CBase.Log.LogError("Error loading song. Line No.: " + FileLineNo.ToString() + ". An unhandled exception occured (" + e.Message + "): " + FilePath); + if(sr != null) + sr.Dispose(); return false; } + sr.Dispose(); FindRefrain(); FindShortEnd(); _NotesLoaded = true; @@ -805,7 +812,7 @@ namespace Vocaluxe.Menu.SongMenu { if (_CoverSmallLoaded) return; - if (this.CoverFileName != String.Empty) + if (this.CoverFileName.Length > 0) { if (!CBase.DataBase.GetCover(Path.Combine(this.Folder, this.CoverFileName), ref _CoverTextureSmall, CBase.Config.GetCoverSize())) _CoverTextureSmall = CBase.Cover.GetNoCover(); @@ -818,7 +825,7 @@ namespace Vocaluxe.Menu.SongMenu private void CheckFiles() { - if(this.CoverFileName == String.Empty){ + if(this.CoverFileName.Length == 0){ List files = CHelper.ListFiles(this.Folder, "*.jpg", false); files.AddRange(CHelper.ListFiles(this.Folder, "*.png", false)); foreach(String file in files) @@ -830,7 +837,7 @@ namespace Vocaluxe.Menu.SongMenu } } - if (this.BackgroundFileName == String.Empty) + if (this.BackgroundFileName.Length == 0) { List files = CHelper.ListFiles(this.Folder, "*.jpg", false); files.AddRange(CHelper.ListFiles(this.Folder, "*.png", false)); @@ -847,12 +854,12 @@ namespace Vocaluxe.Menu.SongMenu private void CheckDuet() { - if (DuetPart1 == String.Empty) + if (DuetPart1.Length == 0) { DuetPart1 = "Part 1"; CBase.Log.LogError("Warning: Can't find #P1-tag for duets in \"" + this.Artist + " - " + this.Title + "\"."); } - if (DuetPart2 == String.Empty) + if (DuetPart2.Length == 0) { DuetPart2 = "Part 2"; CBase.Log.LogError("Warning: Can't find #P2-tag for duets in \"" + this.Artist + " - " + this.Title + "\"."); @@ -889,7 +896,7 @@ namespace Vocaluxe.Menu.SongMenu { for (int j = i + 1; j < lines.LineCount; j++) { - if (sentences[i] == sentences[j] && sentences[i] != String.Empty) + if (sentences[i] == sentences[j] && sentences[i].Length > 0) { Series tempSeries = new Series(); tempSeries.start = i; @@ -903,7 +910,7 @@ namespace Vocaluxe.Menu.SongMenu for (int k = 1; k <= max; k++) { - if (sentences[i + k] == sentences[j + k] && sentences[i + k] != String.Empty) + if (sentences[i + k] == sentences[j + k] && sentences[i + k].Length > 0) tempSeries.end = i + k; else break; diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index 3c8290bf..bfb77487 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -350,7 +350,7 @@ namespace Vocaluxe.Menu.SongMenu writer.WriteComment(": Tile color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) { writer.WriteElementString("Color", _Theme.ColorName); } @@ -578,7 +578,7 @@ namespace Vocaluxe.Menu.SongMenu { Init(); - if (_Theme.ColorName != String.Empty) + if (_Theme.ColorName.Length > 0) _Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); } @@ -652,7 +652,7 @@ namespace Vocaluxe.Menu.SongMenu _streams.Add(_stream); _actsongstream = _stream; - if (CBase.Songs.GetVisibleSong(_actsong).VideoFileName != String.Empty && CBase.Config.GetVideoPreview() == EOffOn.TR_CONFIG_ON) + if (CBase.Songs.GetVisibleSong(_actsong).VideoFileName.Length > 0 && CBase.Config.GetVideoPreview() == EOffOn.TR_CONFIG_ON) { _video = CBase.Video.Load(Path.Combine(CBase.Songs.GetVisibleSong(_actsong).Folder, CBase.Songs.GetVisibleSong(_actsong).VideoFileName)); if (_video == -1) diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs index 89a26d3c..be18331d 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs @@ -144,7 +144,7 @@ namespace Vocaluxe.Menu.SongMenu _MedleyTagIcon.Visible = false; } - if (CBase.Songs.GetNumVisibleSongs() == 0 && CBase.Songs.GetSearchFilter() != String.Empty) + if (CBase.Songs.GetNumVisibleSongs() == 0 && CBase.Songs.GetSearchFilter().Length > 0) { _CoverBig.Texture = _CoverBigTexture; _Artist.Text = String.Empty; diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj index 7a97fb5d..44f557a2 100644 --- a/VocaluxeLib/VocaluxeLib.csproj +++ b/VocaluxeLib/VocaluxeLib.csproj @@ -46,6 +46,7 @@ prompt 4 Off + ..\CheckingRules.ruleset
AnyCPU @@ -110,6 +111,7 @@ + From bd3f51b17e0f1ae5c7e20d2b0bd60f718a104b58 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 26 Feb 2013 16:55:49 +0100 Subject: [PATCH 03/31] Refactored AddTexture to remove duplicate code --- Vocaluxe/GlobalSuppressions.cs | 3 + Vocaluxe/Lib/Draw/CDirect3D.cs | 246 +++++++++++++++------------------ 2 files changed, 116 insertions(+), 133 deletions(-) diff --git a/Vocaluxe/GlobalSuppressions.cs b/Vocaluxe/GlobalSuppressions.cs index 0b83f3ab..05266267 100644 --- a/Vocaluxe/GlobalSuppressions.cs +++ b/Vocaluxe/GlobalSuppressions.cs @@ -12,3 +12,6 @@ [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDrawWinForm.#ColorizeBitmap(System.Drawing.Bitmap,Vocaluxe.Menu.SColorF)")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDrawWinForm.#CopyScreen(Vocaluxe.Menu.STexture&)")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Base.CGlyph.#.ctor(System.Char,System.Single)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDirect3D.#AddTexture(System.Drawing.Bitmap,System.String)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDirect3D.#AddTexture(System.Int32,System.Int32,System.Byte[]&)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDirect3D.#CopyScreen()")] diff --git a/Vocaluxe/Lib/Draw/CDirect3D.cs b/Vocaluxe/Lib/Draw/CDirect3D.cs index ae483f01..a89d3a62 100644 --- a/Vocaluxe/Lib/Draw/CDirect3D.cs +++ b/Vocaluxe/Lib/Draw/CDirect3D.cs @@ -734,18 +734,18 @@ namespace Vocaluxe.Lib.Draw Surface textureSurface = tex.GetSurfaceLevel(0); Surface.FromSurface(textureSurface, backbufferSurface, Filter.Default, 0); backbufferSurface.Dispose(); - _D3DTextures.Add(_IDs.Peek(), tex); - - texture.color = new SColorF(1f, 1f, 1f, 1f); - texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f); - texture.width = w; - texture.height = h; - texture.w2 = CheckForNextPowerOf2(texture.width); - texture.h2 = CheckForNextPowerOf2(texture.height); - texture.index = _IDs.Dequeue(); - lock (MutexTexture) { + _D3DTextures.Add(_IDs.Peek(), tex); + + texture.color = new SColorF(1f, 1f, 1f, 1f); + texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f); + texture.width = w; + texture.height = h; + texture.w2 = CheckForNextPowerOf2(texture.width); + texture.h2 = CheckForNextPowerOf2(texture.height); + texture.index = _IDs.Dequeue(); + _Textures[texture.index] = texture; } return texture; @@ -899,14 +899,13 @@ namespace Vocaluxe.Lib.Draw /// /// Adds a texture and stores it in the Vram /// - /// The Bitmap of which the texute will be created from + /// The Bitmap of which the texure will be created from /// The path to the texture /// A STexture object containing the added texture public STexture AddTexture(Bitmap bmp, string TexturePath) { - STexture texture = new STexture(-1); if (bmp.Height == 0 || bmp.Width == 0) - return texture; + return new STexture(-1); int MaxSize; //Apply the right max size switch (CConfig.TextureQuality) @@ -934,7 +933,7 @@ namespace Vocaluxe.Lib.Draw int w = bmp.Width; int h = bmp.Height; - if (w > MaxSize) + if (w > MaxSize && w > h) { h = (int)Math.Round((float)MaxSize / bmp.Width * bmp.Height); w = MaxSize; @@ -946,68 +945,47 @@ namespace Vocaluxe.Lib.Draw h = MaxSize; } - texture.width = w; - texture.height = h; - //Older graphics card can only handle textures with sizes being powers of two - texture.w2 = (float)CheckForNextPowerOf2(w); - texture.h2 = (float)CheckForNextPowerOf2(h); + w = (int)CheckForNextPowerOf2(w); + h = (int)CheckForNextPowerOf2(h); - if (texture.w2 != bmp.Width || texture.h2 != bmp.Height) + Bitmap bmp2 = null; + byte[] Data; + try { - //Create a new Bitmap with the new sizes - Bitmap bmp2 = new Bitmap((int)texture.w2, (int)texture.h2); - //Scale the texture - Graphics g = Graphics.FromImage(bmp2); - g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; - g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; - g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height)); - g.Dispose(); - bmp = bmp2; + + if (w != bmp.Width || h != bmp.Height) + { + //Create a new Bitmap with the new sizes + bmp2 = new Bitmap(w, h); + //Scale the texture + Graphics g = Graphics.FromImage(bmp2); + g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; + g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height)); + g.Dispose(); + bmp = bmp2; + } + + //Fill the new Bitmap with the texture data + BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Data = new byte[4 * w * h]; + Marshal.Copy(bmp_data.Scan0, Data, 0, Data.Length); + bmp.UnlockBits(bmp_data); + } + finally + { + if (bmp2 != null) + bmp2.Dispose(); } - texture.width_ratio = 1f; - texture.height_ratio = 1f; - - //Fill the new Bitmap with the texture data - BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, (int)texture.w2, (int)texture.h2), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - byte[] Data = new byte[4 * (int)texture.w2 * (int)texture.h2]; - Marshal.Copy(bmp_data.Scan0, Data, 0, Data.Length); - bmp.UnlockBits(bmp_data); - - //Create a new texture in the managed pool, which does not need to be recreated on a lost device - //because a copy of the texture is hold in the Ram - Texture t = new Texture(_Device, (int)texture.w2, (int)texture.h2, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed); - //Lock the texture and fill it with the data - DataRectangle rect = t.LockRectangle(0, LockFlags.Discard); - for (int i = 0; i < Data.Length; ) - { - rect.Data.Write(Data, i, 4 * (int)texture.w2); - i += 4 * (int)texture.w2; - rect.Data.Position = rect.Data.Position - 4 * (int)texture.w2; - rect.Data.Position += rect.Pitch; - } - t.UnlockRectangle(0); - - bmp_data = null; - - // Add to Texture List - texture.color = new SColorF(1f, 1f, 1f, 1f); - texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f); - texture.TexturePath = String.Empty; - lock (MutexTexture) - { - _D3DTextures.Add(_IDs.Peek(), t); - texture.index = _IDs.Dequeue(); - _Textures[texture.index] = texture; - } - return texture; + return AddTexture(w, h, ref Data); } /// /// Adds a texture and stores it in the Vram /// - /// The Bitmap of which the texute will be created from + /// The Bitmap of which the texure will be created from /// A STexture object containing the added texture public STexture AddTexture(Bitmap bmp) { @@ -1021,6 +999,59 @@ namespace Vocaluxe.Lib.Draw return AddTexture(W, H, ref PointerData); } + public STexture AddTexture(int W, int H, ref byte[] Data) + { + STexture texture = new STexture(-1); + + Texture t = _CreateTexture(W, H, ref Data, ref texture); + + lock (MutexTexture) + { + _D3DTextures.Add(_IDs.Peek(), t); + texture.index = _IDs.Dequeue(); + _Textures[texture.index] = texture; + } + return texture; + } + + private Texture _CreateTexture(int W, int H, ref byte[] Data, ref STexture sTexture) + { + sTexture.width = W; + sTexture.height = H; + sTexture.w2 = CheckForNextPowerOf2(W); + sTexture.h2 = CheckForNextPowerOf2(H); + sTexture.width_ratio = W / sTexture.w2; + sTexture.height_ratio = H / sTexture.h2; + + //Create a new texture in the managed pool, which does not need to be recreated on a lost device + //because a copy of the texture is hold in the Ram + Texture t = null; + try + { + t = new Texture(_Device, (int)sTexture.w2, (int)sTexture.h2, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed); + //Lock the texture and fill it with the data + DataRectangle rect = t.LockRectangle(0, LockFlags.Discard); + for (int i = 0; i < Data.Length; i += 4 * W) + { + rect.Data.Write(Data, i, 4 * (int)sTexture.w2); + rect.Data.Position = rect.Data.Position - 4 * (int)sTexture.w2; + rect.Data.Position += rect.Pitch; + } + t.UnlockRectangle(0); + + sTexture.color = new SColorF(1f, 1f, 1f, 1f); + sTexture.rect = new SRectF(0f, 0f, sTexture.width, sTexture.height, 0f); + sTexture.TexturePath = String.Empty; + } + catch (Exception) + { + if (t != null) + t.Dispose(); + throw; + } + return t; + } + public STexture QuequeTexture(int W, int H, ref byte[] Data) { STexture texture = new STexture(-1); @@ -1043,39 +1074,6 @@ namespace Vocaluxe.Lib.Draw return texture; } - public STexture AddTexture(int W, int H, ref byte[] Data) - { - STexture texture = new STexture(-1); - texture.width = W; - texture.height = H; - texture.w2 = CheckForNextPowerOf2(texture.width); - texture.h2 = CheckForNextPowerOf2(texture.height); - texture.width_ratio = texture.width / texture.w2; - texture.height_ratio = texture.height / texture.h2; - - Texture t = new Texture(_Device, (int)texture.w2, (int)texture.h2, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed); - DataRectangle rect = t.LockRectangle(0, LockFlags.Discard); - for (int i = 0; i < Data.Length; ) - { - rect.Data.Write(Data, i, 4 * W); - i += 4 * W; - rect.Data.Position = rect.Data.Position - 4 * W; - rect.Data.Position += rect.Pitch; - } - t.UnlockRectangle(0); - - texture.color = new SColorF(1f, 1f, 1f, 1f); - texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f); - texture.TexturePath = String.Empty; - - lock (MutexTexture) - { - _D3DTextures.Add(_IDs.Peek(), t); - texture.index = _IDs.Dequeue(); - _Textures[texture.index] = texture; - } - return texture; - } #endregion adding #region updating @@ -1103,18 +1101,22 @@ namespace Vocaluxe.Lib.Draw { if ((Texture.index >= 0) && (_Textures.Count > 0) && _TextureExists(ref Texture)) { - DataRectangle rect = _D3DTextures[Texture.index].LockRectangle(0, LockFlags.Discard); - for (int i = 0; i < Data.Length; ) + lock (MutexTexture) { - rect.Data.Write(Data, i, 4 * (int)Texture.width); - i += 4 * (int)Texture.width; - rect.Data.Position = rect.Data.Position - 4 * (int)Texture.width; - rect.Data.Position += rect.Pitch; + DataRectangle rect = _D3DTextures[Texture.index].LockRectangle(0, LockFlags.Discard); + int W = (int)Texture.width; + for (int i = 0; i < Data.Length; i += 4 * W) + { + rect.Data.Write(Data, i, 4 * W); + rect.Data.Position -= 4 * W; + rect.Data.Position += rect.Pitch; + } + _D3DTextures[Texture.index].UnlockRectangle(0); } - _D3DTextures[Texture.index].UnlockRectangle(0); - Texture.height_ratio = Texture.height / CheckForNextPowerOf2(Texture.height); - Texture.width_ratio = Texture.width / CheckForNextPowerOf2(Texture.width); + //Flamefire: Unneccesary as height can not be changed by this! (Texture gets copied) + //Texture.height_ratio = Texture.height / CheckForNextPowerOf2(Texture.height); + //Texture.width_ratio = Texture.width / CheckForNextPowerOf2(Texture.width); return true; /*Surface s = _D3DTextures[Texture.index].GetSurfaceLevel(0); @@ -1460,37 +1462,15 @@ namespace Vocaluxe.Lib.Draw return; STextureQueque q = _Queque[0]; - STexture texture = new STexture(-1); + STexture texture; if (_Textures.ContainsKey(q.ID)) texture = _Textures[q.ID]; - if (texture.index < 0) + else return; - texture.width = q.width; - texture.height = q.height; - texture.w2 = CheckForNextPowerOf2(texture.width); - texture.h2 = CheckForNextPowerOf2(texture.height); - - texture.width_ratio = texture.width / texture.w2; - texture.height_ratio = texture.height / texture.h2; - - Texture t = new Texture(_Device, (int)texture.w2, (int)texture.h2, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed); - DataRectangle rect = t.LockRectangle(0, LockFlags.Discard); - for (int i = 0; i < q.data.Length; ) - { - rect.Data.Write(q.data, i, 4 * q.width); - i += 4 * q.width; - rect.Data.Position = rect.Data.Position - 4 * q.width; - rect.Data.Position += rect.Pitch; - } - t.UnlockRectangle(0); + Texture t = _CreateTexture(q.width, q.height, ref q.data, ref texture); _D3DTextures[q.ID] = t; - // Add to Texture List - texture.color = new SColorF(1f, 1f, 1f, 1f); - texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f); - texture.TexturePath = String.Empty; - _Textures[texture.index] = texture; _Queque.RemoveAt(0); } From d2f8af880eef1c3b5c28719996fbd73cffcf6cb8 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 26 Feb 2013 18:22:18 +0100 Subject: [PATCH 04/31] Bugfixes for CDataBase/COpenGL Changed dynamic song loading to not use a thread as it was not threadsafe before --- Vocaluxe/Base/CDataBase.cs | 22 ++++----------- Vocaluxe/Base/CGraphics.cs | 2 +- Vocaluxe/Base/CSongs.cs | 54 ++++++++++++++++++++---------------- Vocaluxe/Lib/Draw/COpenGL.cs | 9 +++++- 4 files changed, 45 insertions(+), 42 deletions(-) diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 6c8ff5f3..0220890c 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -1011,8 +1011,6 @@ namespace Vocaluxe.Base #region Cover public static bool GetCover(string CoverPath, ref STexture tex, int MaxSize) { - bool result = false; - if (!File.Exists(CoverPath)) { CLog.LogError("Can't find File: " + CoverPath); @@ -1048,10 +1046,11 @@ namespace Vocaluxe.Base if (reader.HasRows) { - result = true; reader.Read(); byte[] data = GetBytes(reader); + reader.Dispose(); tex = CDraw.QuequeTexture(w, h, ref data); + return true; } } else @@ -1120,19 +1119,17 @@ namespace Vocaluxe.Base { reader.Read(); int id = reader.GetInt32(0); + reader.Dispose(); command.CommandText = "INSERT INTO CoverData (CoverID, Data) VALUES (@id, @data)"; command.Parameters.Add("@id", DbType.Int32).Value = id; command.Parameters.Add("@data", System.Data.DbType.Binary, 20).Value = data; command.ExecuteReader(); - result = true; + return true; } } - - if (reader != null) - reader.Dispose(); } - return result; + return false; } public static void CommitCovers() @@ -1284,14 +1281,7 @@ namespace Vocaluxe.Base command.CommandText = "SELECT Data FROM ImageData WHERE ImageID = @id"; command.Parameters.Add("@id",DbType.Int32).Value=id; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - throw; - } + reader = command.ExecuteReader(); if (reader.HasRows) { diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index 0d24defd..44ed03e8 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -324,7 +324,7 @@ namespace Vocaluxe.Base CInput.Update(); if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && _CurrentScreen != EScreens.ScreenSing) - CSongs.LoadCover(); + CSongs.LoadCover(30, 1); if (CSettings.GameState != EGameState.EditTheme) { diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 4a3751c5..7ef5a4ba 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -43,7 +43,7 @@ namespace Vocaluxe.Base private static bool _SongsLoaded = false; private static bool _CoverLoaded = false; - private static int _CoverLoadIndex = -1; + private static int _CoverLoadIndex = 0; private static int _CatIndex = -1; private static bool _Init = false; private static List _Categories = new List(); @@ -56,8 +56,6 @@ namespace Vocaluxe.Base private static EOffOn _IgnoreArticles = CConfig.IgnoreArticles; private static ESongSorting _SongSorting = CConfig.SongSorting; private static bool _ShowDuetSongs = true; - - private static Thread _CoverLoaderThread = null; public static string SearchFilter { @@ -180,10 +178,10 @@ namespace Vocaluxe.Base if (!SongsLoaded) return -1; - if (_Songs.Count > _CoverLoadIndex + 1) + if (_CoverLoadIndex < _Songs.Count) { - _CoverLoadIndex++; Song = _Songs[_CoverLoadIndex]; + _CoverLoadIndex++; return _CoverLoadIndex; } @@ -191,7 +189,7 @@ namespace Vocaluxe.Base } public static int NumSongsWithCoverLoaded { - get { return _CoverLoadIndex + 1; } + get { return _CoverLoadIndex; } } public static void SetCoverSmall(int SongIndex, STexture Texture) @@ -200,11 +198,7 @@ namespace Vocaluxe.Base return; if (SongIndex < _Songs.Count) - { _Songs[SongIndex].CoverTextureSmall = Texture; - if (SongIndex == _Songs.Count - 1) - _CoverLoaded = true; - } } public static void SetCoverBig(int SongIndex, STexture Texture) @@ -213,11 +207,7 @@ namespace Vocaluxe.Base return; if (SongIndex < _Songs.Count) - { _Songs[SongIndex].CoverTextureBig = Texture; - if (SongIndex == _Songs.Count - 1) - _CoverLoaded = true; - } } @@ -752,32 +742,48 @@ namespace Vocaluxe.Base if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART) { CLog.StartBenchmark(2, "Load Covers/Notes"); - _LoadCover(); + _LoadCoverAndNotes(); CLog.StopBenchmark(2, "Load Covers/Notes"); } CLog.StopBenchmark(1, "Load Songs "); GC.Collect(); } - public static void LoadCover() + public static void LoadCover(int WaitTime, int NumLoads) { if (CConfig.Renderer == ERenderer.TR_CONFIG_SOFTWARE) - return; + return; //should be removed as soon as the other renderer are ready for queque if (!SongsLoaded || CoverLoaded) return; - if (_CoverLoaderThread == null) + if (!_CoverLoadTimer.IsRunning) { - _CoverLoaderThread = new Thread(new ThreadStart(_LoadCover)); - _CoverLoaderThread.Name = "CoverLoader"; - _CoverLoaderThread.Priority = ThreadPriority.BelowNormal; - _CoverLoaderThread.IsBackground = true; - _CoverLoaderThread.Start(); + _CoverLoadTimer.Reset(); + _CoverLoadTimer.Start(); + } + + if (_CoverLoadTimer.ElapsedMilliseconds >= WaitTime) + { + for (int i = 0; i < NumLoads; i++) + { + CSong song = null; + int n = GetNextSongWithoutCover(ref song); + + if (n < 0) + return; + + song.LoadSmallCover(); + + if (n == NumAllSongs) + CDataBase.CommitCovers(); + } + _CoverLoadTimer.Reset(); + _CoverLoadTimer.Start(); } } - private static void _LoadCover() + private static void _LoadCoverAndNotes() { foreach(CSong song in _Songs) { diff --git a/Vocaluxe/Lib/Draw/COpenGL.cs b/Vocaluxe/Lib/Draw/COpenGL.cs index 8300f10b..3ccfd7a9 100644 --- a/Vocaluxe/Lib/Draw/COpenGL.cs +++ b/Vocaluxe/Lib/Draw/COpenGL.cs @@ -733,7 +733,14 @@ namespace Vocaluxe.Lib.Draw CLog.LogError("Error loading Texture: " + TexturePath); return new STexture(-1); } - return AddTexture(bmp, TexturePath); + try + { + return AddTexture(bmp, TexturePath); + } + finally + { + bmp.Dispose(); + } } CLog.LogError("Can't find File: " + TexturePath); return new STexture(-1); From 30841c5758db523abf6d60235fe15bf2e54ac46c Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 26 Feb 2013 21:12:32 +0100 Subject: [PATCH 05/31] SongMenu refactoring New Shortcuts Readme update --- Output/Readme.txt | 36 +- Vocaluxe/Screens/CScreenSong.cs | 363 +++++++++--------- VocaluxeLib/Menu/IMenu.cs | 25 +- .../Menu/SongMenu/CSongMenuTileBoard.cs | 345 ++++++----------- 4 files changed, 323 insertions(+), 446 deletions(-) diff --git a/Output/Readme.txt b/Output/Readme.txt index 4187d5a7..cd0cd6ac 100644 --- a/Output/Readme.txt +++ b/Output/Readme.txt @@ -109,39 +109,41 @@ Vocaluxe.exe -ConfigFile MyConfig.xml -ScoreFile C:\Vocaluxe\Highscores\MyHighsc ================================= = 4. Controls = ================================= -[Mouse] to navigate through the screens: Left button: select/manipulate elements, - Right button: go to previous screen. -[Cursor] to navigate through the screens. -[Enter] to confirm +[Mouse] to navigate through the screens: Left button: select/manipulate elements, + Right button: go to previous screen. +[Cursor] to navigate through the screens. +[Enter] to confirm [Escape] or [Back] to go to the previous screen. -[ALT] + [P] to take a ScreenShot. Screenshots are saved in the directory "Screenshots". +[ALT] + [P] to take a ScreenShot. Screenshots are saved in the directory "Screenshots". [ALT] + [ENTER] to toggle full screen mode. [SHIFT] + [F1] to toggle theme edit mode. The theme edit mode is experimental. It allows you to change the size and position of the element on the screens. You can save your changes with [S] before leaving the theme edit mode. -[TAB] to open the background music controls (not on all screens). +[TAB] to open the background music controls (not on all screens). [SHIFT] + [+] to increase volume [SHIFT] + [-] to decrease volume Song screen +[F3] to open/close the song search menu +[SPACE] to open/close the song menu [CTRL] + [R] to select a random song -[F3] to open/close the song search menu -[A] to sing all songs -[SHIFT] + [A] to sing all songs from a category -[SPACE] to open/close the song menu +[CTRL] + [A] to sing all songs +[CTRL] + [V] to sing all songs from a category +[NUM_1]..[NUM_6] to use a Joker for team 1..6 +[A]..[Z] to jump to category/song title starting with that letter Name selection screen -[1]..[6] to activate player selection. -[Cursor] to select a profile. -[Enter] to confirm a selection. +[1]..[6] to activate player selection. +[Cursor] to select a profile. +[Enter] to confirm a selection. Sing screen -[P] to toggle pause. +[P] to toggle pause. [CTRL] + [S] to skip a song if there is another one in the playlist. -[T] to change the time format of the timer. -[I] to change view of player information. -[W] to activate the configured webcam. +[T] to change the time format of the timer. +[I] to change view of player information. +[W] to activate the configured webcam. ================================= diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index ecbfdad2..cd060c6c 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -187,12 +187,11 @@ namespace Vocaluxe.Screens { if (_SearchActive) ApplyNewSearchFilter(_SearchText + KeyEvent.Unicode); - /* - else if (!Char.IsControl(KeyEvent.Unicode)) + else { JumpTo(KeyEvent.Unicode); return true; - } */ + } } else { @@ -254,7 +253,7 @@ namespace Vocaluxe.Screens break; case Keys.Back: - if (_SearchText.Length > 0) + if (_SearchActive && _SearchText.Length > 0) { ApplyNewSearchFilter(_SearchText.Remove(_SearchText.Length - 1)); } @@ -266,11 +265,6 @@ namespace Vocaluxe.Screens break; - case Keys.Space: - if (!_SearchActive && !_sso.Selection.PartyMode) - ToggleSongOptions(ESongOptionsView.General); - break; - case Keys.F3: if (_SearchActive) { @@ -279,78 +273,60 @@ namespace Vocaluxe.Screens ApplyNewSearchFilter(_SearchText); } else if (!_sso.Selection.PartyMode) - { _SearchActive = true; - } break; + } + if(!_SearchActive){ + switch (KeyEvent.Key) + { + case Keys.Space: + if (!_sso.Selection.PartyMode) + ToggleSongOptions(ESongOptionsView.General); + break; - //TODO: Delete it! ??? Shouldn't we keep this as shortcut? - case Keys.A: - if (!_SearchActive && KeyEvent.Mod == EModifier.None && !_sso.Selection.PartyMode) - { - StartRandomAllSongs(); - } - if (KeyEvent.Mod == EModifier.Ctrl && !_sso.Selection.PartyMode) - { - StartRandomVisibleSongs(); - } - break; + case Keys.A: + if (KeyEvent.Mod == EModifier.Ctrl && !_sso.Selection.PartyMode) + StartRandomAllSongs(); + break; + case Keys.V: + if (KeyEvent.Mod == EModifier.Ctrl && !_sso.Selection.PartyMode) + StartRandomVisibleSongs(); + break; - //TODO: Delete that from here and from wiki! - case Keys.F: - if (KeyEvent.Mod == EModifier.Ctrl) - { - if (_SearchActive) - { - _SearchActive = false; - _SearchText = String.Empty; - ApplyNewSearchFilter(_SearchText); - } - else if (!_sso.Selection.PartyMode) - { - _SearchActive = true; - } - } - break; + case Keys.R: + if (KeyEvent.Mod == EModifier.Ctrl && !_sso.Selection.RandomOnly) + SelectNextRandom(-1); + break; - //TODO: We need another key for random! - case Keys.R: - if (KeyEvent.Mod == EModifier.Ctrl && !_sso.Selection.RandomOnly) - SelectNextRandom(-1); - break; + case Keys.S: + if (KeyEvent.Mod == EModifier.Ctrl && CSongs.NumVisibleSongs > 0 && !_sso.Selection.PartyMode) + StartMedleySong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); + break; - //TODO: Delete that! - case Keys.S: - if (!_SearchActive && CSongs.NumVisibleSongs > 0 && !_sso.Selection.PartyMode) - { - StartMedleySong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); - } - break; + case Keys.D1: + SelectNextRandom(0); + break; - case Keys.D1: - SelectNextRandom(0); - break; + case Keys.D2: + SelectNextRandom(1); + break; - case Keys.D2: - SelectNextRandom(1); - break; + case Keys.D3: + SelectNextRandom(2); + break; - case Keys.D3: - SelectNextRandom(2); - break; + case Keys.D4: + SelectNextRandom(3); + break; - case Keys.D4: - SelectNextRandom(3); - break; - - case Keys.D5: - SelectNextRandom(4); - break; - - case Keys.D6: - SelectNextRandom(5); - break; + case Keys.D5: + SelectNextRandom(4); + break; + case Keys.D6: + SelectNextRandom(5); + break; + } } } } @@ -377,16 +353,9 @@ namespace Vocaluxe.Screens else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) { if (CSongs.Category != -1) - { SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); - } - } - else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) - { - if (CSongs.Category == -1) - { + else SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); - } } else if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) { @@ -1075,19 +1044,39 @@ namespace Vocaluxe.Screens private void JumpTo(char Letter) { - int song = SongMenus[htSongMenus(SongMenu)].GetSelectedSong(); - int id = -1; - if (song > -1 && song < CSongs.NumVisibleSongs) + int start = 0; + if (CSongs.Category < 0) { - id = CSongs.VisibleSongs[song].ID; + int curSelected = SongMenus[htSongMenus(SongMenu)].GetSelectedCategory(); + CCategory[] Categories = CSongs.Categories; + int ct = Categories.Length; + if (curSelected >= 0 && curSelected < ct - 1 && Categories[curSelected].Name.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)) + start = curSelected + 1; + int visibleID = Array.FindIndex(Categories, start, ct - start, element => element.Name.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); + if (visibleID < 0 && start > 1) + visibleID = Array.FindIndex(Categories, 0, start - 1, element => element.Name.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); + if (visibleID > -1) + SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(visibleID); + } + else + { + //TODO: Check and use sorting method + int curSelected = SongMenus[htSongMenus(SongMenu)].GetSelectedSong(); + CSong[] Songs = CSongs.VisibleSongs; + int ct = Songs.Length; + if (curSelected >= 0 && curSelected < ct - 1) + { + CSong CurrentSong = CSongs.GetVisibleSongByIndex(curSelected); + if (CurrentSong != null && CurrentSong.Artist.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)) + start = curSelected + 1; + } + int visibleID = Array.FindIndex(Songs, start, ct - start, element => element.Artist.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); + if(visibleID < 0 && start > 1) + visibleID = Array.FindIndex(Songs, 0, start - 1, element => element.Artist.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); + if (visibleID > -1) + SongMenus[htSongMenus(SongMenu)].SetSelectedSong(visibleID); } - int visibleID = Array.FindIndex(CSongs.VisibleSongs, element => element.Artist.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); - if (visibleID > -1) - { - id = visibleID; - SongMenus[htSongMenus(SongMenu)].SetSelectedSong(id); - } } private void ApplyNewSearchFilter(string NewFilterString) @@ -1119,7 +1108,7 @@ namespace Vocaluxe.Screens CSongs.Sort(_sso.Sorting.SongSorting, _sso.Sorting.Tabs, _sso.Sorting.IgnoreArticles, NewFilterString, _sso.Sorting.ShowDuetSongs); - if (SongID == -1 || CSongs.NumVisibleSongs == 0 || CSongs.NumVisibleSongs <= SongIndex || CSongs.VisibleSongs[SongIndex].ID != SongID) + if (SongID == -1 || CSongs.NumVisibleSongs == 0 || CSongs.NumVisibleSongs <= SongIndex || CSongs.GetVisibleSongByIndex(SongIndex).ID != SongID) refresh = true; if (refresh) @@ -1130,8 +1119,6 @@ namespace Vocaluxe.Screens private void ToggleSongOptions(ESongOptionsView view) { - _SongOptionsActive = view != ESongOptionsView.None; - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Visible = false; SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Visible = false; SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = false; @@ -1150,107 +1137,117 @@ namespace Vocaluxe.Screens Statics[htStatics(StaticOptionsBG)].Visible = false; Buttons[htButtons(ButtonOpenOptions)].Visible = true; + _SongOptionsActive = view != ESongOptionsView.None; + if (_SongOptionsActive) { - if (view == ESongOptionsView.Song) - { - EGameMode LastMode = EGameMode.TR_GAMEMODE_NORMAL; - if (_AvailableGameModes.Count > 0) - LastMode = _AvailableGameModes[SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection]; - SetInteractionToButton(Buttons[htButtons(ButtonOptionsSing)]); - _AvailableGameModes.Clear(); - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Clear(); - if (!CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) - { - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_NORMAL)); - _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_NORMAL); - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_SHORTSONG)); - _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_SHORTSONG); - } - if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) - { - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_DUET)); - _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_DUET); - } - if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].Medley.Source != EMedleySource.None) - { - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_MEDLEY)); - _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_MEDLEY); - } - //Set SelectSlide-Selection to last selected game-mode if possible - for (int i = 0; i < _AvailableGameModes.Count; i++) - { - if (_AvailableGameModes[i] == LastMode) - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].SetSelectionByValueIndex(i); - } - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Visible = true; - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Visible = true; - Buttons[htButtons(ButtonOptionsSing)].Visible = true; - Buttons[htButtons(ButtonOptionsPlaylist)].Visible = true; - SetInteractionToButton(Buttons[htButtons(ButtonOptionsSing)]); - } - else if (view == ESongOptionsView.General) - { - Buttons[htButtons(ButtonOptionsRandom)].Visible = CSongs.Category != -1; - Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = CSongs.Category == -1; - Buttons[htButtons(ButtonOptionsSingAll)].Visible = true; - Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = CSongs.Category != -1; - - if (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].NumValues > 0) - { - Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = true; - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = true; - SetInteractionToButton(Buttons[htButtons(ButtonOptionsOpenPlaylist)]); - } - else - { - Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = false; - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = false; - - if (Buttons[htButtons(ButtonOptionsRandom)].Visible) - SetInteractionToButton(Buttons[htButtons(ButtonOptionsRandom)]); - else - SetInteractionToButton(Buttons[htButtons(ButtonOptionsSingAll)]); - } - Buttons[htButtons(ButtonOptionsRandomMedley)].Visible = true; - if(Buttons[htButtons(ButtonOptionsRandom)].Visible) - SetInteractionToButton(Buttons[htButtons(ButtonOptionsRandom)]); - else - SetInteractionToButton(Buttons[htButtons(ButtonOptionsRandomCategory)]); - } - else if (view == ESongOptionsView.Medley) - { - Buttons[htButtons(ButtonOptionsStartMedley)].Visible = true; - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Visible = true; - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Clear(); - if (CSongs.Category != -1) - { - for (int i = 1; i <= CSongs.VisibleSongs.Length; i++) - { - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].AddValue(i.ToString()); - } - } - else - { - for (int i = 1; i <= CSongs.AllSongs.Length; i++) - { - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].AddValue(i.ToString()); - } - } - if (SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].NumValues >= 5) - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].SetSelectionByValueIndex(4); - else - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].SetSelectionByValueIndex(SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].NumValues - 1); - SetInteractionToButton(Buttons[htButtons(ButtonOptionsStartMedley)]); - - } Texts[htTexts(TextOptionsTitle)].Visible = true; Buttons[htButtons(ButtonOptionsClose)].Visible = true; Statics[htStatics(StaticOptionsBG)].Visible = true; Buttons[htButtons(ButtonOpenOptions)].Visible = false; + if (view == ESongOptionsView.Song) + _ShowSongOptionsSong(); + else if (view == ESongOptionsView.General) + _ShowSongOptionsGeneral(); + else if (view == ESongOptionsView.Medley) + _ShowSongOptionsMedley(); } } + private void _ShowSongOptionsSong() + { + EGameMode LastMode = EGameMode.TR_GAMEMODE_NORMAL; + if (_AvailableGameModes.Count > 0) + LastMode = _AvailableGameModes[SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection]; + SetInteractionToButton(Buttons[htButtons(ButtonOptionsSing)]); + _AvailableGameModes.Clear(); + SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Clear(); + if (!CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) + { + SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_NORMAL)); + _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_NORMAL); + SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_SHORTSONG)); + _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_SHORTSONG); + } + if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) + { + SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_DUET)); + _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_DUET); + } + if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].Medley.Source != EMedleySource.None) + { + SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_MEDLEY)); + _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_MEDLEY); + } + //Set SelectSlide-Selection to last selected game-mode if possible + for (int i = 0; i < _AvailableGameModes.Count; i++) + { + if (_AvailableGameModes[i] == LastMode) + SelectSlides[htSelectSlides(SelectSlideOptionsMode)].SetSelectionByValueIndex(i); + } + SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Visible = true; + SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Visible = true; + Buttons[htButtons(ButtonOptionsSing)].Visible = true; + Buttons[htButtons(ButtonOptionsPlaylist)].Visible = true; + SetInteractionToButton(Buttons[htButtons(ButtonOptionsSing)]); + } + + private void _ShowSongOptionsGeneral() + { + Buttons[htButtons(ButtonOptionsRandom)].Visible = CSongs.Category != -1; + Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = CSongs.Category == -1; + Buttons[htButtons(ButtonOptionsSingAll)].Visible = true; + Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = CSongs.Category != -1; + + if (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].NumValues > 0) + { + Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = true; + SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = true; + SetInteractionToButton(Buttons[htButtons(ButtonOptionsOpenPlaylist)]); + } + else + { + Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = false; + SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = false; + + if (Buttons[htButtons(ButtonOptionsRandom)].Visible) + SetInteractionToButton(Buttons[htButtons(ButtonOptionsRandom)]); + else + SetInteractionToButton(Buttons[htButtons(ButtonOptionsSingAll)]); + } + Buttons[htButtons(ButtonOptionsRandomMedley)].Visible = true; + if (Buttons[htButtons(ButtonOptionsRandom)].Visible) + SetInteractionToButton(Buttons[htButtons(ButtonOptionsRandom)]); + else + SetInteractionToButton(Buttons[htButtons(ButtonOptionsRandomCategory)]); + } + + private void _ShowSongOptionsMedley() + { + Buttons[htButtons(ButtonOptionsStartMedley)].Visible = true; + SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Visible = true; + SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Clear(); + if (CSongs.Category != -1) + { + for (int i = 1; i <= CSongs.VisibleSongs.Length; i++) + { + SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].AddValue(i.ToString()); + } + } + else + { + for (int i = 1; i <= CSongs.AllSongs.Length; i++) + { + SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].AddValue(i.ToString()); + } + } + if (SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].NumValues >= 5) + SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].SetSelectionByValueIndex(4); + else + SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].SetSelectionByValueIndex(SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].NumValues - 1); + SetInteractionToButton(Buttons[htButtons(ButtonOptionsStartMedley)]); + } + #region Playlist Actions public void CheckPlaylist() { diff --git a/VocaluxeLib/Menu/IMenu.cs b/VocaluxeLib/Menu/IMenu.cs index 8fb425db..3f63102b 100644 --- a/VocaluxeLib/Menu/IMenu.cs +++ b/VocaluxeLib/Menu/IMenu.cs @@ -324,10 +324,10 @@ namespace Vocaluxe.Menu [Flags] public enum EModifier { - None, - Shift, - Alt, - Ctrl + None = 0, + Shift = 1, + Alt = 2, + Ctrl = 4 } public enum ESender @@ -361,23 +361,14 @@ namespace Vocaluxe.Menu Key = key; Handled = false; - EModifier mALT = EModifier.None; - EModifier mSHIFT = EModifier.None; - EModifier mCTRL = EModifier.None; + Mod = EModifier.None; if (alt) - mALT = EModifier.Alt; - + Mod |= EModifier.Alt; if (shift) - mSHIFT = EModifier.Shift; - + Mod |= EModifier.Shift; if (ctrl) - mCTRL = EModifier.Ctrl; - - if (!alt && !shift && !ctrl) - Mod = EModifier.None; - else - Mod = mALT | mSHIFT | mCTRL; + Mod |= EModifier.Ctrl; } } diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs index be18331d..818fad51 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs @@ -26,7 +26,7 @@ namespace Vocaluxe.Menu.SongMenu private CText _Artist; private CText _Title; private CText _SongLength; - + private int _NumW; private int _NumH; @@ -36,7 +36,7 @@ namespace Vocaluxe.Menu.SongMenu private int _TileW; private int _TileH; - private int _Offset = 0; + private int _Offset = -1; private int _actualSelection = -1; private bool _SmallView = false; @@ -45,7 +45,7 @@ namespace Vocaluxe.Menu.SongMenu : base(PartyModeID) { } - + public override int GetActualSelection() { return _actualSelection; @@ -56,7 +56,7 @@ namespace Vocaluxe.Menu.SongMenu base.Init(); _Rect = _Theme.songMenuTileBoard.TileRect; - + _NumW = _Theme.songMenuTileBoard.numW; _NumH = _Theme.songMenuTileBoard.numH; _SpaceW = _Theme.songMenuTileBoard.spaceW; @@ -113,7 +113,7 @@ namespace Vocaluxe.Menu.SongMenu } } } - + public override void OnShow() { if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && CBase.Songs.GetNumCategories() > 0 && CBase.Songs.GetCurrentCategoryIndex() == -1) @@ -123,7 +123,7 @@ namespace Vocaluxe.Menu.SongMenu _actualSelection = -1; _Locked = -1; _PreviewSelected = -1; - UpdateList(0); + UpdateList(0, true); //AfterCategoryChange(); SetSelectedSong(_ActSong); AfterCategoryChange(); @@ -183,7 +183,7 @@ namespace Vocaluxe.Menu.SongMenu break; } } - + if ((_Locked == -1 || !sel) && (KeyEvent.Key != Keys.Escape && KeyEvent.Key != Keys.Back && KeyEvent.Key != Keys.PageUp && KeyEvent.Key != Keys.PageDown)) { @@ -197,7 +197,7 @@ namespace Vocaluxe.Menu.SongMenu _actualSelection = 0; _PreviewSelected = 0; SetSelectedNow(); - UpdateList(0); + UpdateList(0, true); } } else @@ -247,9 +247,7 @@ namespace Vocaluxe.Menu.SongMenu if (_Locked > 0 && (!SongOptions.Selection.RandomOnly || SongOptions.Selection.CategoryChangeAllowed && CBase.Songs.GetCurrentCategoryIndex() < 0)) { _Locked--; - if (CBase.Songs.GetCurrentCategoryIndex() < 0 && _Locked < CBase.Songs.GetNumCategories() - _NumW || - CBase.Songs.GetCurrentCategoryIndex() >= 0 && _Locked < CBase.Songs.GetNumVisibleSongs() - _NumW) - UpdateList((_Locked / _NumW) * _NumW - (_NumW * (_NumH - 2))); + UpdateList(); } break; @@ -259,8 +257,7 @@ namespace Vocaluxe.Menu.SongMenu if (_Locked < CBase.Songs.GetNumCategories() - 1) { _Locked++; - if (_Locked < CBase.Songs.GetNumCategories() - _NumW) - UpdateList((_Locked / _NumW) * _NumW - (_NumW * (_NumH - 2))); + UpdateList(); } } @@ -269,8 +266,7 @@ namespace Vocaluxe.Menu.SongMenu if (CBase.Songs.GetCurrentCategoryIndex() != -1 && _Locked < CBase.Songs.GetNumVisibleSongs() - 1 && !SongOptions.Selection.RandomOnly) { _Locked++; - if (_Locked < CBase.Songs.GetNumVisibleSongs() - _NumW) - UpdateList((_Locked / _NumW) * _NumW - (_NumW * (_NumH - 2))); + UpdateList(); } } break; @@ -285,7 +281,7 @@ namespace Vocaluxe.Menu.SongMenu if (_Locked > _NumW - 1 && (!SongOptions.Selection.RandomOnly || SongOptions.Selection.CategoryChangeAllowed && CBase.Songs.GetCurrentCategoryIndex() < 0)) { _Locked -= _NumW; - UpdateList((_Locked / _NumW) * _NumW - (_NumW * (_NumH - 2))); + UpdateList(); } break; @@ -301,19 +297,14 @@ namespace Vocaluxe.Menu.SongMenu if (_Locked < CBase.Songs.GetNumCategories() - _NumW) { _Locked += _NumW; - if (_Locked < CBase.Songs.GetNumCategories() - _NumW) - UpdateList((_Locked / _NumW) * _NumW - (_NumW * (_NumH - 2))); + UpdateList(); } } - else + else if (_Locked < CBase.Songs.GetNumVisibleSongs() - _NumW && !SongOptions.Selection.RandomOnly) { - if (_Locked < CBase.Songs.GetNumVisibleSongs() - _NumW && !SongOptions.Selection.RandomOnly) - { - _Locked += _NumW; - if (_Locked < CBase.Songs.GetNumVisibleSongs() - _NumW) - UpdateList((_Locked / _NumW) * _NumW - (_NumW * (_NumH - 2))); - } + _Locked += _NumW; + UpdateList(); } break; @@ -330,7 +321,7 @@ namespace Vocaluxe.Menu.SongMenu _Tiles[i].Selected = _Locked == i + _Offset; } } - } + } } public override void HandleMouse(ref MouseEvent MouseEvent, ScreenSongOptions SongOptions) @@ -407,30 +398,9 @@ namespace Vocaluxe.Menu.SongMenu } } - if (MouseEvent.Wheel > 0) + if (MouseEvent.Wheel != 0 && CHelper.IsInBounds(_ScrollRect, MouseEvent) && (!SongOptions.Selection.RandomOnly || CBase.Songs.GetCurrentCategoryIndex() < 0 && SongOptions.Selection.CategoryChangeAllowed)) { - if (CHelper.IsInBounds(_ScrollRect, MouseEvent) && (!SongOptions.Selection.RandomOnly || CBase.Songs.GetCurrentCategoryIndex() < 0 && SongOptions.Selection.CategoryChangeAllowed)) - { - if (CBase.Songs.GetCurrentCategoryIndex() >= 0 && CBase.Songs.GetNumVisibleSongs() > _Offset + _NumW * MouseEvent.Wheel + _NumW * (_NumH - 1) || - CBase.Songs.GetCurrentCategoryIndex() < 0 && CBase.Songs.GetNumCategories() > _Offset + _NumW * MouseEvent.Wheel + _NumW * (_NumH - 1)) - { - _Offset += _NumW * MouseEvent.Wheel; - UpdateList(_Offset); - } - } - } - - if (MouseEvent.Wheel < 0) - { - if (CHelper.IsInBounds(_ScrollRect, MouseEvent) && (!SongOptions.Selection.RandomOnly || CBase.Songs.GetCurrentCategoryIndex() < 0 && SongOptions.Selection.CategoryChangeAllowed)) - { - _Offset += _NumW * MouseEvent.Wheel; - if (_Offset < 0) - { - _Offset = 0; - } - UpdateList(_Offset); - } + UpdateList(_Offset + _NumW * MouseEvent.Wheel); } } @@ -511,11 +481,12 @@ namespace Vocaluxe.Menu.SongMenu CBase.Drawing.DrawTexture(_vidtex, vidRect, _vidtex.color, vidRectBounds, false); CBase.Drawing.DrawTextureReflection(_vidtex, vidRect, _vidtex.color, vidRectBounds, _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight); - }else + } + else _CoverBig.Draw(1f, EAspect.Crop); - + _Artist.Draw(); _Title.Draw(); _SongLength.Draw(); @@ -523,7 +494,7 @@ namespace Vocaluxe.Menu.SongMenu _VideoIcon.Draw(); _MedleyCalcIcon.Draw(); _MedleyTagIcon.Draw(); - + } public override int GetSelectedSong() @@ -541,117 +512,66 @@ namespace Vocaluxe.Menu.SongMenu return new CStatic(_PartyModeID); } + protected void SetSelectedTile(int itemNr) + { + bool sel = false; + foreach (CStatic tile in _Tiles) + { + if (tile.Selected) + { + sel = true; + break; + } + } + + if (_Locked == -1 || !sel) + { + if (_PreviewSelected > -1) + { + _Locked = _PreviewSelected; + } + else + { + _Locked = 0; + _actualSelection = 0; + _PreviewSelected = 0; + SetSelectedNow(); + UpdateList(0, true); + } + } + + foreach (CStatic tile in _Tiles) + { + tile.Selected = false; + } + + _PreviewSelected = itemNr; + SetSelectedNow(); + _Locked = itemNr; + + UpdateList(true); + + _PreviewSelected = _Locked; + _actualSelection = _Locked; + + if (_Locked - _Offset >= 0) + _Tiles[_Locked - _Offset].Selected = true; + } + public override void SetSelectedSong(int VisibleSongNr) { base.SetSelectedSong(VisibleSongNr); - if (VisibleSongNr < 0) - return; - - if (CBase.Songs.GetNumVisibleSongs() > VisibleSongNr) - { - bool sel = false; - foreach (CStatic tile in _Tiles) - { - if (tile.Selected) - { - sel = true; - break; - } - } - - if (_Locked == -1 || !sel) - { - if (_PreviewSelected > -1) - { - _Locked = _PreviewSelected; - } - else - { - _Locked = 0; - _actualSelection = 0; - _PreviewSelected = 0; - SetSelectedNow(); - UpdateList(0); - } - } - - foreach (CStatic tile in _Tiles) - { - tile.Selected = false; - } - - _PreviewSelected = VisibleSongNr; - SetSelectedNow(); - _Locked = VisibleSongNr; - - UpdateList((VisibleSongNr / _NumW) * _NumW - (_NumW * (_NumH - 2))); - - _PreviewSelected = _Locked; - _actualSelection = _Locked; - - for (int i = 0; i < _Tiles.Count; i++) - { - _Tiles[i].Selected = _Locked == i + _Offset; - } - } - + if (VisibleSongNr >= 0 && VisibleSongNr < CBase.Songs.GetNumVisibleSongs()) + SetSelectedTile(VisibleSongNr); } public override void SetSelectedCategory(int CategoryNr) { base.SetSelectedCategory(CategoryNr); - if (CategoryNr < 0) - return; - - if (CBase.Songs.GetNumCategories() > CategoryNr) - { - bool sel = false; - foreach (CStatic tile in _Tiles) - { - if (tile.Selected) - { - sel = true; - break; - } - } - - if (_Locked == -1 || !sel) - { - if (_PreviewSelected > -1) - { - _Locked = _PreviewSelected; - } - else - { - _Locked = 0; - _actualSelection = 0; - _PreviewSelected = 0; - SetSelectedNow(); - UpdateList(0); - } - } - - foreach (CStatic tile in _Tiles) - { - tile.Selected = false; - } - - _PreviewSelected = CategoryNr; - SetSelectedNow(); - _Locked = CategoryNr; - - UpdateList((CategoryNr / _NumW) * _NumW - (_NumW * (_NumH - 2))); - - _PreviewSelected = _Locked; - _actualSelection = _Locked; - - for (int i = 0; i < _Tiles.Count; i++) - { - _Tiles[i].Selected = _Locked == i + _Offset; - } - } + if (CategoryNr >= 0 && CategoryNr < CBase.Songs.GetNumCategories()) + SetSelectedTile(CategoryNr); } protected override void EnterCategory(int cat) @@ -706,60 +626,49 @@ namespace Vocaluxe.Menu.SongMenu if (_actualSelection >= 0 && _actualSelection < _Tiles.Count) _Tiles[_actualSelection].Selected = true; - + if ((_LastKnownNumSongs == CBase.Songs.GetNumVisibleSongs()) && (_LastKnownCategory == CBase.Songs.GetCurrentCategoryIndex())) return; _LastKnownCategory = CBase.Songs.GetCurrentCategoryIndex(); _LastKnownNumSongs = CBase.Songs.GetNumVisibleSongs(); - UpdateList(0); + UpdateList(0, true); CBase.Songs.UpdateRandomSongList(); } - private void UpdateList(int offset) + private void UpdateList(bool force = false) { - if (CBase.Songs.GetCurrentCategoryIndex() > -1) - { - if (offset >= (CBase.Songs.GetNumVisibleSongs() / _NumW) * _NumW - (_NumW * (_NumH - 1))) - offset = (CBase.Songs.GetNumVisibleSongs() / _NumW) * _NumW - (_NumW * (_NumH - 1)); - } - else - { - if (offset >= (CBase.Songs.GetNumCategories() / _NumW) * _NumW - (_NumW * (_NumH - 1))) - offset = (CBase.Songs.GetNumCategories() / _NumW) * _NumW - (_NumW * (_NumH - 1)); - } + UpdateList((_Locked / _NumW) * _NumW - (_NumW * (_NumH - 2)), force); + } + + private void UpdateList(int offset, bool force = false) + { + bool isInCategory = CBase.Songs.GetCurrentCategoryIndex() >= 0; + int itemCount = (isInCategory) ? CBase.Songs.GetNumVisibleSongs() : CBase.Songs.GetNumCategories(); + + if (offset >= (itemCount / _NumW) * _NumW - (_NumW * (_NumH - 1))) + offset = (itemCount / _NumW) * _NumW - (_NumW * (_NumH - 1)); if (offset < 0) offset = 0; + if (offset == _Offset && !force) + return; + for (int i = 0; i < _Tiles.Count; i++) { - if (CBase.Songs.GetCurrentCategoryIndex() >= 0) + if (itemCount > i + offset) { - if (CBase.Songs.GetNumVisibleSongs() > i + offset) - { + if (isInCategory) _Tiles[i].Texture = CBase.Songs.GetVisibleSong(i + offset).CoverTextureSmall; - _Tiles[i].Color = new SColorF(1f, 1f, 1f, 1f); - } else - { - _Tiles[i].Texture = _CoverTexture; - _Tiles[i].Color = _Color; - } - } - - if (CBase.Songs.GetCurrentCategoryIndex() == -1) - { - if (CBase.Songs.GetNumCategories() > i + offset) - { _Tiles[i].Texture = CBase.Songs.GetCategory(i + offset).CoverTextureSmall; - _Tiles[i].Color = new SColorF(1f, 1f, 1f, 1f); - } - else - { - _Tiles[i].Texture = _CoverTexture; - _Tiles[i].Color = _Color; - } + _Tiles[i].Color = new SColorF(1f, 1f, 1f, 1f); + } + else + { + _Tiles[i].Texture = _CoverTexture; + _Tiles[i].Color = _Color; } } _Offset = offset; @@ -775,56 +684,34 @@ namespace Vocaluxe.Menu.SongMenu { _NumH = _Theme.songMenuTileBoard.numHsmall; _NumW = _Theme.songMenuTileBoard.numWsmall; - - _TileW = (int)((_Theme.songMenuTileBoard.TileRectSmall.W - _SpaceW * (_NumW - 1)) / _NumW); - _TileH = (int)((_Theme.songMenuTileBoard.TileRectSmall.H - _SpaceH * (_NumH - 1)) / _NumH); - - _CoverTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBackgroundName, _PartyModeID); - _CoverBigTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBigBackgroundName, _PartyModeID); - - _Tiles = new List(); - for (int i = 0; i < _NumH; i++) - { - for (int j = 0; j < _NumW; j++) - { - SRectF rect = new SRectF(_Theme.songMenuTileBoard.TileRectSmall.X + j * (_TileW + _SpaceW), - _Theme.songMenuTileBoard.TileRectSmall.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z); - CStatic tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect); - _Tiles.Add(tile); - } - } - _Rect = _Theme.songMenuTileBoard.TileRectSmall; - _ScrollRect = new SRectF(0, 0, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH(), _Theme.songMenuTileBoard.TileRectSmall.Z); } else { _NumH = _Theme.songMenuTileBoard.numH; _NumW = _Theme.songMenuTileBoard.numW; - - _TileW = (int)((_Theme.songMenuTileBoard.TileRect.W - _SpaceW * (_NumW - 1)) / _NumW); - _TileH = (int)((_Theme.songMenuTileBoard.TileRect.H - _SpaceH * (_NumH - 1)) / _NumH); - - _CoverTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBackgroundName, _PartyModeID); - _CoverBigTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBigBackgroundName, _PartyModeID); - - _Tiles = new List(); - for (int i = 0; i < _NumH; i++) - { - for (int j = 0; j < _NumW; j++) - { - SRectF rect = new SRectF(_Theme.songMenuTileBoard.TileRect.X + j * (_TileW + _SpaceW), - _Theme.songMenuTileBoard.TileRect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z); - CStatic tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect); - _Tiles.Add(tile); - } - } - _Rect = _Theme.songMenuTileBoard.TileRect; - _ScrollRect = new SRectF(0, 0, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH(), _Theme.songMenuTileBoard.TileRect.Z); } - UpdateList((_Locked / _NumW) * _NumW - (_NumW * (_NumH - 2))); + _TileW = (int)((_Rect.W - _SpaceW * (_NumW - 1)) / _NumW); + _TileH = (int)((_Rect.H - _SpaceH * (_NumH - 1)) / _NumH); + + _CoverTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBackgroundName, _PartyModeID); + _CoverBigTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBigBackgroundName, _PartyModeID); + + _Tiles = new List(); + for (int i = 0; i < _NumH; i++) + { + for (int j = 0; j < _NumW; j++) + { + SRectF rect = new SRectF(_Rect.X + j * (_TileW + _SpaceW), _Rect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z); + CStatic tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect); + _Tiles.Add(tile); + } + } + + _ScrollRect = new SRectF(0, 0, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH(), _Rect.Z); + UpdateList(true); } public override bool IsSmallView() From dbb9c6355fc2b2fc0f44e0f23e0170a345b0ac26 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 27 Feb 2013 00:40:30 +0100 Subject: [PATCH 06/31] Added option to start current song/enter current category Added CSong.IsInCategory --- .gitignore | 2 + Output/Languages/English.xml | 1 + Output/Languages/German.xml | 1 + Output/Themes/Ambient/Screens/ScreenSong.xml | 20 +- Vocaluxe/Base/CGraphics.cs | 4 +- Vocaluxe/Base/CSongs.cs | 5 + Vocaluxe/Screens/CPopupScreenVolumeControl.cs | 4 +- Vocaluxe/Screens/CScreenSong.cs | 202 ++++++++---------- VocaluxeLib/Menu/CSelectSlide.cs | 5 + VocaluxeLib/Menu/SongMenu/CSongMenu.cs | 5 + .../Menu/SongMenu/CSongMenuFramework.cs | 14 +- .../Menu/SongMenu/CSongMenuTileBoard.cs | 6 +- VocaluxeLib/Menu/SongMenu/ISongMenu.cs | 2 + 13 files changed, 134 insertions(+), 137 deletions(-) diff --git a/.gitignore b/.gitignore index 1ea3fff8..7afc1fe5 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,5 @@ Output/Songs *.ipch *.log + +/Output/Playlists/*.xml diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml index e6c32d03..42460ca7 100644 --- a/Output/Languages/English.xml +++ b/Output/Languages/English.xml @@ -112,6 +112,7 @@ Sing all songs Sing all visible songs Open playlist + Select Sing a random medley Sing medley-songs New Playlist diff --git a/Output/Languages/German.xml b/Output/Languages/German.xml index 52cbba63..7fe3cf73 100644 --- a/Output/Languages/German.xml +++ b/Output/Languages/German.xml @@ -112,6 +112,7 @@ Alle Songs singen Alle sichtbaren Songs singen Playlist öffnen + Auswählen Zufälliges Medley singen Medley-Songs singen Neue Playlist diff --git a/Output/Themes/Ambient/Screens/ScreenSong.xml b/Output/Themes/Ambient/Screens/ScreenSong.xml index 5135f622..e279174b 100644 --- a/Output/Themes/Ambient/Screens/ScreenSong.xml +++ b/Output/Themes/Ambient/Screens/ScreenSong.xml @@ -1,7 +1,7 @@  - 4 + 5 Video @@ -954,7 +954,7 @@ Button 40 - 135 + 225 -2,11 360 40 @@ -1003,7 +1003,7 @@ Button 40 - 180 + 270 -2,11 360 40 @@ -1045,14 +1045,14 @@ - + Button Button 40 - 270 + 135 -2,11 360 40 @@ -1085,7 +1085,7 @@ Outline - TR_SCREENSONG_BUTTON_OPENPLAYLIST + TR_SCREENSONG_BUTTON_OPEN_SELECTED_ITEM @@ -1093,7 +1093,7 @@ - + Invisible @@ -1449,19 +1449,19 @@ SelectSlide 40 - 225 + 180 -2,11 360 40 45 - 235 + 190 -2,12 30 30 365 - 235 + 190 -2,12 30 30 diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index 44ed03e8..7a44178f 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -503,7 +503,7 @@ namespace Vocaluxe.Base MouseEvent InputMouseEvent = new MouseEvent(); bool PopupPlayerControlAllowed = _CurrentScreen != EScreens.ScreenOptionsRecord && _CurrentScreen != EScreens.ScreenSing && - (_CurrentScreen != EScreens.ScreenSong || (_CurrentScreen == EScreens.ScreenSong && CSongs.Category == -1 && CConfig.Tabs ==EOffOn.TR_CONFIG_ON)) + (_CurrentScreen != EScreens.ScreenSong || (_CurrentScreen == EScreens.ScreenSong && !CSongs.IsInCategory && CConfig.Tabs ==EOffOn.TR_CONFIG_ON)) && _CurrentScreen != EScreens.ScreenCredits && !CBackgroundMusic.Disabled; bool PopupVolumeControlAllowed = _CurrentScreen != EScreens.ScreenCredits && _CurrentScreen != EScreens.ScreenOptionsRecord; @@ -555,7 +555,7 @@ namespace Vocaluxe.Base switch (CGraphics.CurrentScreen) { case EScreens.ScreenSong: - if (CSongs.Category != -1) + if (CSongs.IsInCategory) { CConfig.PreviewMusicVolume += Diff; _Screens[(int)_CurrentScreen].ApplyVolume(); diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 7ef5a4ba..0b764fe3 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -139,6 +139,11 @@ namespace Vocaluxe.Base } } + public static bool IsInCategory + { + get { return _CatIndex >= 0; } + } + /// /// Returns the number of song in the category specified with CatIndex /// diff --git a/Vocaluxe/Screens/CPopupScreenVolumeControl.cs b/Vocaluxe/Screens/CPopupScreenVolumeControl.cs index ead806c0..19ef40d9 100644 --- a/Vocaluxe/Screens/CPopupScreenVolumeControl.cs +++ b/Vocaluxe/Screens/CPopupScreenVolumeControl.cs @@ -110,7 +110,7 @@ namespace Vocaluxe.Screens switch (CGraphics.CurrentScreen) { case EScreens.ScreenSong: - if (CSongs.Category != -1) + if (CSongs.IsInCategory) CConfig.PreviewMusicVolume = SelectSlides[htSelectSlides(SelectSlideVolume)].Selection * 5; else { @@ -136,7 +136,7 @@ namespace Vocaluxe.Screens switch (CGraphics.CurrentScreen) { case EScreens.ScreenSong: - if(CSongs.Category != -1) + if(CSongs.IsInCategory) SelectSlides[htSelectSlides(SelectSlideVolume)].Selection = (int)(CConfig.PreviewMusicVolume / 5); else SelectSlides[htSelectSlides(SelectSlideVolume)].Selection = ((int)CConfig.BackgroundMusicVolume / 5); diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index cd060c6c..a0eea267 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -26,7 +26,7 @@ namespace Vocaluxe.Screens } // Version number for theme files. Increment it, if you've changed something on the theme files! - const int ScreenVersion = 4; + const int ScreenVersion = 5; private const string TextCategory = "TextCategory"; private const string TextSelection = "TextSelection"; @@ -42,7 +42,7 @@ namespace Vocaluxe.Screens private const string ButtonOptionsRandomCategory = "ButtonOptionsRandomCategory"; private const string ButtonOptionsSingAll = "ButtonOptionsSingAll"; private const string ButtonOptionsSingAllVisible = "ButtonOptionsSingAllVisible"; - private const string ButtonOptionsOpenPlaylist = "ButtonOptionsOpenPlaylist"; + private const string ButtonOptionsOpenSelectedItem = "ButtonOptionsOpenSelectedItem"; private const string ButtonOptionsRandomMedley = "ButtonOptionsRandomMedley"; private const string ButtonOptionsStartMedley = "ButtonOptionsStartMedley"; private const string ButtonStart = "ButtonStart"; @@ -98,7 +98,7 @@ namespace Vocaluxe.Screens blist.Add(ButtonOptionsRandomCategory); blist.Add(ButtonOptionsSingAll); blist.Add(ButtonOptionsSingAllVisible); - blist.Add(ButtonOptionsOpenPlaylist); + blist.Add(ButtonOptionsOpenSelectedItem); blist.Add(ButtonOpenOptions); blist.Add(ButtonStart); blist.Add(ButtonOptionsRandomMedley); @@ -130,22 +130,7 @@ namespace Vocaluxe.Screens public override void LoadTheme(string XmlPath) { base.LoadTheme(XmlPath); - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Visible = false; - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Visible = false; - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = false; - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Visible = false; - Buttons[htButtons(ButtonOptionsClose)].Visible = false; - Buttons[htButtons(ButtonOptionsSing)].Visible = false; - Buttons[htButtons(ButtonOptionsPlaylist)].Visible = false; - Buttons[htButtons(ButtonOptionsRandom)].Visible = false; - Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = false; - Buttons[htButtons(ButtonOptionsSingAll)].Visible = false; - Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = false; - Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = false; - Buttons[htButtons(ButtonOptionsRandomMedley)].Visible = false; - Buttons[htButtons(ButtonOptionsStartMedley)].Visible = false; - Texts[htTexts(TextOptionsTitle)].Visible = false; - Statics[htStatics(StaticOptionsBG)].Visible = false; + ToggleSongOptions(ESongOptionsView.None); Playlists[htPlaylists(Playlist)].Visible = false; DragAndDropCover = GetNewStatic(); @@ -165,19 +150,7 @@ namespace Vocaluxe.Screens if (_PlaylistActive) { - if (!KeyEvent.KeyPressed && KeyEvent.Key == Keys.Tab) - { - _PlaylistActive = !_PlaylistActive; - Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; - SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); - return true; - } - Playlists[htPlaylists(Playlist)].HandleInput(KeyEvent); - - if (CPlaylists.NumPlaylists != SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].NumValues) - UpdatePlaylistNames(); - return true; } @@ -330,7 +303,6 @@ namespace Vocaluxe.Screens } } } - else { switch (KeyEvent.Key) @@ -352,7 +324,7 @@ namespace Vocaluxe.Screens } else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) { - if (CSongs.Category != -1) + if (CSongs.IsInCategory) SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); else SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); @@ -365,9 +337,12 @@ namespace Vocaluxe.Screens { StartRandomVisibleSongs(); } - else if (Buttons[htButtons(ButtonOptionsOpenPlaylist)].Selected) + else if (Buttons[htButtons(ButtonOptionsOpenSelectedItem)].Selected) + { + _HandleSelectButton(); + } + else if (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Selected) { - ToggleSongOptions(ESongOptionsView.None); OpenPlaylistAction(); } else if (Buttons[htButtons(ButtonOptionsRandomMedley)].Selected) @@ -377,7 +352,7 @@ namespace Vocaluxe.Screens else if (Buttons[htButtons(ButtonOptionsStartMedley)].Selected) { ToggleSongOptions(ESongOptionsView.None); - StartRandomMedley(SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Selection + 1, CSongs.Category == -1); + StartRandomMedley(SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Selection + 1, !CSongs.IsInCategory); } break; @@ -440,8 +415,6 @@ namespace Vocaluxe.Screens { if (Playlists[htPlaylists(Playlist)].HandleMouse(MouseEvent)) { - if (CPlaylists.NumPlaylists != SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].NumValues) - UpdatePlaylistNames(); return true; } } @@ -477,6 +450,8 @@ namespace Vocaluxe.Screens if (MouseEvent.LD && !_sso.Selection.PartyMode) { + //TODO: Causes Bug if you select a song (e.g. with Select random song) and double click a normal button. + //E.g. clicking to fast on Select random song starts the next random song. is this OK? if (CSongs.NumVisibleSongs > 0 && SongMenus[htSongMenus(SongMenu)].GetActualSelection() != -1) { ToggleSongOptions(ESongOptionsView.None); @@ -499,81 +474,72 @@ namespace Vocaluxe.Screens { ToggleSongOptions(ESongOptionsView.General); return true; - } - - if (Buttons[htButtons(ButtonOptionsClose)].Selected) + } else if (Buttons[htButtons(ButtonOptionsClose)].Selected) { ToggleSongOptions(ESongOptionsView.None); return true; - } - - if (Buttons[htButtons(ButtonOptionsSing)].Selected) + } else if (Buttons[htButtons(ButtonOptionsSing)].Selected) { ToggleSongOptions(ESongOptionsView.None); StartSong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); return true; } - - if (Buttons[htButtons(ButtonOptionsPlaylist)].Selected) + else if (Buttons[htButtons(ButtonOptionsPlaylist)].Selected) { ToggleSongOptions(ESongOptionsView.None); OpenAndAddPlaylistAction(); return true; } - - if (Buttons[htButtons(ButtonOptionsRandom)].Selected) + else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) { - if (CSongs.Category != -1) + if (CSongs.IsInCategory) { SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); return true; } } - - if (Buttons[htButtons(ButtonOptionsRandomCategory)].Selected) + else if (Buttons[htButtons(ButtonOptionsRandomCategory)].Selected) { - if (CSongs.Category == -1) + if (!CSongs.IsInCategory) { SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); return true; } } - - if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) + else if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) { ToggleSongOptions(ESongOptionsView.None); StartRandomAllSongs(); return true; } - - if (Buttons[htButtons(ButtonOptionsSingAllVisible)].Selected) + else if (Buttons[htButtons(ButtonOptionsSingAllVisible)].Selected) { ToggleSongOptions(ESongOptionsView.None); StartRandomVisibleSongs(); return true; } - - if (Buttons[htButtons(ButtonOptionsOpenPlaylist)].Selected) + else if (Buttons[htButtons(ButtonOptionsOpenSelectedItem)].Selected) + { + _HandleSelectButton(); + return true; + } + else if (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].ValueSelected) { - ToggleSongOptions(ESongOptionsView.None); OpenPlaylistAction(); return true; } - - if (Buttons[htButtons(ButtonOptionsRandomMedley)].Selected) + else if (Buttons[htButtons(ButtonOptionsRandomMedley)].Selected) { ToggleSongOptions(ESongOptionsView.Medley); return true; } - - if (Buttons[htButtons(ButtonOptionsStartMedley)].Selected) + else if (Buttons[htButtons(ButtonOptionsStartMedley)].Selected) { ToggleSongOptions(ESongOptionsView.None); - StartRandomMedley(SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Selection + 1, CSongs.Category == -1); + StartRandomMedley(SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Selection + 1, !CSongs.IsInCategory); return true; } - - if (_sso.Selection.RandomOnly && _sso.Selection.NumJokers != null) + else if (_sso.Selection.RandomOnly && _sso.Selection.NumJokers != null) { if (Buttons[htButtons(ButtonStart)].Selected) { @@ -599,9 +565,7 @@ namespace Vocaluxe.Screens { if (SongMenus[htSongMenus(SongMenu)].GetSelectedSong() != -1 && !_SongOptionsActive) { - if (!_sso.Selection.PartyMode) - ToggleSongOptions(ESongOptionsView.Song); - + ToggleSongOptions(ESongOptionsView.Song); return true; } else @@ -635,6 +599,19 @@ namespace Vocaluxe.Screens return true; } + private void _HandleSelectButton() + { + if (CSongs.IsInCategory) { + if(!_sso.Selection.PartyMode) + ToggleSongOptions(ESongOptionsView.Song); + } + else if(_sso.Selection.CategoryChangeAllowed) + { + ToggleSongOptions(ESongOptionsView.None); + SongMenus[htSongMenus(SongMenu)].EnterCurrentCategory(); + } + } + public override void OnShow() { base.OnShow(); @@ -661,7 +638,6 @@ namespace Vocaluxe.Screens if (Playlists[htPlaylists(Playlist)].ActivePlaylistID != -1) Playlists[htPlaylists(Playlist)].LoadPlaylist(Playlists[htPlaylists(Playlist)].ActivePlaylistID); - UpdatePlaylistNames(); DragAndDropActive = false; Playlists[htPlaylists(Playlist)].DragAndDropSongID = -1; @@ -686,7 +662,7 @@ namespace Vocaluxe.Screens { Texts[htTexts(TextSelection)].Text = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title; } - else if (CSongs.Category == -1 && song >= 0 && song < CSongs.Categories.Length) + else if (!CSongs.IsInCategory && song >= 0 && song < CSongs.Categories.Length) { Texts[htTexts(TextSelection)].Text = CSongs.Categories[song].Name; } @@ -750,7 +726,7 @@ namespace Vocaluxe.Screens private void UpdatePartyModeOptions() { - if (CSongs.Category == -1) + if (!CSongs.IsInCategory) SelectedSongID = -1; if (SelectedCategoryIndex != CSongs.Category) @@ -1022,7 +998,7 @@ namespace Vocaluxe.Screens private bool SelectNextRandomSong() { - if (CSongs.Category != -1) + if (CSongs.IsInCategory) { ToggleSongOptions(ESongOptionsView.None); SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); @@ -1033,7 +1009,7 @@ namespace Vocaluxe.Screens private bool SelectNextRandomCategory() { - if (CSongs.Category == -1) + if (!CSongs.IsInCategory) { ToggleSongOptions(ESongOptionsView.None); SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); @@ -1045,23 +1021,10 @@ namespace Vocaluxe.Screens private void JumpTo(char Letter) { int start = 0; - if (CSongs.Category < 0) - { - int curSelected = SongMenus[htSongMenus(SongMenu)].GetSelectedCategory(); - CCategory[] Categories = CSongs.Categories; - int ct = Categories.Length; - if (curSelected >= 0 && curSelected < ct - 1 && Categories[curSelected].Name.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)) - start = curSelected + 1; - int visibleID = Array.FindIndex(Categories, start, ct - start, element => element.Name.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); - if (visibleID < 0 && start > 1) - visibleID = Array.FindIndex(Categories, 0, start - 1, element => element.Name.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); - if (visibleID > -1) - SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(visibleID); - } - else + int curSelected = SongMenus[htSongMenus(SongMenu)].GetActualSelection(); + if (CSongs.IsInCategory) { //TODO: Check and use sorting method - int curSelected = SongMenus[htSongMenus(SongMenu)].GetSelectedSong(); CSong[] Songs = CSongs.VisibleSongs; int ct = Songs.Length; if (curSelected >= 0 && curSelected < ct - 1) @@ -1071,12 +1034,24 @@ namespace Vocaluxe.Screens start = curSelected + 1; } int visibleID = Array.FindIndex(Songs, start, ct - start, element => element.Artist.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); - if(visibleID < 0 && start > 1) + if (visibleID < 0 && start > 1) visibleID = Array.FindIndex(Songs, 0, start - 1, element => element.Artist.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); if (visibleID > -1) SongMenus[htSongMenus(SongMenu)].SetSelectedSong(visibleID); } + else + { + CCategory[] Categories = CSongs.Categories; + int ct = Categories.Length; + if (curSelected >= 0 && curSelected < ct - 1 && Categories[curSelected].Name.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)) + start = curSelected + 1; + int visibleID = Array.FindIndex(Categories, start, ct - start, element => element.Name.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); + if (visibleID < 0 && start > 1) + visibleID = Array.FindIndex(Categories, 0, start - 1, element => element.Name.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); + if (visibleID > -1) + SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(visibleID); + } } private void ApplyNewSearchFilter(string NewFilterString) @@ -1130,7 +1105,7 @@ namespace Vocaluxe.Screens Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = false; Buttons[htButtons(ButtonOptionsSingAll)].Visible = false; Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = false; - Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = false; + Buttons[htButtons(ButtonOptionsOpenSelectedItem)].Visible = false; Buttons[htButtons(ButtonOptionsRandomMedley)].Visible = false; Buttons[htButtons(ButtonOptionsStartMedley)].Visible = false; Texts[htTexts(TextOptionsTitle)].Visible = false; @@ -1141,6 +1116,9 @@ namespace Vocaluxe.Screens if (_SongOptionsActive) { + //Has to be done here otherwhise changed playlist names will not appear until OnShow is called! + UpdatePlaylistNames(); + Texts[htTexts(TextOptionsTitle)].Visible = true; Buttons[htButtons(ButtonOptionsClose)].Visible = true; Statics[htStatics(StaticOptionsBG)].Visible = true; @@ -1162,18 +1140,18 @@ namespace Vocaluxe.Screens SetInteractionToButton(Buttons[htButtons(ButtonOptionsSing)]); _AvailableGameModes.Clear(); SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Clear(); - if (!CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) + if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) + { + SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_DUET)); + _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_DUET); + } + else { SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_NORMAL)); _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_NORMAL); SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_SHORTSONG)); _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_SHORTSONG); } - if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) - { - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_DUET)); - _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_DUET); - } if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].Medley.Source != EMedleySource.None) { SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_MEDLEY)); @@ -1194,28 +1172,20 @@ namespace Vocaluxe.Screens private void _ShowSongOptionsGeneral() { - Buttons[htButtons(ButtonOptionsRandom)].Visible = CSongs.Category != -1; - Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = CSongs.Category == -1; - Buttons[htButtons(ButtonOptionsSingAll)].Visible = true; - Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = CSongs.Category != -1; - - if (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].NumValues > 0) + if (CSongs.IsInCategory) { - Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = true; - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = true; - SetInteractionToButton(Buttons[htButtons(ButtonOptionsOpenPlaylist)]); + Buttons[htButtons(ButtonOptionsRandom)].Visible = true; + Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = true; } else - { - Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = false; - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = false; - - if (Buttons[htButtons(ButtonOptionsRandom)].Visible) - SetInteractionToButton(Buttons[htButtons(ButtonOptionsRandom)]); - else - SetInteractionToButton(Buttons[htButtons(ButtonOptionsSingAll)]); - } + Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = true; + Buttons[htButtons(ButtonOptionsSingAll)].Visible = true; Buttons[htButtons(ButtonOptionsRandomMedley)].Visible = true; + Buttons[htButtons(ButtonOptionsOpenSelectedItem)].Visible = true; + + if (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].NumValues > 0) + SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = true; + if (Buttons[htButtons(ButtonOptionsRandom)].Visible) SetInteractionToButton(Buttons[htButtons(ButtonOptionsRandom)]); else @@ -1227,7 +1197,7 @@ namespace Vocaluxe.Screens Buttons[htButtons(ButtonOptionsStartMedley)].Visible = true; SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Visible = true; SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Clear(); - if (CSongs.Category != -1) + if (CSongs.IsInCategory) { for (int i = 1; i <= CSongs.VisibleSongs.Length; i++) { diff --git a/VocaluxeLib/Menu/CSelectSlide.cs b/VocaluxeLib/Menu/CSelectSlide.cs index e2d2df00..2f821562 100644 --- a/VocaluxeLib/Menu/CSelectSlide.cs +++ b/VocaluxeLib/Menu/CSelectSlide.cs @@ -79,6 +79,11 @@ namespace Vocaluxe.Menu } } } + public bool ValueSelected + { + get { return _Selected && !_ArrowLeftSelected && !_ArrowRightSelected; } + } + public bool Visible = true; public bool Highlighted = false; diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenu.cs b/VocaluxeLib/Menu/SongMenu/CSongMenu.cs index 32b2d5fa..411779b6 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenu.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenu.cs @@ -115,6 +115,11 @@ namespace Vocaluxe.Menu.SongMenu _SongMenu.SetSelectedCategory(CategoryNr); } + public bool EnterCurrentCategory() + { + return _SongMenu.EnterCurrentCategory(); + } + public int GetActualSelection() { return _SongMenu.GetActualSelection(); diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index bfb77487..22302772 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -588,6 +588,16 @@ namespace Vocaluxe.Menu.SongMenu LoadTextures(); } + public bool EnterCurrentCategory() + { + if (!_Initialized) + return false; + if (CBase.Songs.GetCurrentCategoryIndex() >= 0 || _PreviewSelected < 0 || _PreviewSelected >= CBase.Songs.GetNumCategories()) + return false; + EnterCategory(_PreviewSelected); + return true; + } + protected virtual void EnterCategory(int Category) { if (!_Initialized) @@ -605,8 +615,8 @@ namespace Vocaluxe.Menu.SongMenu if (!_Initialized) return; - if (CBase.Songs.GetCurrentCategoryIndex() != -1) - Reset(); + if (CBase.Songs.GetCurrentCategoryIndex() == -1) + return; Reset(); CBase.Songs.SetCategory(-1); diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs index 818fad51..8c881591 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs @@ -163,11 +163,7 @@ namespace Vocaluxe.Menu.SongMenu { base.HandleInput(ref KeyEvent, SongOptions); - if (KeyEvent.KeyPressed) - { - // - } - else + if (!KeyEvent.KeyPressed) { if (!(KeyEvent.Key == Keys.Left || KeyEvent.Key == Keys.Right || KeyEvent.Key == Keys.Up || KeyEvent.Key == Keys.Down || KeyEvent.Key == Keys.Escape || KeyEvent.Key == Keys.Back || KeyEvent.Key == Keys.Enter || diff --git a/VocaluxeLib/Menu/SongMenu/ISongMenu.cs b/VocaluxeLib/Menu/SongMenu/ISongMenu.cs index e5c3d60f..ed29efa1 100644 --- a/VocaluxeLib/Menu/SongMenu/ISongMenu.cs +++ b/VocaluxeLib/Menu/SongMenu/ISongMenu.cs @@ -29,6 +29,8 @@ namespace Vocaluxe.Menu.SongMenu void SetSelectedCategory(int CategoryNr); int GetActualSelection(); + bool EnterCurrentCategory(); + bool IsSelected(); void SetSelected(bool Selected); From c377ec0eeff787988254fcf4bac85a9b1b0a8360 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 28 Feb 2013 00:47:46 +0100 Subject: [PATCH 07/31] Added Classes for categorizing, filtering and sorting --- .gitignore | 2 + .../PartyModeChallenge/PartyModeChallenge.cs | 2 +- .../PartyModeChallenge.cs | 4 +- .../PartyModeTicTacToe/PartyModeTicTacToe.cs | 2 +- Vocaluxe/Base/CMain.cs | 8 +- Vocaluxe/Base/CObservable.cs | 21 + Vocaluxe/Base/CSongCategorizer.cs | 173 +++++++ Vocaluxe/Base/CSongFilter.cs | 93 ++++ Vocaluxe/Base/CSongSorter.cs | 201 +++++++++ Vocaluxe/Base/CSongs.cs | 421 ++---------------- Vocaluxe/Screens/CScreenOptionsGame.cs | 23 +- Vocaluxe/Screens/CScreenOptionsTheme.cs | 4 +- Vocaluxe/Screens/CScreenSong.cs | 6 +- Vocaluxe/Vocaluxe.csproj | 4 + VocaluxeLib/Menu/IMenu.cs | 9 +- VocaluxeLib/PartyModes/CPartyModeNone.cs | 2 +- VocaluxeLib/PartyModes/IPartyMode.cs | 2 +- 17 files changed, 566 insertions(+), 411 deletions(-) create mode 100644 Vocaluxe/Base/CObservable.cs create mode 100644 Vocaluxe/Base/CSongCategorizer.cs create mode 100644 Vocaluxe/Base/CSongFilter.cs create mode 100644 Vocaluxe/Base/CSongSorter.cs diff --git a/.gitignore b/.gitignore index 1ea3fff8..7afc1fe5 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,5 @@ Output/Songs *.ipch *.log + +/Output/Playlists/*.xml diff --git a/PartyModes/PartyModeChallenge/PartyModeChallenge.cs b/PartyModes/PartyModeChallenge/PartyModeChallenge.cs index 600024c2..6314434e 100644 --- a/PartyModes/PartyModeChallenge/PartyModeChallenge.cs +++ b/PartyModes/PartyModeChallenge/PartyModeChallenge.cs @@ -153,7 +153,7 @@ namespace Vocaluxe.PartyModes _ScreenSongOptions.Sorting.SearchString = String.Empty; _ScreenSongOptions.Sorting.SearchActive = false; - _ScreenSongOptions.Sorting.ShowDuetSongs = false; + _ScreenSongOptions.Sorting.DuetOptions = EDuetOptions.NoDuets; _Stage = EStage.NotStarted; diff --git a/PartyModes/PartyModeChallengeMedley/PartyModeChallenge.cs b/PartyModes/PartyModeChallengeMedley/PartyModeChallenge.cs index 86d86ee3..441d839a 100644 --- a/PartyModes/PartyModeChallengeMedley/PartyModeChallenge.cs +++ b/PartyModes/PartyModeChallengeMedley/PartyModeChallenge.cs @@ -155,7 +155,7 @@ namespace Vocaluxe.PartyModes _ScreenSongOptions.Sorting.SearchString = String.Empty; _ScreenSongOptions.Sorting.SearchActive = false; - _ScreenSongOptions.Sorting.ShowDuetSongs = false; + _ScreenSongOptions.Sorting.DuetOptions = EDuetOptions.NoDuets; _Stage = EStage.NotStarted; @@ -188,7 +188,7 @@ namespace Vocaluxe.PartyModes ToScreenMain.ResultTable = new List(); GameData.ResultTable = new List(); - CBase.Songs.SortSongs(ESongSorting.TR_CONFIG_NONE, EOffOn.TR_CONFIG_OFF, EOffOn.TR_CONFIG_OFF, String.Empty, false); + CBase.Songs.SortSongs(ESongSorting.TR_CONFIG_NONE, EOffOn.TR_CONFIG_OFF, EOffOn.TR_CONFIG_OFF, String.Empty, EDuetOptions.NoDuets); CBase.Songs.SetCategory(0); return true; diff --git a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs index 6bb9b5de..f2f120f8 100644 --- a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs @@ -168,7 +168,7 @@ namespace Vocaluxe.PartyModes _ScreenSongOptions.Sorting.SearchString = String.Empty; _ScreenSongOptions.Sorting.SearchActive = false; - _ScreenSongOptions.Sorting.ShowDuetSongs = false; + _ScreenSongOptions.Sorting.DuetOptions = EDuetOptions.NoDuets; _Stage = EStage.NotStarted; diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index a77459f6..339eaa39 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -585,12 +585,12 @@ namespace Vocaluxe.Base public EOffOn GetTabs() { - return CSongs.Tabs; + return CSongs.Categorizer.Tabs; } public string GetSearchFilter() { - return CSongs.SearchFilter; + return CSongs.Filter.SearchString; } public void SetCategory(int CategoryIndex) @@ -646,9 +646,9 @@ namespace Vocaluxe.Base CSongs.ResetPartySongSung(CatIndex); } - public void SortSongs(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, String SearchString, bool ShowDuetSongs) + public void SortSongs(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, String SearchString, EDuetOptions DuetOptions) { - CSongs.Sort(Sorting, Tabs, IgnoreArticles, SearchString, ShowDuetSongs); + CSongs.Sort(Sorting, Tabs, IgnoreArticles, SearchString, DuetOptions); } public void NextCategory() diff --git a/Vocaluxe/Base/CObservable.cs b/Vocaluxe/Base/CObservable.cs new file mode 100644 index 00000000..60bfc1bb --- /dev/null +++ b/Vocaluxe/Base/CObservable.cs @@ -0,0 +1,21 @@ +using System; + +namespace Vocaluxe.Base +{ + class CObservable + { + public event EventHandler ObjectChanged = delegate { }; + protected bool _Changed = true; + + protected void NotifyObservers() + { + ObjectChanged.Invoke(this, null); + } + + protected void _SetChanged() + { + _Changed = true; + NotifyObservers(); + } + } +} diff --git a/Vocaluxe/Base/CSongCategorizer.cs b/Vocaluxe/Base/CSongCategorizer.cs new file mode 100644 index 00000000..3a930a87 --- /dev/null +++ b/Vocaluxe/Base/CSongCategorizer.cs @@ -0,0 +1,173 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using Vocaluxe.Menu; +using Vocaluxe.Menu.SongMenu; + +namespace Vocaluxe.Base +{ + class CSongCategorizer : CObservable + { + private List _Categories = new List(); + private EOffOn _Tabs = CConfig.Tabs; + + public CSongCategorizer() + { + CSongs.Filter.ObjectChanged += HandleSortedSongsChanged; + } + + public List Categories + { + get { _FillCategories(); return _Categories; } + } + + public EOffOn Tabs + { + get { return _Tabs; } + set + { + if (value != _Tabs) + { + _Tabs = value; + _SetChanged(); + } + } + } + + private void HandleSortedSongsChanged(object sender, EventArgs args) + { + _SetChanged(); + } + + private void _CreateCategoriesLetter() + { + string category = ""; + int NotLetterCat = -1; + for (int i = 0; i < CSongs.Sorter.SortedSongs.Length; i++) + { + Char firstLetter = Char.ToUpper(CSongs.Sorter.SortedSongs[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)); + + CSongs.Sorter.SortedSongs[i].CatIndex = _Categories.Count - 1; + + if (firstLetter == '#') + NotLetterCat = CSongs.Sorter.SortedSongs[i].CatIndex; + } + else + CSongs.Sorter.SortedSongs[i].CatIndex = NotLetterCat; + } + else + CSongs.Sorter.SortedSongs[i].CatIndex = _Categories.Count - 1; + } + } + + private void _CreateCategoriesNormal(string NoCategoryName) + { + string category = ""; + int NoCategoryIndex = -1; + for (int i = 0; i < CSongs.Sorter.SortedSongs.Length; i++) + { + if (CSongs.Sorter.SortedSongs[i].SortString.Length > 0) + { + if (CSongs.Sorter.SortedSongs[i].SortString != category) + { + category = CSongs.Sorter.SortedSongs[i].SortString; + _Categories.Add(new CCategory(category)); + } + CSongs.Sorter.SortedSongs[i].CatIndex = _Categories.Count - 1; + } + else + { + if (NoCategoryIndex < 0) + { + category = NoCategoryName; + _Categories.Add(new CCategory(category)); + NoCategoryIndex = _Categories.Count - 1; + } + CSongs.Sorter.SortedSongs[i].CatIndex = NoCategoryIndex; + } + } + + } + + private void _CreateCategories() + { + string NoCategoryName = ""; + + ESongSorting Sorting = CSongs.Sorter.SongSorting; + + switch (Sorting) + { + 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 (Sorting == ESongSorting.TR_CONFIG_ARTIST_LETTER || Sorting == ESongSorting.TR_CONFIG_TITLE_LETTER) + _CreateCategoriesLetter(); + else + { + if (Sorting == ESongSorting.TR_CONFIG_DECADE) + for (int i = 0; i < CSongs.Sorter.SortedSongs.Length; i++) + { + string Year = CSongs.Sorter.SortedSongs[i].SortString; + if (Year.Length > 0) + { + Year = Year.Substring(0, 3); + CSongs.Sorter.SortedSongs[i].SortString = Year + "0 - " + Year + "9"; + } + } + _CreateCategoriesNormal(NoCategoryName); + } + } + + private void _FillCategories() + { + if (!_Changed) + return; + + _Categories.Clear(); + + if (_Tabs == EOffOn.TR_CONFIG_OFF) + { + //No categories. So don't create them! + _Categories.Add(new CCategory("")); + for (int i = 0; i < CSongs.Sorter.SortedSongs.Length; i++) + { + CSongs.Sorter.SortedSongs[i].CatIndex = 0; + } + } + else + _CreateCategories(); + + foreach (CCategory cat in _Categories) + { + cat.CoverTextureSmall = CCover.Cover(cat.Name); + } + _Changed = false; + } + } +} diff --git a/Vocaluxe/Base/CSongFilter.cs b/Vocaluxe/Base/CSongFilter.cs new file mode 100644 index 00000000..b3444700 --- /dev/null +++ b/Vocaluxe/Base/CSongFilter.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; + +using Vocaluxe.Menu; +using Vocaluxe.Menu.SongMenu; + +namespace Vocaluxe.Base +{ + class CSongFilter : CObservable + { + private readonly List _FilteredSongs = new List(); + + private String _SearchString = String.Empty; + private EDuetOptions _DuetOptions = EDuetOptions.All; + + public List FilteredSongs + { + get { _FilterSongs(); return _FilteredSongs; } + } + + public String SearchString + { + get { return _SearchString; } + set + { + if (value != _SearchString) + { + _SetChanged(); + _SearchString = value; + } + } + } + + public EDuetOptions DuetOptions + { + get { return _DuetOptions; } + set + { + if (value != _DuetOptions) + { + _SetChanged(); + _DuetOptions = value; + } + } + } + + public void SetOptions(String searchString, EDuetOptions duetOptions) + { + if (searchString != _SearchString || duetOptions != _DuetOptions) + { + _SearchString = searchString; + _DuetOptions = duetOptions; + _SetChanged(); + } + } + + private void _FilterSongs() + { + if (!_Changed) + return; + + _FilteredSongs.Clear(); + + string[] searchStrings = null; + if (_SearchString.Length > 0) + searchStrings = _SearchString.ToUpper().Split(new char[] { ' ' }); + + foreach (CSong song in CSongs.Songs) + { + if ((song.IsDuet && _DuetOptions != EDuetOptions.NoDuets) || (!song.IsDuet && _DuetOptions != EDuetOptions.Duets)) + { + if (searchStrings == null) + _FilteredSongs.Add(song); + else + { + 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); + } + } + } + _Changed = false; + } + + } +} \ No newline at end of file diff --git a/Vocaluxe/Base/CSongSorter.cs b/Vocaluxe/Base/CSongSorter.cs new file mode 100644 index 00000000..b58b3bfe --- /dev/null +++ b/Vocaluxe/Base/CSongSorter.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Reflection; + +using Vocaluxe.Menu; +using Vocaluxe.Menu.SongMenu; + +namespace Vocaluxe.Base +{ + class CSongSorter:CObservable + { + private SongPointer[] _SortedSongs = new SongPointer[0]; + private EOffOn _IgnoreArticles = CConfig.IgnoreArticles; + private ESongSorting _SongSorting = CConfig.SongSorting; + + public CSongSorter() + { + CSongs.Filter.ObjectChanged += HandleFilteredSongsChanged; + } + + public SongPointer[] SortedSongs + { + get { _SortSongs(); return _SortedSongs; } + } + + public EOffOn IgnoreArticles + { + get { return _IgnoreArticles; } + set + { + if (value != _IgnoreArticles) + { + _IgnoreArticles = value; + _SetChanged(); + } + } + } + + public ESongSorting SongSorting + { + get { return _SongSorting; } + set + { + if (value != _SongSorting) + { + _SongSorting = value; + _SetChanged(); + } + } + } + + public void SetOptions(ESongSorting songSorting, EOffOn ignoreArticles) + { + if (songSorting != _SongSorting || ignoreArticles != _IgnoreArticles) + { + _SongSorting = songSorting; + _IgnoreArticles = ignoreArticles; + _SetChanged(); + } + } + + private void HandleFilteredSongsChanged(object sender, EventArgs args) + { + _SetChanged(); + } + + private 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 = CSongs.Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(CSongs.Songs[s2.SongID].ArtistSorting.ToUpper()); + if (res == 0) + { + return CSongs.Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(CSongs.Songs[s2.SongID].TitleSorting.ToUpper()); + } + return res; + } + else + { + res = CSongs.Songs[s1.SongID].Artist.ToUpper().CompareTo(CSongs.Songs[s2.SongID].Artist.ToUpper()); + if (res == 0) + { + return CSongs.Songs[s1.SongID].Title.ToUpper().CompareTo(CSongs.Songs[s2.SongID].Title.ToUpper()); + } + return res; + } + } + return res; + } + + private 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 CSongs.Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(CSongs.Songs[s2.SongID].TitleSorting.ToUpper()); + else + return CSongs.Songs[s1.SongID].Title.ToUpper().CompareTo(CSongs.Songs[s2.SongID].Title.ToUpper()); + } + return res; + } + + private List _CreateSortList(string fieldName) + { + FieldInfo field = null; + bool isString = false; + List SortList = new List(); + if (fieldName.Length == 0) + CSongs.Filter.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 CSongs.Filter.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 void _SortSongs() + { + if (!_Changed) + return; + 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; + } + _SortedSongs = SortList.ToArray(); + _Changed = false; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 7ef5a4ba..93527f8a 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -1,14 +1,9 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Globalization; -using System.IO; using System.Text; -using System.Text.RegularExpressions; -using System.Threading; using System.Reflection; -using Vocaluxe.Lib.Draw; using Vocaluxe.Menu; using Vocaluxe.Menu.SongMenu; @@ -37,8 +32,6 @@ 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 bool _SongsLoaded = false; @@ -46,41 +39,17 @@ namespace Vocaluxe.Base private static int _CoverLoadIndex = 0; private static int _CatIndex = -1; private static bool _Init = false; - private static List _Categories = new List(); private static List _CategoriesForRandom = new List(); private static Stopwatch _CoverLoadTimer = new Stopwatch(); - private static string _SearchFilter = String.Empty; - private static EOffOn _Tabs = CConfig.Tabs; - private static EOffOn _IgnoreArticles = CConfig.IgnoreArticles; - private static ESongSorting _SongSorting = CConfig.SongSorting; - private static bool _ShowDuetSongs = true; - - public static string SearchFilter - { - get { return _SearchFilter; } - set - { - if (value.Length > 0) - { - _Sort(_SongSorting, EOffOn.TR_CONFIG_OFF, _IgnoreArticles, value, false, _ShowDuetSongs); - } - else - { - _Sort(_SongSorting, _Tabs, _IgnoreArticles, value, false, _ShowDuetSongs); - } - } - } + public static CSongFilter Filter = new CSongFilter(); + public static CSongSorter Sorter = new CSongSorter(); + public static CSongCategorizer Categorizer = new CSongCategorizer(); - public static EOffOn Tabs + public static List Songs { - get { return _Tabs; } - } - - public static EOffOn IgnoreArticles - { - get { return _IgnoreArticles; } + get { return _Songs; } } public static bool SongsLoaded @@ -108,7 +77,7 @@ namespace Vocaluxe.Base get { int Result = 0; - foreach (SongPointer sp in _SongsSortList) + foreach (SongPointer sp in Sorter.SortedSongs) { if (sp.Visible) Result++; @@ -119,7 +88,7 @@ namespace Vocaluxe.Base public static int NumCategories { - get { return _Categories.Count; } + get { return Categorizer.Categories.Count; } } public static int Category @@ -127,13 +96,13 @@ namespace Vocaluxe.Base get { return _CatIndex; } set { - if ((_Categories.Count > value) && (value >= -1)) + if (value >= -1 && value < Categorizer.Categories.Count) { _CatIndex = value; - for (int i = 0; i < _SongsSortList.Length; i++) + for (int i = 0; i < Sorter.SortedSongs.Length; i++) { - _SongsSortList[i].Visible = (_SongsSortList[i].CatIndex == _CatIndex && !_SongsSortList[i].PartyHidden); + Sorter.SortedSongs[i].Visible = (Sorter.SortedSongs[i].CatIndex == _CatIndex && !Sorter.SortedSongs[i].PartyHidden); } } } @@ -146,13 +115,13 @@ namespace Vocaluxe.Base /// public static int NumSongsInCategory(int CatIndex) { - if (_Categories.Count <= CatIndex || CatIndex < 0) + if (Categorizer.Categories.Count <= CatIndex || CatIndex < 0) return 0; int num = 0; - for (int i = 0; i < _SongsSortList.Length; i++) + for (int i = 0; i < Sorter.SortedSongs.Length; i++) { - if (_SongsSortList[i].CatIndex == CatIndex && !_SongsSortList[i].PartyHidden) + if (Sorter.SortedSongs[i].CatIndex == CatIndex && !Sorter.SortedSongs[i].PartyHidden) num++; } return num; @@ -160,7 +129,7 @@ namespace Vocaluxe.Base public static void NextCategory() { - if (Category == _Categories.Count - 1) + if (Category == Categorizer.Categories.Count - 1) Category = 0; else Category++; @@ -168,7 +137,7 @@ namespace Vocaluxe.Base public static void PrevCategory() { if (Category == 0) - Category = _Categories.Count - 1; + Category = Categorizer.Categories.Count - 1; else Category--; } @@ -213,8 +182,8 @@ namespace Vocaluxe.Base public static string GetCurrentCategoryName() { - if ((_Categories.Count > 0) && (_CatIndex >= 0) && (_Categories.Count > _CatIndex)) - return _Categories[_CatIndex].Name; + if ((Categorizer.Categories.Count > 0) && (_CatIndex >= 0) && (Categorizer.Categories.Count > _CatIndex)) + return Categorizer.Categories[_CatIndex].Name; else return String.Empty; } @@ -232,13 +201,13 @@ namespace Vocaluxe.Base public static void AddPartySongSung(int SongID) { int cat = -1; - for (int i = 0; i < _SongsSortList.Length; i++) + for (int i = 0; i < Sorter.SortedSongs.Length; i++) { - if (SongID == _SongsSortList[i].SongID) + if (SongID == Sorter.SortedSongs[i].SongID) { - _SongsSortList[i].PartyHidden = true; - _SongsSortList[i].Visible = false; - cat = _SongsSortList[i].CatIndex; + Sorter.SortedSongs[i].PartyHidden = true; + Sorter.SortedSongs[i].Visible = false; + cat = Sorter.SortedSongs[i].CatIndex; break; } } @@ -252,21 +221,21 @@ namespace Vocaluxe.Base public static void ResetPartySongSung() { - for (int i = 0; i < _SongsSortList.Length; i++) + for (int i = 0; i < Sorter.SortedSongs.Length; i++) { - _SongsSortList[i].PartyHidden = false; - _SongsSortList[i].Visible = (_SongsSortList[i].CatIndex == _CatIndex && !_SongsSortList[i].PartyHidden); + Sorter.SortedSongs[i].PartyHidden = false; + Sorter.SortedSongs[i].Visible = (Sorter.SortedSongs[i].CatIndex == _CatIndex && !Sorter.SortedSongs[i].PartyHidden); } } public static void ResetPartySongSung(int CatIndex) { - for (int i = 0; i < _SongsSortList.Length; i++) + for (int i = 0; i < Sorter.SortedSongs.Length; i++) { - if (_SongsSortList[i].CatIndex == CatIndex) + if (Sorter.SortedSongs[i].CatIndex == CatIndex) { - _SongsSortList[i].PartyHidden = false; - _SongsSortList[i].Visible = (_SongsSortList[i].CatIndex == _CatIndex && !_SongsSortList[i].PartyHidden); + Sorter.SortedSongs[i].PartyHidden = false; + Sorter.SortedSongs[i].Visible = (Sorter.SortedSongs[i].CatIndex == _CatIndex && !Sorter.SortedSongs[i].PartyHidden); } } } @@ -343,7 +312,7 @@ namespace Vocaluxe.Base get { List songs = new List(); - foreach (SongPointer sp in _SongsSortList) + foreach (SongPointer sp in Sorter.SortedSongs) { if (sp.Visible) songs.Add(_Songs[sp.SongID]); @@ -357,7 +326,7 @@ namespace Vocaluxe.Base get { List songs = new List(); - foreach (SongPointer sp in _SongsSortList) + foreach (SongPointer sp in Sorter.SortedSongs) { if (sp.Visible) songs.Add(_Songs[sp.SongID]); @@ -368,7 +337,7 @@ namespace Vocaluxe.Base public static CCategory[] Categories { - get { return _Categories.ToArray(); } + get { return Categorizer.Categories.ToArray(); } } public static CSong GetVisibleSongByIndex(int index) @@ -376,7 +345,7 @@ namespace Vocaluxe.Base if (index < 0) return null; - foreach (SongPointer sp in _SongsSortList) + foreach (SongPointer sp in Sorter.SortedSongs) { if (sp.Visible) { @@ -388,320 +357,19 @@ namespace Vocaluxe.Base return null; } - private static void _FilterSongs(String SearchFilter, bool ShowDuetSongs) + private static void HandleCategoriesChanged(object sender, EventArgs args) { - if (_Init && _SearchFilter == SearchFilter && _ShowDuetSongs == ShowDuetSongs) - return; - - _Init = true; - _SearchFilter = SearchFilter; - _ShowDuetSongs = ShowDuetSongs; - _FilteredSongs.Clear(); - - string[] searchStrings = null; - if (_SearchFilter.Length > 0) - searchStrings = _SearchFilter.ToUpper().Split(new char[] { ' ' }); - - foreach (CSong song in _Songs) - { - if (!song.IsDuet || _ShowDuetSongs) - { - if (_SearchFilter.Length == 0) - _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.Length == 0) - _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.Length > 0) - { - 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); - } - - public static void Sort(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, String SearchString, bool ShowDuetSongs) - { - _Sort(Sorting, Tabs, IgnoreArticles, SearchString, false, ShowDuetSongs); - } - - private static void _Sort(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, string SearchString, bool force, bool ShowDuetSongs) - { - if (_Songs.Count == 0) - return; - - if (!force && Sorting == _SongSorting && Tabs == _Tabs && IgnoreArticles == _IgnoreArticles && SearchString == _SearchFilter && ShowDuetSongs == _ShowDuetSongs) - return; //nothing to do - - _IgnoreArticles = IgnoreArticles; - _SongSorting = Sorting; - _Tabs = Tabs; - - _FilterSongs(SearchString, ShowDuetSongs); - SortSongs(); - _Categories.Clear(); - - if (_Tabs == EOffOn.TR_CONFIG_OFF) - { - //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) - { - cat.CoverTextureSmall = CCover.Cover(cat.Name); - } + _CategoriesForRandom.Clear(); Category = _CatIndex; } + public static void Sort(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, String SearchString, EDuetOptions DuetOptions) + { + Filter.SetOptions(SearchString, DuetOptions); + Sorter.SetOptions(Sorting, IgnoreArticles); + Categorizer.Tabs = Tabs; + } + public static void LoadSongs() { CLog.StartBenchmark(1, "Load Songs"); @@ -734,7 +402,10 @@ namespace Vocaluxe.Base CLog.StopBenchmark(2, "Read TXTs"); CLog.StartBenchmark(2, "Sort Songs"); - _Sort(CConfig.SongSorting, CConfig.Tabs, CConfig.IgnoreArticles, String.Empty, true, true); + Sorter.SongSorting = CConfig.SongSorting; + Sorter.IgnoreArticles = CConfig.IgnoreArticles; + Categorizer.Tabs = CConfig.Tabs; + Categorizer.ObjectChanged += HandleCategoriesChanged; CLog.StopBenchmark(2, "Sort Songs"); Category = -1; _SongsLoaded = true; diff --git a/Vocaluxe/Screens/CScreenOptionsGame.cs b/Vocaluxe/Screens/CScreenOptionsGame.cs index b2c597ce..3bb48d0d 100644 --- a/Vocaluxe/Screens/CScreenOptionsGame.cs +++ b/Vocaluxe/Screens/CScreenOptionsGame.cs @@ -24,9 +24,6 @@ namespace Vocaluxe.Screens private const string ButtonExit = "ButtonExit"; - private ESongSorting _SongSortingOld; - private EOffOn _TabsOld; - private string _LanguageOld; private string[] _Languages; private int _CurrentLang = -1; @@ -133,15 +130,6 @@ namespace Vocaluxe.Screens return true; } - public override void OnShow() - { - base.OnShow(); - - _SongSortingOld = CConfig.SongSorting; - _TabsOld = CConfig.Tabs; - _LanguageOld = CConfig.Language; - } - public override bool UpdateGame() { return true; @@ -164,17 +152,10 @@ namespace Vocaluxe.Screens CConfig.SaveConfig(); - if (_SongSortingOld != CConfig.SongSorting || _TabsOld != CConfig.Tabs || _LanguageOld != CConfig.Language) - { - CSongs.Sort(CConfig.SongSorting, CConfig.Tabs, CConfig.IgnoreArticles, String.Empty); - CSongs.Category = -1; - } + CSongs.Sorter.SongSorting = CConfig.SongSorting; + CSongs.Categorizer.Tabs = CConfig.Tabs; CLanguage.SetLanguage(CConfig.Language); - - _SongSortingOld = CConfig.SongSorting; - _TabsOld = CConfig.Tabs; - _LanguageOld = CConfig.Language; } } } diff --git a/Vocaluxe/Screens/CScreenOptionsTheme.cs b/Vocaluxe/Screens/CScreenOptionsTheme.cs index 53fa7aa0..57d41052 100644 --- a/Vocaluxe/Screens/CScreenOptionsTheme.cs +++ b/Vocaluxe/Screens/CScreenOptionsTheme.cs @@ -178,7 +178,9 @@ namespace Vocaluxe.Screens if (_OldCoverTheme != SelectSlides[htSelectSlides(SelectSlideCover)].Selection) { CCover.ReloadCover(); - CSongs.Sort(CConfig.SongSorting, CConfig.Tabs, CConfig.IgnoreArticles, String.Empty); + CSongs.Filter.SearchString = String.Empty; + CSongs.Sorter.SetOptions(CConfig.SongSorting, CConfig.IgnoreArticles); + CSongs.Categorizer.Tabs = CConfig.Tabs; } if (_OldTheme != SelectSlides[htSelectSlides(SelectSlideTheme)].Selection) diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index ecbfdad2..a70f217d 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -674,7 +674,7 @@ namespace Vocaluxe.Screens SelectedCategoryIndex = -2; _sso = CParty.GetSongSelectionOptions(); - CSongs.Sort(_sso.Sorting.SongSorting, _sso.Sorting.Tabs, _sso.Sorting.IgnoreArticles, _sso.Sorting.SearchString, _sso.Sorting.ShowDuetSongs); + CSongs.Sort(_sso.Sorting.SongSorting, _sso.Sorting.Tabs, _sso.Sorting.IgnoreArticles, _sso.Sorting.SearchString, _sso.Sorting.DuetOptions); _SearchActive = _sso.Sorting.SearchActive; _SearchText = _sso.Sorting.SearchString; @@ -807,7 +807,7 @@ namespace Vocaluxe.Screens if (_sso.Selection.PartyMode) { - CSongs.Sort(_sso.Sorting.SongSorting, _sso.Sorting.Tabs, _sso.Sorting.IgnoreArticles, _sso.Sorting.SearchString, _sso.Sorting.ShowDuetSongs); + CSongs.Sort(_sso.Sorting.SongSorting, _sso.Sorting.Tabs, _sso.Sorting.IgnoreArticles, _sso.Sorting.SearchString, _sso.Sorting.DuetOptions); _SearchActive = _sso.Sorting.SearchActive; _SearchText = _sso.Sorting.SearchString; @@ -1117,7 +1117,7 @@ namespace Vocaluxe.Screens refresh = true; } - CSongs.Sort(_sso.Sorting.SongSorting, _sso.Sorting.Tabs, _sso.Sorting.IgnoreArticles, NewFilterString, _sso.Sorting.ShowDuetSongs); + CSongs.Sort(_sso.Sorting.SongSorting, _sso.Sorting.Tabs, _sso.Sorting.IgnoreArticles, NewFilterString, _sso.Sorting.DuetOptions); if (SongID == -1 || CSongs.NumVisibleSongs == 0 || CSongs.NumVisibleSongs <= SongIndex || CSongs.VisibleSongs[SongIndex].ID != SongID) refresh = true; diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 062512ba..b546ebad 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -182,9 +182,13 @@ + + + + diff --git a/VocaluxeLib/Menu/IMenu.cs b/VocaluxeLib/Menu/IMenu.cs index 8fb425db..87261c52 100644 --- a/VocaluxeLib/Menu/IMenu.cs +++ b/VocaluxeLib/Menu/IMenu.cs @@ -248,7 +248,7 @@ namespace Vocaluxe.Menu void ResetPartySongSung(); void ResetPartySongSung(int CatIndex); - void SortSongs(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, String SearchString, bool ShowDuetSongs); + void SortSongs(ESongSorting Sorting, EOffOn Tabs, EOffOn IgnoreArticles, String SearchString, EDuetOptions DuetOptions); void NextCategory(); void PrevCategory(); @@ -667,6 +667,13 @@ namespace Vocaluxe.Menu //TR_CONFIG_BOOK //for playlists } + public enum EDuetOptions + { + All, + Duets, + NoDuets + } + public enum ESongSorting { TR_CONFIG_NONE, diff --git a/VocaluxeLib/PartyModes/CPartyModeNone.cs b/VocaluxeLib/PartyModes/CPartyModeNone.cs index 10d33c7c..df073bc6 100644 --- a/VocaluxeLib/PartyModes/CPartyModeNone.cs +++ b/VocaluxeLib/PartyModes/CPartyModeNone.cs @@ -20,7 +20,7 @@ namespace Vocaluxe.PartyModes _ScreenSongOptions.Sorting.SearchString = String.Empty; _ScreenSongOptions.Sorting.SearchActive = false; - _ScreenSongOptions.Sorting.ShowDuetSongs = true; + _ScreenSongOptions.Sorting.DuetOptions = EDuetOptions.All; } public override ScreenSongOptions GetScreenSongOptions() diff --git a/VocaluxeLib/PartyModes/IPartyMode.cs b/VocaluxeLib/PartyModes/IPartyMode.cs index 99c3e532..7b4289c3 100644 --- a/VocaluxeLib/PartyModes/IPartyMode.cs +++ b/VocaluxeLib/PartyModes/IPartyMode.cs @@ -20,7 +20,7 @@ namespace Vocaluxe.PartyModes public EOffOn IgnoreArticles; public string SearchString; public bool SearchActive; - public bool ShowDuetSongs; + public EDuetOptions DuetOptions; } /// From 38a7a2208ef88c78e086df6f134bb7796e2b672a Mon Sep 17 00:00:00 2001 From: Michael W Date: Sun, 3 Mar 2013 14:38:31 +0100 Subject: [PATCH 08/31] fixed fading bug --- GstreamerHelper/GstreamerAudioStream.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GstreamerHelper/GstreamerAudioStream.cpp b/GstreamerHelper/GstreamerAudioStream.cpp index 6dd00bf9..8b2217db 100644 --- a/GstreamerHelper/GstreamerAudioStream.cpp +++ b/GstreamerHelper/GstreamerAudioStream.cpp @@ -220,14 +220,14 @@ void GstreamerAudioStream::FadeAndPause(float TargetVolume, float Seconds) { PauseStreamAfterFade = true; - Fade(TargetVolume, FadeTime); + Fade(TargetVolume, Seconds); } void GstreamerAudioStream::FadeAndStop(float TargetVolume, float Seconds) { CloseStreamAfterFade = true; - Fade(TargetVolume, FadeTime); + Fade(TargetVolume, Seconds); } bool GstreamerAudioStream::IsPlaying() From 93f2866ead6d4ff4c00979b0e7957401876a61a6 Mon Sep 17 00:00:00 2001 From: Michael W Date: Sun, 3 Mar 2013 19:31:28 +0100 Subject: [PATCH 09/31] fixed duet lyrics disappearing when cycling player info display --- Vocaluxe/Screens/CScreenSing.cs | 44 +++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 0273cc9a..9715258a 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -210,6 +210,8 @@ namespace Vocaluxe.Screens CConfig.PlayerInfo = (EPlayerInfo)mode; CConfig.SaveConfig(); SetVisibility(); + if (CGame.GetSong() != null) + SetDuetLyricsVisibility(CGame.GetSong().IsDuet); //make sure duet lyrics remain visible break; case Keys.S: @@ -635,7 +637,7 @@ namespace Vocaluxe.Screens SingNotes[htSingNotes(SingBars)].Reset(); - bool LyricsOnTop = (CGame.NumPlayer != 1) && CConfig.LyricsOnTop == EOffOn.TR_CONFIG_ON; + if (song.IsDuet) { Texts[htTexts(TextDuetName1)].Text = song.DuetPart1; @@ -659,24 +661,9 @@ namespace Vocaluxe.Screens CGame.Player[i].LineNr = duet_player[i]; } } - Statics[htStatics(StaticLyricsDuet)].Visible = true; - Lyrics[htLyrics(LyricMainDuet)].Visible = true; - Lyrics[htLyrics(LyricSubDuet)].Visible = true; - - Lyrics[htLyrics(LyricMainTop)].Visible = false; - Lyrics[htLyrics(LyricSubTop)].Visible = false; - Statics[htStatics(StaticLyricsTop)].Visible = false; - } - else - { - Statics[htStatics(StaticLyricsDuet)].Visible = false; - Lyrics[htLyrics(LyricMainDuet)].Visible = false; - Lyrics[htLyrics(LyricSubDuet)].Visible = false; - - Lyrics[htLyrics(LyricMainTop)].Visible = LyricsOnTop; - Lyrics[htLyrics(LyricSubTop)].Visible = LyricsOnTop; - Statics[htStatics(StaticLyricsTop)].Visible = LyricsOnTop; + } + SetDuetLyricsVisibility(song.IsDuet); for (int p = 0; p < CGame.NumPlayer; p++) { @@ -711,6 +698,27 @@ namespace Vocaluxe.Screens StartSong(); } + private void SetDuetLyricsVisibility(bool isDuet) + { + Statics[htStatics(StaticLyricsDuet)].Visible = isDuet; + Lyrics[htLyrics(LyricMainDuet)].Visible = isDuet; + Lyrics[htLyrics(LyricSubDuet)].Visible = isDuet; + + if (isDuet) + { + Lyrics[htLyrics(LyricMainTop)].Visible = false; + Lyrics[htLyrics(LyricSubTop)].Visible = false; + Statics[htStatics(StaticLyricsTop)].Visible = false; + } + else + { + bool LyricsOnTop = (CGame.NumPlayer != 1) && CConfig.LyricsOnTop == EOffOn.TR_CONFIG_ON; + Lyrics[htLyrics(LyricMainTop)].Visible = LyricsOnTop; + Lyrics[htLyrics(LyricSubTop)].Visible = LyricsOnTop; + Statics[htStatics(StaticLyricsTop)].Visible = LyricsOnTop; + } + } + private void StartSong() { PrepareTimeLine(); From 4fb6ff19f747e235447ec6a53b2de438cc9e3991 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 13 Mar 2013 15:05:32 +0100 Subject: [PATCH 10/31] Bugfix --- Vocaluxe/Base/CSongSorter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vocaluxe/Base/CSongSorter.cs b/Vocaluxe/Base/CSongSorter.cs index b58b3bfe..2160b0c7 100644 --- a/Vocaluxe/Base/CSongSorter.cs +++ b/Vocaluxe/Base/CSongSorter.cs @@ -112,7 +112,7 @@ namespace Vocaluxe.Base List SortList = new List(); if (fieldName.Length == 0) CSongs.Filter.FilteredSongs.ForEach((song) => SortList.Add(new SongPointer(song.ID, ""))); - { + else{ 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)) From da889c9d400b5c91b211944b81fe4f00d6e3e480 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 14 Mar 2013 00:16:41 +0100 Subject: [PATCH 11/31] Removed duplicate code in CMenu --- .gitignore | 13 + Output/x64/gstreamer/GstreamerHelper.dll | Bin 215040 -> 0 bytes .../PartyScreenChallengeConfig.cs | 32 +- .../PartyScreenChallengeMain.cs | 132 +-- .../PartyScreenChallengeNames.cs | 38 +- .../PartyScreenChallengeConfig.cs | 32 +- .../PartyScreenChallengeMain.cs | 132 +-- .../PartyScreenChallengeNames.cs | 38 +- .../PartyScreenTicTacToeConfig.cs | 82 +- .../PartyScreenTicTacToeMain.cs | 196 ++-- .../PartyScreenTicTacToeNames.cs | 58 +- Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs | 2 +- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 54 +- Vocaluxe/Screens/CPopupScreenVolumeControl.cs | 36 +- Vocaluxe/Screens/CScreenHighscore.cs | 44 +- Vocaluxe/Screens/CScreenLoad.cs | 4 +- Vocaluxe/Screens/CScreenMain.cs | 20 +- Vocaluxe/Screens/CScreenNames.cs | 208 ++-- Vocaluxe/Screens/CScreenOptions.cs | 24 +- Vocaluxe/Screens/CScreenOptionsGame.cs | 30 +- Vocaluxe/Screens/CScreenOptionsLyrics.cs | 12 +- Vocaluxe/Screens/CScreenOptionsRecord.cs | 152 +-- Vocaluxe/Screens/CScreenOptionsSound.cs | 38 +- Vocaluxe/Screens/CScreenOptionsTheme.cs | 60 +- Vocaluxe/Screens/CScreenOptionsVideo.cs | 92 +- Vocaluxe/Screens/CScreenParty.cs | 58 +- Vocaluxe/Screens/CScreenProfiles.cs | 188 ++-- Vocaluxe/Screens/CScreenScore.cs | 72 +- Vocaluxe/Screens/CScreenSing.cs | 398 ++++---- Vocaluxe/Screens/CScreenSong.cs | 428 ++++----- VocaluxeLib/Menu/CMenu.cs | 886 +++++------------- 31 files changed, 1595 insertions(+), 1964 deletions(-) delete mode 100644 Output/x64/gstreamer/GstreamerHelper.dll diff --git a/.gitignore b/.gitignore index 7afc1fe5..9d4f0d80 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,16 @@ Output/Songs *.log /Output/Playlists/*.xml +/Output/x64/gstreamer/GstreamerHelper.dll +*.tlog +*.suo +*.obj +*.lastbuildstate +*.pch +*.idb +*.exp + +*.ilk +*.lib +*.opensdf +*.sdf diff --git a/Output/x64/gstreamer/GstreamerHelper.dll b/Output/x64/gstreamer/GstreamerHelper.dll deleted file mode 100644 index c647f7a171ccfbc413dae1e9590db078d2958b28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215040 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
  • Ep!FnUz!q{7@s|n# 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 ZtP8dV6|=#(l@mt(jYME10{ 1) + if (Buttons[ButtonExit].Selected && GameState.CurrentRoundNr > 1) ShowPopup(true); - if (Buttons[htButtons(ButtonPlayerScrollUp)].Selected) + if (Buttons[ButtonPlayerScrollUp].Selected) ScrollPlayerTable(-1); - if (Buttons[htButtons(ButtonPlayerScrollDown)].Selected) + if (Buttons[ButtonPlayerScrollDown].Selected) ScrollPlayerTable(1); - if (Buttons[htButtons(ButtonRoundsScrollUp)].Selected) + if (Buttons[ButtonRoundsScrollUp].Selected) ScrollRoundsTable(-1); - if (Buttons[htButtons(ButtonRoundsScrollDown)].Selected) + if (Buttons[ButtonRoundsScrollDown].Selected) ScrollRoundsTable(1); } else { - if (Buttons[htButtons(ButtonPopupYes)].Selected) + if (Buttons[ButtonPopupYes].Selected) EndParty(); - if (Buttons[htButtons(ButtonPopupNo)].Selected) + if (Buttons[ButtonPopupNo].Selected) ShowPopup(false); } break; @@ -189,26 +189,26 @@ namespace Vocaluxe.PartyModes { if (!ExitPopupVisible) { - if (Buttons[htButtons(ButtonNextRound)].Selected) + if (Buttons[ButtonNextRound].Selected) NextRound(); - if (Buttons[htButtons(ButtonBack)].Selected && GameState.CurrentRoundNr == 1) + if (Buttons[ButtonBack].Selected && GameState.CurrentRoundNr == 1) Back(); - if (Buttons[htButtons(ButtonExit)].Selected && GameState.CurrentRoundNr > 1) + if (Buttons[ButtonExit].Selected && GameState.CurrentRoundNr > 1) ShowPopup(true); - if (Buttons[htButtons(ButtonPlayerScrollUp)].Selected) + if (Buttons[ButtonPlayerScrollUp].Selected) ScrollPlayerTable(-1); - if (Buttons[htButtons(ButtonPlayerScrollDown)].Selected) + if (Buttons[ButtonPlayerScrollDown].Selected) ScrollPlayerTable(1); - if (Buttons[htButtons(ButtonRoundsScrollUp)].Selected) + if (Buttons[ButtonRoundsScrollUp].Selected) ScrollRoundsTable(-1); - if (Buttons[htButtons(ButtonRoundsScrollDown)].Selected) + if (Buttons[ButtonRoundsScrollDown].Selected) ScrollRoundsTable(1); } else { - if (Buttons[htButtons(ButtonPopupYes)].Selected) + if (Buttons[ButtonPopupYes].Selected) EndParty(); - if (Buttons[htButtons(ButtonPopupNo)].Selected) + if (Buttons[ButtonPopupNo].Selected) ShowPopup(false); } } @@ -253,29 +253,29 @@ namespace Vocaluxe.PartyModes if (GameState.CurrentRoundNr == 1) { - Buttons[htButtons(ButtonBack)].Visible = true; - Buttons[htButtons(ButtonExit)].Visible = false; + Buttons[ButtonBack].Visible = true; + Buttons[ButtonExit].Visible = false; } else { - Buttons[htButtons(ButtonBack)].Visible = false; - Buttons[htButtons(ButtonExit)].Visible = true; + Buttons[ButtonBack].Visible = false; + Buttons[ButtonExit].Visible = true; } if (GameState.CurrentRoundNr <= GameState.Combs.Count) { - Buttons[htButtons(ButtonNextRound)].Visible = true; - Texts[htTexts(TextFinishMessage)].Visible = false; - Texts[htTexts(TextFinishPlayerWin)].Visible = false; - SetInteractionToButton(Buttons[htButtons(ButtonNextRound)]); + Buttons[ButtonNextRound].Visible = true; + Texts[TextFinishMessage].Visible = false; + Texts[TextFinishPlayerWin].Visible = false; + SetInteractionToButton(Buttons[ButtonNextRound]); } else { - Buttons[htButtons(ButtonNextRound)].Visible = false; - Texts[htTexts(TextFinishMessage)].Visible = true; - Texts[htTexts(TextFinishPlayerWin)].Visible = true; - Texts[htTexts(TextFinishPlayerWin)].Text = GetPlayerWinString(); - SetInteractionToButton(Buttons[htButtons(ButtonExit)]); + Buttons[ButtonNextRound].Visible = false; + Texts[TextFinishMessage].Visible = true; + Texts[TextFinishPlayerWin].Visible = true; + Texts[TextFinishPlayerWin].Text = GetPlayerWinString(); + SetInteractionToButton(Buttons[ButtonExit]); } ShowPopup(false); @@ -313,13 +313,13 @@ namespace Vocaluxe.PartyModes { ExitPopupVisible = Visible; - Statics[htStatics(StaticPopupBG)].Visible = ExitPopupVisible; - Texts[htTexts(TextPopupReallyExit)].Visible = ExitPopupVisible; - Buttons[htButtons(ButtonPopupYes)].Visible = ExitPopupVisible; - Buttons[htButtons(ButtonPopupNo)].Visible = ExitPopupVisible; + Statics[StaticPopupBG].Visible = ExitPopupVisible; + Texts[TextPopupReallyExit].Visible = ExitPopupVisible; + Buttons[ButtonPopupYes].Visible = ExitPopupVisible; + Buttons[ButtonPopupNo].Visible = ExitPopupVisible; if (ExitPopupVisible) - SetInteractionToButton(Buttons[htButtons(ButtonPopupNo)]); + SetInteractionToButton(Buttons[ButtonPopupNo]); } private void Back() @@ -331,7 +331,7 @@ namespace Vocaluxe.PartyModes private void UpdateNextPlayerPositions() { - float x = CBase.Settings.GetRenderW()/2 - ((GameState.NumPlayerAtOnce * Statics[htStatics(StaticNextPlayer)].Rect.W) + ((GameState.NumPlayerAtOnce-1) * 15))/2; + float x = CBase.Settings.GetRenderW()/2 - ((GameState.NumPlayerAtOnce * Statics[StaticNextPlayer].Rect.W) + ((GameState.NumPlayerAtOnce-1) * 15))/2; float static_y = 590; float text_y = 550; for (int i = 0; i < GameState.NumPlayerAtOnce; i++) @@ -341,11 +341,11 @@ namespace Vocaluxe.PartyModes NextPlayerStatics[i].Rect.Y = static_y; NextPlayerStatics[i].Visible = true; //text - NextPlayerTexts[i].X = x + Statics[htStatics(StaticNextPlayer)].Rect.W / 2; + NextPlayerTexts[i].X = x + Statics[StaticNextPlayer].Rect.W / 2; NextPlayerTexts[i].Y = text_y; NextPlayerTexts[i].Visible = true; - x += Statics[htStatics(StaticNextPlayer)].Rect.W + 15; + x += Statics[StaticNextPlayer].Rect.W + 15; } for (int i = GameState.NumPlayerAtOnce; i < _PartyMode.GetMaxPlayer(); i++) { @@ -358,7 +358,7 @@ namespace Vocaluxe.PartyModes { if (GameState.CurrentRoundNr <= GameState.Combs.Count) { - Texts[htTexts(TextNextPlayerMessage)].Visible = true; + Texts[TextNextPlayerMessage].Visible = true; SProfile[] profiles = CBase.Profiles.GetProfiles(); for (int i = 0; i < GameState.NumPlayerAtOnce; i++) { @@ -370,7 +370,7 @@ namespace Vocaluxe.PartyModes } else { - Texts[htTexts(TextNextPlayerMessage)].Visible = false; + Texts[TextNextPlayerMessage].Visible = false; for (int i = 0; i < GameState.NumPlayerAtOnce; i++) { NextPlayerStatics[i].Visible = false; @@ -394,7 +394,7 @@ namespace Vocaluxe.PartyModes for (int round = 0; round < RoundsTable.Count; round++) { //Round-number - CText text = GetNewText(Texts[htTexts(TextRoundNumber)]); + CText text = GetNewText(Texts[TextRoundNumber]); AddText(text); RoundsTable[round].Number = text; for (int row = 0; row < 2; row++) @@ -402,11 +402,11 @@ namespace Vocaluxe.PartyModes for (int column = 0; column < 3; column++) { //Player - text = GetNewText(Texts[htTexts(TextRoundPlayer)]); + text = GetNewText(Texts[TextRoundPlayer]); AddText(text); RoundsTable[round].TextPlayer.Add(text); //Score - text = GetNewText(Texts[htTexts(TextRoundScore)]); + text = GetNewText(Texts[TextRoundScore]); AddText(text); RoundsTable[round].TextScores.Add(text); } @@ -427,14 +427,14 @@ namespace Vocaluxe.PartyModes if (NumRoundsVisible > GameState.Combs.Count) NumRoundsVisible = GameState.Combs.Count; - float x = Texts[htTexts(TextRoundNumber)].X; - float y = Texts[htTexts(TextRoundNumber)].Y; + float x = Texts[TextRoundNumber].X; + float y = Texts[TextRoundNumber].Y; RoundsTableScrollArea.X = x; RoundsTableScrollArea.Y = y; - RoundsTableScrollArea.W = CBase.Settings.GetRenderW() - Texts[htTexts(TextRoundNumber)].X - 20; + RoundsTableScrollArea.W = CBase.Settings.GetRenderW() - Texts[TextRoundNumber].X - 20; - float delta = Texts[htTexts(TextRoundNumber)].Height; + float delta = Texts[TextRoundNumber].Height; //Update statics and texts for rounds for (int round = 0; round < RoundsTable.Count; round++) @@ -455,8 +455,8 @@ namespace Vocaluxe.PartyModes for (int column = row * NumPlayerInOneRow; column < num; column++) { //Player - float _x = x + 15 + (CBase.Settings.GetRenderW() - Texts[htTexts(TextRoundNumber)].X - 20) / NumPlayerInThisRow * (column - row * NumPlayerInOneRow) + ((CBase.Settings.GetRenderW() - Texts[htTexts(TextRoundNumber)].X - 20) / NumPlayerInThisRow) / 2; - float maxw = ((CBase.Settings.GetRenderW() - Texts[htTexts(TextRoundNumber)].X - 20) / NumPlayerInThisRow) / 2 - 5; + float _x = x + 15 + (CBase.Settings.GetRenderW() - Texts[TextRoundNumber].X - 20) / NumPlayerInThisRow * (column - row * NumPlayerInOneRow) + ((CBase.Settings.GetRenderW() - Texts[TextRoundNumber].X - 20) / NumPlayerInThisRow) / 2; + float maxw = ((CBase.Settings.GetRenderW() - Texts[TextRoundNumber].X - 20) / NumPlayerInThisRow) / 2 - 5; RoundsTable[round].TextPlayer[column].X = _x; RoundsTable[round].TextPlayer[column].Y = y; RoundsTable[round].TextPlayer[column].MaxWidth = maxw; @@ -510,19 +510,19 @@ namespace Vocaluxe.PartyModes } } - Buttons[htButtons(ButtonRoundsScrollUp)].Visible = RoundsTableOffset > 0; - Buttons[htButtons(ButtonRoundsScrollDown)].Visible = GameState.Combs.Count - NumRoundsVisible - RoundsTableOffset > 0; + Buttons[ButtonRoundsScrollUp].Visible = RoundsTableOffset > 0; + Buttons[ButtonRoundsScrollDown].Visible = GameState.Combs.Count - NumRoundsVisible - RoundsTableOffset > 0; } private void BuildPlayerTable() { PlayerTableScrollArea = new SRectF(); - PlayerTableScrollArea.X = Texts[htTexts(TextPosition)].X; - PlayerTableScrollArea.Y = Texts[htTexts(TextPosition)].Y; - PlayerTableScrollArea.W = Texts[htTexts(TextGamePoints)].X - Texts[htTexts(TextPosition)].X; + PlayerTableScrollArea.X = Texts[TextPosition].X; + PlayerTableScrollArea.Y = Texts[TextPosition].Y; + PlayerTableScrollArea.W = Texts[TextGamePoints].X - Texts[TextPosition].X; PlayerTable = new List(); - float delta = Texts[htTexts(TextPosition)].Height * 1.2f; + float delta = Texts[TextPosition].Height * 1.2f; float h = 0; @@ -530,12 +530,12 @@ namespace Vocaluxe.PartyModes { TableRow row = new TableRow(); - row.Pos = GetNewText(Texts[htTexts(TextPosition)]); - row.Name = GetNewText(Texts[htTexts(TextPlayerName)]); - row.Rounds = GetNewText(Texts[htTexts(TextNumPlayed)]); - row.Won = GetNewText(Texts[htTexts(TextWon)]); - row.SingPoints = GetNewText(Texts[htTexts(TextSingPoints)]); - row.GamePoints = GetNewText(Texts[htTexts(TextGamePoints)]); + row.Pos = GetNewText(Texts[TextPosition]); + row.Name = GetNewText(Texts[TextPlayerName]); + row.Rounds = GetNewText(Texts[TextNumPlayed]); + row.Won = GetNewText(Texts[TextWon]); + row.SingPoints = GetNewText(Texts[TextSingPoints]); + row.GamePoints = GetNewText(Texts[TextGamePoints]); row.Pos.Y += delta * (i + 1); row.Name.Y += delta * (i + 1); @@ -602,8 +602,8 @@ namespace Vocaluxe.PartyModes } } - Buttons[htButtons(ButtonPlayerScrollUp)].Visible = PlayerTableOffset > 0; - Buttons[htButtons(ButtonPlayerScrollDown)].Visible = GameState.ProfileIDs.Count - NumPlayerVisible - PlayerTableOffset > 0; + Buttons[ButtonPlayerScrollUp].Visible = PlayerTableOffset > 0; + Buttons[ButtonPlayerScrollDown].Visible = GameState.ProfileIDs.Count - NumPlayerVisible - PlayerTableOffset > 0; } private void ScrollPlayerTable(int Offset) diff --git a/PartyModes/PartyModeChallenge/PartyScreenChallengeNames.cs b/PartyModes/PartyModeChallenge/PartyScreenChallengeNames.cs index 5089b80c..13c1c902 100644 --- a/PartyModes/PartyModeChallenge/PartyScreenChallengeNames.cs +++ b/PartyModes/PartyModeChallenge/PartyScreenChallengeNames.cs @@ -131,10 +131,10 @@ namespace Vocaluxe.PartyModes break; case Keys.Enter: - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) Next(); if (!OnAdd()) @@ -238,10 +238,10 @@ namespace Vocaluxe.PartyModes if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) Next(); if (!OnAdd()) @@ -293,13 +293,13 @@ namespace Vocaluxe.PartyModes private void AddButtonPlayerDestination() { - Buttons[htButtons(ButtonPlayerDestination)].Visible = false; + Buttons[ButtonPlayerDestination].Visible = false; PlayerDestinationButtons = new List(); int row = 0; int column = 0; for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++) { - CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerDestination)]); + CButton b = GetNewButton(Buttons[ButtonPlayerDestination]); b.Rect.X = PlayerDestinationButtonsFirstX + column * (b.Rect.W + PlayerDestinationButtonsSpaceH); b.Rect.Y = PlayerDestinationButtonsFirstY + row * (b.Rect.H + PlayerDestinationButtonsSpaceW); PlayerDestinationButtons.Add(b); @@ -317,13 +317,13 @@ namespace Vocaluxe.PartyModes private void AddButtonPlayerChoose() { - Buttons[htButtons(ButtonPlayerChoose)].Visible = false; + Buttons[ButtonPlayerChoose].Visible = false; PlayerChooseButtons = new List(); int row = 0; int column = 0; for (int i = 1; i <= PlayerChooseButtonsNumH * PlayerChooseButtonsNumW; i++) { - CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerChoose)]); + CButton b = GetNewButton(Buttons[ButtonPlayerChoose]); b.Rect.X = PlayerChooseButtonsFirstX + column * (b.Rect.W + PlayerChooseButtonsSpaceH); b.Rect.Y = PlayerChooseButtonsFirstY + row * (b.Rect.H + PlayerChooseButtonsSpaceW); CPlayerChooseButton pcb = new CPlayerChooseButton(); @@ -379,10 +379,10 @@ namespace Vocaluxe.PartyModes { PlayerChooseButtons[i].ProfileID = -1; PlayerChooseButtons[i].Button.Text.Text = String.Empty; - PlayerChooseButtons[i].Button.Texture = Buttons[htButtons(ButtonPlayerChoose)].Texture; - PlayerChooseButtons[i].Button.STexture = Buttons[htButtons(ButtonPlayerChoose)].STexture; - PlayerChooseButtons[i].Button.Color = Buttons[htButtons(ButtonPlayerChoose)].Color; - PlayerChooseButtons[i].Button.SColor = Buttons[htButtons(ButtonPlayerChoose)].SColor; + PlayerChooseButtons[i].Button.Texture = Buttons[ButtonPlayerChoose].Texture; + PlayerChooseButtons[i].Button.STexture = Buttons[ButtonPlayerChoose].STexture; + PlayerChooseButtons[i].Button.Color = Buttons[ButtonPlayerChoose].Color; + PlayerChooseButtons[i].Button.SColor = Buttons[ButtonPlayerChoose].SColor; PlayerChooseButtons[i].Button.Enabled = false; } } @@ -448,10 +448,10 @@ namespace Vocaluxe.PartyModes } else { - PlayerDestinationButtons[i].Color = Buttons[htButtons(ButtonPlayerDestination)].Color; - PlayerDestinationButtons[i].SColor = Buttons[htButtons(ButtonPlayerDestination)].SColor; - PlayerDestinationButtons[i].Texture = Buttons[htButtons(ButtonPlayerDestination)].Texture; - PlayerDestinationButtons[i].STexture = Buttons[htButtons(ButtonPlayerDestination)].STexture; + PlayerDestinationButtons[i].Color = Buttons[ButtonPlayerDestination].Color; + PlayerDestinationButtons[i].SColor = Buttons[ButtonPlayerDestination].SColor; + PlayerDestinationButtons[i].Texture = Buttons[ButtonPlayerDestination].Texture; + PlayerDestinationButtons[i].STexture = Buttons[ButtonPlayerDestination].STexture; PlayerDestinationButtons[i].Text.Text = String.Empty; PlayerDestinationButtons[i].Enabled = false; } @@ -462,11 +462,11 @@ namespace Vocaluxe.PartyModes { if (Data.ScreenNames.ProfileIDs.Count == NumPlayer) { - Buttons[htButtons(ButtonNext)].Visible = true; - SetInteractionToButton(Buttons[htButtons(ButtonNext)]); + Buttons[ButtonNext].Visible = true; + SetInteractionToButton(Buttons[ButtonNext]); } else - Buttons[htButtons(ButtonNext)].Visible = false; + Buttons[ButtonNext].Visible = false; } private bool OnAdd() diff --git a/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeConfig.cs b/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeConfig.cs index 83d6b218..61910470 100644 --- a/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeConfig.cs +++ b/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeConfig.cs @@ -88,10 +88,10 @@ namespace Vocaluxe.PartyModes case Keys.Enter: UpdateSlides(); - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) Next(); break; @@ -114,10 +114,10 @@ namespace Vocaluxe.PartyModes if (MouseEvent.LB && IsMouseOver(MouseEvent)) { UpdateSlides(); - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) Next(); } @@ -161,12 +161,12 @@ namespace Vocaluxe.PartyModes private void RebuildSlides() { // build num player slide (min player ... max player); - SelectSlides[htSelectSlides(SelectSlideNumPlayers)].Clear(); + SelectSlides[SelectSlideNumPlayers].Clear(); for (int i = _PartyMode.GetMinPlayer(); i <= _PartyMode.GetMaxPlayer(); i++) { - SelectSlides[htSelectSlides(SelectSlideNumPlayers)].AddValue(i.ToString()); + SelectSlides[SelectSlideNumPlayers].AddValue(i.ToString()); } - SelectSlides[htSelectSlides(SelectSlideNumPlayers)].Selection = Data.ScreenConfig.NumPlayer - _PartyMode.GetMinPlayer(); + SelectSlides[SelectSlideNumPlayers].Selection = Data.ScreenConfig.NumPlayer - _PartyMode.GetMinPlayer(); UpdateMicsAtOnce(); SetRoundSteps(); @@ -177,9 +177,9 @@ namespace Vocaluxe.PartyModes { int player = Data.ScreenConfig.NumPlayer; int mics = Data.ScreenConfig.NumPlayerAtOnce; - Data.ScreenConfig.NumPlayer = SelectSlides[htSelectSlides(SelectSlideNumPlayers)].Selection + _PartyMode.GetMinPlayer(); - Data.ScreenConfig.NumPlayerAtOnce = SelectSlides[htSelectSlides(SelectSlideNumMics)].Selection + _PartyMode.GetMinPlayer(); - Data.ScreenConfig.NumRounds = (SelectSlides[htSelectSlides(SelectSlideNumRounds)].Selection + 1) * _RoundSteps; + Data.ScreenConfig.NumPlayer = SelectSlides[SelectSlideNumPlayers].Selection + _PartyMode.GetMinPlayer(); + Data.ScreenConfig.NumPlayerAtOnce = SelectSlides[SelectSlideNumMics].Selection + _PartyMode.GetMinPlayer(); + Data.ScreenConfig.NumRounds = (SelectSlides[SelectSlideNumRounds].Selection + 1) * _RoundSteps; UpdateMicsAtOnce(); SetRoundSteps(); @@ -208,23 +208,23 @@ namespace Vocaluxe.PartyModes Data.ScreenConfig.NumPlayerAtOnce = MaxNum; // build mics at once slide - SelectSlides[htSelectSlides(SelectSlideNumMics)].Clear(); + SelectSlides[SelectSlideNumMics].Clear(); for (int i = 1; i <= MaxNum; i++) { - SelectSlides[htSelectSlides(SelectSlideNumMics)].AddValue(i.ToString()); + SelectSlides[SelectSlideNumMics].AddValue(i.ToString()); } - SelectSlides[htSelectSlides(SelectSlideNumMics)].Selection = Data.ScreenConfig.NumPlayerAtOnce - _PartyMode.GetMinPlayer(); + SelectSlides[SelectSlideNumMics].Selection = Data.ScreenConfig.NumPlayerAtOnce - _PartyMode.GetMinPlayer(); } private void UpdateSlideRounds() { // build num rounds slide - SelectSlides[htSelectSlides(SelectSlideNumRounds)].Clear(); + SelectSlides[SelectSlideNumRounds].Clear(); for (int i = _RoundSteps; i <= _MaxNumRounds; i += _RoundSteps) { - SelectSlides[htSelectSlides(SelectSlideNumRounds)].AddValue(i.ToString()); + SelectSlides[SelectSlideNumRounds].AddValue(i.ToString()); } - SelectSlides[htSelectSlides(SelectSlideNumRounds)].Selection = Data.ScreenConfig.NumRounds / _RoundSteps - 1; + SelectSlides[SelectSlideNumRounds].Selection = Data.ScreenConfig.NumRounds / _RoundSteps - 1; } private void SetRoundSteps() diff --git a/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeMain.cs b/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeMain.cs index c6593ca7..9a36b657 100644 --- a/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeMain.cs +++ b/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeMain.cs @@ -104,9 +104,9 @@ namespace Vocaluxe.PartyModes for (int i = 0; i < _PartyMode.GetMaxPlayer(); i++) { - NextPlayerTexts.Add(GetNewText(Texts[htTexts(TextNextPlayer)])); + NextPlayerTexts.Add(GetNewText(Texts[TextNextPlayer])); AddText(NextPlayerTexts[NextPlayerTexts.Count - 1]); - NextPlayerStatics.Add(GetNewStatic(Statics[htStatics(StaticNextPlayer)])); + NextPlayerStatics.Add(GetNewStatic(Statics[StaticNextPlayer])); AddStatic(NextPlayerStatics[NextPlayerStatics.Count - 1]); } } @@ -153,26 +153,26 @@ namespace Vocaluxe.PartyModes case Keys.Enter: if (!ExitPopupVisible) { - if (Buttons[htButtons(ButtonNextRound)].Selected) + if (Buttons[ButtonNextRound].Selected) NextRound(); - if (Buttons[htButtons(ButtonBack)].Selected && GameState.CurrentRoundNr == 1) + if (Buttons[ButtonBack].Selected && GameState.CurrentRoundNr == 1) Back(); - if (Buttons[htButtons(ButtonExit)].Selected && GameState.CurrentRoundNr > 1) + if (Buttons[ButtonExit].Selected && GameState.CurrentRoundNr > 1) ShowPopup(true); - if (Buttons[htButtons(ButtonPlayerScrollUp)].Selected) + if (Buttons[ButtonPlayerScrollUp].Selected) ScrollPlayerTable(-1); - if (Buttons[htButtons(ButtonPlayerScrollDown)].Selected) + if (Buttons[ButtonPlayerScrollDown].Selected) ScrollPlayerTable(1); - if (Buttons[htButtons(ButtonRoundsScrollUp)].Selected) + if (Buttons[ButtonRoundsScrollUp].Selected) ScrollRoundsTable(-1); - if (Buttons[htButtons(ButtonRoundsScrollDown)].Selected) + if (Buttons[ButtonRoundsScrollDown].Selected) ScrollRoundsTable(1); } else { - if (Buttons[htButtons(ButtonPopupYes)].Selected) + if (Buttons[ButtonPopupYes].Selected) EndParty(); - if (Buttons[htButtons(ButtonPopupNo)].Selected) + if (Buttons[ButtonPopupNo].Selected) ShowPopup(false); } break; @@ -189,26 +189,26 @@ namespace Vocaluxe.PartyModes { if (!ExitPopupVisible) { - if (Buttons[htButtons(ButtonNextRound)].Selected) + if (Buttons[ButtonNextRound].Selected) NextRound(); - if (Buttons[htButtons(ButtonBack)].Selected && GameState.CurrentRoundNr == 1) + if (Buttons[ButtonBack].Selected && GameState.CurrentRoundNr == 1) Back(); - if (Buttons[htButtons(ButtonExit)].Selected && GameState.CurrentRoundNr > 1) + if (Buttons[ButtonExit].Selected && GameState.CurrentRoundNr > 1) ShowPopup(true); - if (Buttons[htButtons(ButtonPlayerScrollUp)].Selected) + if (Buttons[ButtonPlayerScrollUp].Selected) ScrollPlayerTable(-1); - if (Buttons[htButtons(ButtonPlayerScrollDown)].Selected) + if (Buttons[ButtonPlayerScrollDown].Selected) ScrollPlayerTable(1); - if (Buttons[htButtons(ButtonRoundsScrollUp)].Selected) + if (Buttons[ButtonRoundsScrollUp].Selected) ScrollRoundsTable(-1); - if (Buttons[htButtons(ButtonRoundsScrollDown)].Selected) + if (Buttons[ButtonRoundsScrollDown].Selected) ScrollRoundsTable(1); } else { - if (Buttons[htButtons(ButtonPopupYes)].Selected) + if (Buttons[ButtonPopupYes].Selected) EndParty(); - if (Buttons[htButtons(ButtonPopupNo)].Selected) + if (Buttons[ButtonPopupNo].Selected) ShowPopup(false); } } @@ -253,29 +253,29 @@ namespace Vocaluxe.PartyModes if (GameState.CurrentRoundNr == 1) { - Buttons[htButtons(ButtonBack)].Visible = true; - Buttons[htButtons(ButtonExit)].Visible = false; + Buttons[ButtonBack].Visible = true; + Buttons[ButtonExit].Visible = false; } else { - Buttons[htButtons(ButtonBack)].Visible = false; - Buttons[htButtons(ButtonExit)].Visible = true; + Buttons[ButtonBack].Visible = false; + Buttons[ButtonExit].Visible = true; } if (GameState.CurrentRoundNr <= GameState.Combs.Count) { - Buttons[htButtons(ButtonNextRound)].Visible = true; - Texts[htTexts(TextFinishMessage)].Visible = false; - Texts[htTexts(TextFinishPlayerWin)].Visible = false; - SetInteractionToButton(Buttons[htButtons(ButtonNextRound)]); + Buttons[ButtonNextRound].Visible = true; + Texts[TextFinishMessage].Visible = false; + Texts[TextFinishPlayerWin].Visible = false; + SetInteractionToButton(Buttons[ButtonNextRound]); } else { - Buttons[htButtons(ButtonNextRound)].Visible = false; - Texts[htTexts(TextFinishMessage)].Visible = true; - Texts[htTexts(TextFinishPlayerWin)].Visible = true; - Texts[htTexts(TextFinishPlayerWin)].Text = GetPlayerWinString(); - SetInteractionToButton(Buttons[htButtons(ButtonExit)]); + Buttons[ButtonNextRound].Visible = false; + Texts[TextFinishMessage].Visible = true; + Texts[TextFinishPlayerWin].Visible = true; + Texts[TextFinishPlayerWin].Text = GetPlayerWinString(); + SetInteractionToButton(Buttons[ButtonExit]); } ShowPopup(false); @@ -313,13 +313,13 @@ namespace Vocaluxe.PartyModes { ExitPopupVisible = Visible; - Statics[htStatics(StaticPopupBG)].Visible = ExitPopupVisible; - Texts[htTexts(TextPopupReallyExit)].Visible = ExitPopupVisible; - Buttons[htButtons(ButtonPopupYes)].Visible = ExitPopupVisible; - Buttons[htButtons(ButtonPopupNo)].Visible = ExitPopupVisible; + Statics[StaticPopupBG].Visible = ExitPopupVisible; + Texts[TextPopupReallyExit].Visible = ExitPopupVisible; + Buttons[ButtonPopupYes].Visible = ExitPopupVisible; + Buttons[ButtonPopupNo].Visible = ExitPopupVisible; if (ExitPopupVisible) - SetInteractionToButton(Buttons[htButtons(ButtonPopupNo)]); + SetInteractionToButton(Buttons[ButtonPopupNo]); } private void Back() @@ -331,7 +331,7 @@ namespace Vocaluxe.PartyModes private void UpdateNextPlayerPositions() { - float x = CBase.Settings.GetRenderW()/2 - ((GameState.NumPlayerAtOnce * Statics[htStatics(StaticNextPlayer)].Rect.W) + ((GameState.NumPlayerAtOnce-1) * 15))/2; + float x = CBase.Settings.GetRenderW()/2 - ((GameState.NumPlayerAtOnce * Statics[StaticNextPlayer].Rect.W) + ((GameState.NumPlayerAtOnce-1) * 15))/2; float static_y = 590; float text_y = 550; for (int i = 0; i < GameState.NumPlayerAtOnce; i++) @@ -341,11 +341,11 @@ namespace Vocaluxe.PartyModes NextPlayerStatics[i].Rect.Y = static_y; NextPlayerStatics[i].Visible = true; //text - NextPlayerTexts[i].X = x + Statics[htStatics(StaticNextPlayer)].Rect.W / 2; + NextPlayerTexts[i].X = x + Statics[StaticNextPlayer].Rect.W / 2; NextPlayerTexts[i].Y = text_y; NextPlayerTexts[i].Visible = true; - x += Statics[htStatics(StaticNextPlayer)].Rect.W + 15; + x += Statics[StaticNextPlayer].Rect.W + 15; } for (int i = GameState.NumPlayerAtOnce; i < _PartyMode.GetMaxPlayer(); i++) { @@ -358,7 +358,7 @@ namespace Vocaluxe.PartyModes { if (GameState.CurrentRoundNr <= GameState.Combs.Count) { - Texts[htTexts(TextNextPlayerMessage)].Visible = true; + Texts[TextNextPlayerMessage].Visible = true; SProfile[] profiles = CBase.Profiles.GetProfiles(); for (int i = 0; i < GameState.NumPlayerAtOnce; i++) { @@ -370,7 +370,7 @@ namespace Vocaluxe.PartyModes } else { - Texts[htTexts(TextNextPlayerMessage)].Visible = false; + Texts[TextNextPlayerMessage].Visible = false; for (int i = 0; i < GameState.NumPlayerAtOnce; i++) { NextPlayerStatics[i].Visible = false; @@ -394,7 +394,7 @@ namespace Vocaluxe.PartyModes for (int round = 0; round < RoundsTable.Count; round++) { //Round-number - CText text = GetNewText(Texts[htTexts(TextRoundNumber)]); + CText text = GetNewText(Texts[TextRoundNumber]); AddText(text); RoundsTable[round].Number = text; for (int row = 0; row < 2; row++) @@ -402,11 +402,11 @@ namespace Vocaluxe.PartyModes for (int column = 0; column < 3; column++) { //Player - text = GetNewText(Texts[htTexts(TextRoundPlayer)]); + text = GetNewText(Texts[TextRoundPlayer]); AddText(text); RoundsTable[round].TextPlayer.Add(text); //Score - text = GetNewText(Texts[htTexts(TextRoundScore)]); + text = GetNewText(Texts[TextRoundScore]); AddText(text); RoundsTable[round].TextScores.Add(text); } @@ -427,14 +427,14 @@ namespace Vocaluxe.PartyModes if (NumRoundsVisible > GameState.Combs.Count) NumRoundsVisible = GameState.Combs.Count; - float x = Texts[htTexts(TextRoundNumber)].X; - float y = Texts[htTexts(TextRoundNumber)].Y; + float x = Texts[TextRoundNumber].X; + float y = Texts[TextRoundNumber].Y; RoundsTableScrollArea.X = x; RoundsTableScrollArea.Y = y; - RoundsTableScrollArea.W = CBase.Settings.GetRenderW() - Texts[htTexts(TextRoundNumber)].X - 20; + RoundsTableScrollArea.W = CBase.Settings.GetRenderW() - Texts[TextRoundNumber].X - 20; - float delta = Texts[htTexts(TextRoundNumber)].Height; + float delta = Texts[TextRoundNumber].Height; //Update statics and texts for rounds for (int round = 0; round < RoundsTable.Count; round++) @@ -455,8 +455,8 @@ namespace Vocaluxe.PartyModes for (int column = row * NumPlayerInOneRow; column < num; column++) { //Player - float _x = x + 15 + (CBase.Settings.GetRenderW() - Texts[htTexts(TextRoundNumber)].X - 20) / NumPlayerInThisRow * (column - row * NumPlayerInOneRow) + ((CBase.Settings.GetRenderW() - Texts[htTexts(TextRoundNumber)].X - 20) / NumPlayerInThisRow) / 2; - float maxw = ((CBase.Settings.GetRenderW() - Texts[htTexts(TextRoundNumber)].X - 20) / NumPlayerInThisRow) / 2 - 5; + float _x = x + 15 + (CBase.Settings.GetRenderW() - Texts[TextRoundNumber].X - 20) / NumPlayerInThisRow * (column - row * NumPlayerInOneRow) + ((CBase.Settings.GetRenderW() - Texts[TextRoundNumber].X - 20) / NumPlayerInThisRow) / 2; + float maxw = ((CBase.Settings.GetRenderW() - Texts[TextRoundNumber].X - 20) / NumPlayerInThisRow) / 2 - 5; RoundsTable[round].TextPlayer[column].X = _x; RoundsTable[round].TextPlayer[column].Y = y; RoundsTable[round].TextPlayer[column].MaxWidth = maxw; @@ -510,19 +510,19 @@ namespace Vocaluxe.PartyModes } } - Buttons[htButtons(ButtonRoundsScrollUp)].Visible = RoundsTableOffset > 0; - Buttons[htButtons(ButtonRoundsScrollDown)].Visible = GameState.Combs.Count - NumRoundsVisible - RoundsTableOffset > 0; + Buttons[ButtonRoundsScrollUp].Visible = RoundsTableOffset > 0; + Buttons[ButtonRoundsScrollDown].Visible = GameState.Combs.Count - NumRoundsVisible - RoundsTableOffset > 0; } private void BuildPlayerTable() { PlayerTableScrollArea = new SRectF(); - PlayerTableScrollArea.X = Texts[htTexts(TextPosition)].X; - PlayerTableScrollArea.Y = Texts[htTexts(TextPosition)].Y; - PlayerTableScrollArea.W = Texts[htTexts(TextGamePoints)].X - Texts[htTexts(TextPosition)].X; + PlayerTableScrollArea.X = Texts[TextPosition].X; + PlayerTableScrollArea.Y = Texts[TextPosition].Y; + PlayerTableScrollArea.W = Texts[TextGamePoints].X - Texts[TextPosition].X; PlayerTable = new List(); - float delta = Texts[htTexts(TextPosition)].Height * 1.2f; + float delta = Texts[TextPosition].Height * 1.2f; float h = 0; @@ -530,12 +530,12 @@ namespace Vocaluxe.PartyModes { TableRow row = new TableRow(); - row.Pos = GetNewText(Texts[htTexts(TextPosition)]); - row.Name = GetNewText(Texts[htTexts(TextPlayerName)]); - row.Rounds = GetNewText(Texts[htTexts(TextNumPlayed)]); - row.Won = GetNewText(Texts[htTexts(TextWon)]); - row.SingPoints = GetNewText(Texts[htTexts(TextSingPoints)]); - row.GamePoints = GetNewText(Texts[htTexts(TextGamePoints)]); + row.Pos = GetNewText(Texts[TextPosition]); + row.Name = GetNewText(Texts[TextPlayerName]); + row.Rounds = GetNewText(Texts[TextNumPlayed]); + row.Won = GetNewText(Texts[TextWon]); + row.SingPoints = GetNewText(Texts[TextSingPoints]); + row.GamePoints = GetNewText(Texts[TextGamePoints]); row.Pos.Y += delta * (i + 1); row.Name.Y += delta * (i + 1); @@ -602,8 +602,8 @@ namespace Vocaluxe.PartyModes } } - Buttons[htButtons(ButtonPlayerScrollUp)].Visible = PlayerTableOffset > 0; - Buttons[htButtons(ButtonPlayerScrollDown)].Visible = GameState.ProfileIDs.Count - NumPlayerVisible - PlayerTableOffset > 0; + Buttons[ButtonPlayerScrollUp].Visible = PlayerTableOffset > 0; + Buttons[ButtonPlayerScrollDown].Visible = GameState.ProfileIDs.Count - NumPlayerVisible - PlayerTableOffset > 0; } private void ScrollPlayerTable(int Offset) diff --git a/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeNames.cs b/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeNames.cs index 5089b80c..13c1c902 100644 --- a/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeNames.cs +++ b/PartyModes/PartyModeChallengeMedley/PartyScreenChallengeNames.cs @@ -131,10 +131,10 @@ namespace Vocaluxe.PartyModes break; case Keys.Enter: - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) Next(); if (!OnAdd()) @@ -238,10 +238,10 @@ namespace Vocaluxe.PartyModes if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) Next(); if (!OnAdd()) @@ -293,13 +293,13 @@ namespace Vocaluxe.PartyModes private void AddButtonPlayerDestination() { - Buttons[htButtons(ButtonPlayerDestination)].Visible = false; + Buttons[ButtonPlayerDestination].Visible = false; PlayerDestinationButtons = new List(); int row = 0; int column = 0; for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++) { - CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerDestination)]); + CButton b = GetNewButton(Buttons[ButtonPlayerDestination]); b.Rect.X = PlayerDestinationButtonsFirstX + column * (b.Rect.W + PlayerDestinationButtonsSpaceH); b.Rect.Y = PlayerDestinationButtonsFirstY + row * (b.Rect.H + PlayerDestinationButtonsSpaceW); PlayerDestinationButtons.Add(b); @@ -317,13 +317,13 @@ namespace Vocaluxe.PartyModes private void AddButtonPlayerChoose() { - Buttons[htButtons(ButtonPlayerChoose)].Visible = false; + Buttons[ButtonPlayerChoose].Visible = false; PlayerChooseButtons = new List(); int row = 0; int column = 0; for (int i = 1; i <= PlayerChooseButtonsNumH * PlayerChooseButtonsNumW; i++) { - CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerChoose)]); + CButton b = GetNewButton(Buttons[ButtonPlayerChoose]); b.Rect.X = PlayerChooseButtonsFirstX + column * (b.Rect.W + PlayerChooseButtonsSpaceH); b.Rect.Y = PlayerChooseButtonsFirstY + row * (b.Rect.H + PlayerChooseButtonsSpaceW); CPlayerChooseButton pcb = new CPlayerChooseButton(); @@ -379,10 +379,10 @@ namespace Vocaluxe.PartyModes { PlayerChooseButtons[i].ProfileID = -1; PlayerChooseButtons[i].Button.Text.Text = String.Empty; - PlayerChooseButtons[i].Button.Texture = Buttons[htButtons(ButtonPlayerChoose)].Texture; - PlayerChooseButtons[i].Button.STexture = Buttons[htButtons(ButtonPlayerChoose)].STexture; - PlayerChooseButtons[i].Button.Color = Buttons[htButtons(ButtonPlayerChoose)].Color; - PlayerChooseButtons[i].Button.SColor = Buttons[htButtons(ButtonPlayerChoose)].SColor; + PlayerChooseButtons[i].Button.Texture = Buttons[ButtonPlayerChoose].Texture; + PlayerChooseButtons[i].Button.STexture = Buttons[ButtonPlayerChoose].STexture; + PlayerChooseButtons[i].Button.Color = Buttons[ButtonPlayerChoose].Color; + PlayerChooseButtons[i].Button.SColor = Buttons[ButtonPlayerChoose].SColor; PlayerChooseButtons[i].Button.Enabled = false; } } @@ -448,10 +448,10 @@ namespace Vocaluxe.PartyModes } else { - PlayerDestinationButtons[i].Color = Buttons[htButtons(ButtonPlayerDestination)].Color; - PlayerDestinationButtons[i].SColor = Buttons[htButtons(ButtonPlayerDestination)].SColor; - PlayerDestinationButtons[i].Texture = Buttons[htButtons(ButtonPlayerDestination)].Texture; - PlayerDestinationButtons[i].STexture = Buttons[htButtons(ButtonPlayerDestination)].STexture; + PlayerDestinationButtons[i].Color = Buttons[ButtonPlayerDestination].Color; + PlayerDestinationButtons[i].SColor = Buttons[ButtonPlayerDestination].SColor; + PlayerDestinationButtons[i].Texture = Buttons[ButtonPlayerDestination].Texture; + PlayerDestinationButtons[i].STexture = Buttons[ButtonPlayerDestination].STexture; PlayerDestinationButtons[i].Text.Text = String.Empty; PlayerDestinationButtons[i].Enabled = false; } @@ -462,11 +462,11 @@ namespace Vocaluxe.PartyModes { if (Data.ScreenNames.ProfileIDs.Count == NumPlayer) { - Buttons[htButtons(ButtonNext)].Visible = true; - SetInteractionToButton(Buttons[htButtons(ButtonNext)]); + Buttons[ButtonNext].Visible = true; + SetInteractionToButton(Buttons[ButtonNext]); } else - Buttons[htButtons(ButtonNext)].Visible = false; + Buttons[ButtonNext].Visible = false; } private bool OnAdd() diff --git a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs index 925d10f5..bad59f10 100644 --- a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs +++ b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs @@ -98,10 +98,10 @@ namespace Vocaluxe.PartyModes case Keys.Enter: UpdateSlides(); - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) Next(); break; @@ -124,10 +124,10 @@ namespace Vocaluxe.PartyModes if (MouseEvent.LB && IsMouseOver(MouseEvent)) { UpdateSlides(); - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) Next(); } @@ -152,7 +152,7 @@ namespace Vocaluxe.PartyModes public override bool UpdateGame() { - Buttons[htButtons(ButtonNext)].Visible = ConfigOk; + Buttons[ButtonNext].Visible = ConfigOk; return true; } @@ -170,78 +170,78 @@ namespace Vocaluxe.PartyModes private void FillSlides() { // build num player slide (min player ... max player); - SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].Clear(); + SelectSlides[SelectSlideNumPlayerTeam1].Clear(); for (int i = _PartyMode.GetMinPlayer()/2; i <= _PartyMode.GetMaxPlayer() / 2; i++) { - SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].AddValue(i.ToString()); + SelectSlides[SelectSlideNumPlayerTeam1].AddValue(i.ToString()); } - SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].Selection = Data.ScreenConfig.NumPlayerTeam1 - (_PartyMode.GetMinPlayer()/2); + SelectSlides[SelectSlideNumPlayerTeam1].Selection = Data.ScreenConfig.NumPlayerTeam1 - (_PartyMode.GetMinPlayer()/2); - SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].Clear(); + SelectSlides[SelectSlideNumPlayerTeam2].Clear(); for (int i = _PartyMode.GetMinPlayer()/2; i <= _PartyMode.GetMaxPlayer() / 2; i++) { - SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].AddValue(i.ToString()); + SelectSlides[SelectSlideNumPlayerTeam2].AddValue(i.ToString()); } - SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].Selection = Data.ScreenConfig.NumPlayerTeam2 -( _PartyMode.GetMinPlayer()/2); + SelectSlides[SelectSlideNumPlayerTeam2].Selection = Data.ScreenConfig.NumPlayerTeam2 -( _PartyMode.GetMinPlayer()/2); - SelectSlides[htSelectSlides(SelectSlideNumFields)].Clear(); - SelectSlides[htSelectSlides(SelectSlideNumFields)].AddValue("9"); - SelectSlides[htSelectSlides(SelectSlideNumFields)].AddValue("16"); - SelectSlides[htSelectSlides(SelectSlideNumFields)].AddValue("25"); + SelectSlides[SelectSlideNumFields].Clear(); + SelectSlides[SelectSlideNumFields].AddValue("9"); + SelectSlides[SelectSlideNumFields].AddValue("16"); + SelectSlides[SelectSlideNumFields].AddValue("25"); if (Data.ScreenConfig.NumFields == 9) - SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection = 0; + SelectSlides[SelectSlideNumFields].Selection = 0; else if (Data.ScreenConfig.NumFields == 16) - SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection = 1; + SelectSlides[SelectSlideNumFields].Selection = 1; else if (Data.ScreenConfig.NumFields == 25) - SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection = 2; + SelectSlides[SelectSlideNumFields].Selection = 2; - SelectSlides[htSelectSlides(SelectSlideSongSource)].Clear(); - SelectSlides[htSelectSlides(SelectSlideSongSource)].SetValues((int)Data.ScreenConfig.SongSource); + SelectSlides[SelectSlideSongSource].Clear(); + SelectSlides[SelectSlideSongSource].SetValues((int)Data.ScreenConfig.SongSource); string[] _Playlists = CBase.Playlist.GetPlaylistNames(); - SelectSlides[htSelectSlides(SelectSlidePlaylist)].Clear(); + SelectSlides[SelectSlidePlaylist].Clear(); for (int i = 0; i < _Playlists.Length; i++) { string value = _Playlists[i] + " (" + CBase.Playlist.GetPlaylistSongCount(i) + " " + CBase.Language.Translate("TR_SONGS", _PartyModeID) + ")"; - SelectSlides[htSelectSlides(SelectSlidePlaylist)].AddValue(value); + SelectSlides[SelectSlidePlaylist].AddValue(value); } - SelectSlides[htSelectSlides(SelectSlidePlaylist)].Selection = Data.ScreenConfig.PlaylistID; - SelectSlides[htSelectSlides(SelectSlidePlaylist)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST; + SelectSlides[SelectSlidePlaylist].Selection = Data.ScreenConfig.PlaylistID; + SelectSlides[SelectSlidePlaylist].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST; string[] _Categories = new string[CBase.Songs.GetNumCategories()]; for (int i = 0; i < CBase.Songs.GetNumCategories(); i++ ) { _Categories[i] = CBase.Songs.GetCategory(i).Name; } - SelectSlides[htSelectSlides(SelectSlideCategory)].Clear(); + SelectSlides[SelectSlideCategory].Clear(); for (int i = 0; i < _Categories.Length; i++) { string value = _Categories[i] + " (" + CBase.Songs.NumSongsInCategory(i) + " " + CBase.Language.Translate("TR_SONGS", _PartyModeID) + ")"; - SelectSlides[htSelectSlides(SelectSlideCategory)].AddValue(value); + SelectSlides[SelectSlideCategory].AddValue(value); } - SelectSlides[htSelectSlides(SelectSlideCategory)].Selection = Data.ScreenConfig.CategoryID; - SelectSlides[htSelectSlides(SelectSlideCategory)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY; + SelectSlides[SelectSlideCategory].Selection = Data.ScreenConfig.CategoryID; + SelectSlides[SelectSlideCategory].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY; - SelectSlides[htSelectSlides(SelectSlideGameMode)].Visible = true; - SelectSlides[htSelectSlides(SelectSlideGameMode)].SetValues((int)Data.ScreenConfig.GameMode); + SelectSlides[SelectSlideGameMode].Visible = true; + SelectSlides[SelectSlideGameMode].SetValues((int)Data.ScreenConfig.GameMode); } private void UpdateSlides() { - Data.ScreenConfig.NumPlayerTeam1 = SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].Selection + (_PartyMode.GetMinPlayer()/2); - Data.ScreenConfig.NumPlayerTeam2 = SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].Selection + (_PartyMode.GetMinPlayer()/2); + Data.ScreenConfig.NumPlayerTeam1 = SelectSlides[SelectSlideNumPlayerTeam1].Selection + (_PartyMode.GetMinPlayer()/2); + Data.ScreenConfig.NumPlayerTeam2 = SelectSlides[SelectSlideNumPlayerTeam2].Selection + (_PartyMode.GetMinPlayer()/2); - if (SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection == 0) + if (SelectSlides[SelectSlideNumFields].Selection == 0) Data.ScreenConfig.NumFields = 9; - else if (SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection == 1) + else if (SelectSlides[SelectSlideNumFields].Selection == 1) Data.ScreenConfig.NumFields = 16; - else if (SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection == 2) + else if (SelectSlides[SelectSlideNumFields].Selection == 2) Data.ScreenConfig.NumFields = 25; - Data.ScreenConfig.SongSource = (ESongSource)SelectSlides[htSelectSlides(SelectSlideSongSource)].Selection; - Data.ScreenConfig.PlaylistID = SelectSlides[htSelectSlides(SelectSlidePlaylist)].Selection; - Data.ScreenConfig.CategoryID = SelectSlides[htSelectSlides(SelectSlideCategory)].Selection; - Data.ScreenConfig.GameMode = (EPartyGameMode)SelectSlides[htSelectSlides(SelectSlideGameMode)].Selection; + Data.ScreenConfig.SongSource = (ESongSource)SelectSlides[SelectSlideSongSource].Selection; + Data.ScreenConfig.PlaylistID = SelectSlides[SelectSlidePlaylist].Selection; + Data.ScreenConfig.CategoryID = SelectSlides[SelectSlideCategory].Selection; + Data.ScreenConfig.GameMode = (EPartyGameMode)SelectSlides[SelectSlideGameMode].Selection; EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; @@ -328,8 +328,8 @@ namespace Vocaluxe.PartyModes else ConfigOk = false; } - SelectSlides[htSelectSlides(SelectSlideCategory)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY; - SelectSlides[htSelectSlides(SelectSlidePlaylist)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST; + SelectSlides[SelectSlideCategory].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY; + SelectSlides[SelectSlidePlaylist].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST; } private void Back() diff --git a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs index d4e1d117..c8a5c5fa 100644 --- a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs +++ b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs @@ -103,7 +103,7 @@ namespace Vocaluxe.PartyModes base.LoadTheme(XmlPath); CreateFields(); - Buttons[htButtons(ButtonField)].Visible = false; + Buttons[ButtonField].Visible = false; } public override void DataToScreen(object ReceivedData) @@ -150,11 +150,11 @@ namespace Vocaluxe.PartyModes case Keys.Enter: if (!ExitPopupVisible) { - if (Buttons[htButtons(ButtonNextRound)].Selected) + if (Buttons[ButtonNextRound].Selected) NextRound(); - if (Buttons[htButtons(ButtonBack)].Selected && GameData.CurrentRoundNr == 1 && Status != EStatus.FieldSelected) + if (Buttons[ButtonBack].Selected && GameData.CurrentRoundNr == 1 && Status != EStatus.FieldSelected) Back(); - if (Buttons[htButtons(ButtonExit)].Selected && (GameData.CurrentRoundNr > 1 || Status == EStatus.FieldSelected) && Status != EStatus.None) + if (Buttons[ButtonExit].Selected && (GameData.CurrentRoundNr > 1 || Status == EStatus.FieldSelected) && Status != EStatus.None) ShowPopup(true); else if (Status == EStatus.None) EndParty(); @@ -181,21 +181,21 @@ namespace Vocaluxe.PartyModes } if (Status == EStatus.FieldSelected) { - if (Buttons[htButtons(ButtonJokerRandomT1)].Selected) + if (Buttons[ButtonJokerRandomT1].Selected) UseJoker(0, 0); - if (Buttons[htButtons(ButtonJokerRandomT2)].Selected) + if (Buttons[ButtonJokerRandomT2].Selected) UseJoker(1, 0); - if (Buttons[htButtons(ButtonJokerRetryT1)].Selected) + if (Buttons[ButtonJokerRetryT1].Selected) UseJoker(0, 1); - if (Buttons[htButtons(ButtonJokerRetryT2)].Selected) + if (Buttons[ButtonJokerRetryT2].Selected) UseJoker(1, 1); } } else { - if (Buttons[htButtons(ButtonPopupYes)].Selected) + if (Buttons[ButtonPopupYes].Selected) EndParty(); - if (Buttons[htButtons(ButtonPopupNo)].Selected) + if (Buttons[ButtonPopupNo].Selected) ShowPopup(false); } break; @@ -212,11 +212,11 @@ namespace Vocaluxe.PartyModes { if (!ExitPopupVisible) { - if (Buttons[htButtons(ButtonNextRound)].Selected) + if (Buttons[ButtonNextRound].Selected) NextRound(); - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) if (Status == EStatus.None) EndParty(); else @@ -244,22 +244,22 @@ namespace Vocaluxe.PartyModes } if(Status == EStatus.FieldSelected) { - if (Buttons[htButtons(ButtonJokerRandomT1)].Selected) + if (Buttons[ButtonJokerRandomT1].Selected) UseJoker(0, 0); - if (Buttons[htButtons(ButtonJokerRandomT2)].Selected) + if (Buttons[ButtonJokerRandomT2].Selected) UseJoker(1, 0); - if (Buttons[htButtons(ButtonJokerRetryT1)].Selected) + if (Buttons[ButtonJokerRetryT1].Selected) UseJoker(0, 1); - if (Buttons[htButtons(ButtonJokerRetryT2)].Selected) + if (Buttons[ButtonJokerRetryT2].Selected) UseJoker(1, 1); } } else { - if (Buttons[htButtons(ButtonPopupYes)].Selected) + if (Buttons[ButtonPopupYes].Selected) EndParty(); - if (Buttons[htButtons(ButtonPopupNo)].Selected) + if (Buttons[ButtonPopupNo].Selected) ShowPopup(false); } } @@ -294,15 +294,15 @@ namespace Vocaluxe.PartyModes { BuildWinnerPossibilities(); SelectedField = -1; - Buttons[htButtons(ButtonBack)].Visible = true; - Buttons[htButtons(ButtonExit)].Visible = false; - SetInteractionToButton(Buttons[htButtons(ButtonBack)]); + Buttons[ButtonBack].Visible = true; + Buttons[ButtonExit].Visible = false; + SetInteractionToButton(Buttons[ButtonBack]); } else { - Buttons[htButtons(ButtonBack)].Visible = false; - Buttons[htButtons(ButtonExit)].Visible = true; - SetInteractionToButton(Buttons[htButtons(ButtonExit)]); + Buttons[ButtonBack].Visible = false; + Buttons[ButtonExit].Visible = true; + SetInteractionToButton(Buttons[ButtonExit]); } Status = EStatus.FieldChoosing; @@ -314,36 +314,36 @@ namespace Vocaluxe.PartyModes if (GameData.CurrentRoundNr <= GameData.NumFields && Winner == 0) { UpdateTeamChoosingMessage(); - Texts[htTexts(TextNextPlayerT1)].Visible = false; - Texts[htTexts(TextNextPlayerT2)].Visible = false; - Texts[htTexts(TextNextPlayerNameT1)].Visible = false; - Texts[htTexts(TextNextPlayerNameT2)].Visible = false; - Statics[htStatics(StaticAvatarT1)].Visible = false; - Statics[htStatics(StaticAvatarT2)].Visible = false; - Buttons[htButtons(ButtonJokerRandomT1)].Visible = false; - Buttons[htButtons(ButtonJokerRandomT2)].Visible = false; - Buttons[htButtons(ButtonJokerRetryT1)].Visible = false; - Buttons[htButtons(ButtonJokerRetryT2)].Visible = false; - Buttons[htButtons(ButtonNextRound)].Visible = false; - Texts[htTexts(TextFinishMessage)].Visible = false; + Texts[TextNextPlayerT1].Visible = false; + Texts[TextNextPlayerT2].Visible = false; + Texts[TextNextPlayerNameT1].Visible = false; + Texts[TextNextPlayerNameT2].Visible = false; + Statics[StaticAvatarT1].Visible = false; + Statics[StaticAvatarT2].Visible = false; + Buttons[ButtonJokerRandomT1].Visible = false; + Buttons[ButtonJokerRandomT2].Visible = false; + Buttons[ButtonJokerRetryT1].Visible = false; + Buttons[ButtonJokerRetryT2].Visible = false; + Buttons[ButtonNextRound].Visible = false; + Texts[TextFinishMessage].Visible = false; } else { Status = EStatus.None; - Buttons[htButtons(ButtonNextRound)].Visible = false; - Texts[htTexts(TextFinishMessage)].Visible = true; - Texts[htTexts(TextTeamChoosing)].Visible = false; + Buttons[ButtonNextRound].Visible = false; + Texts[TextFinishMessage].Visible = true; + Texts[TextTeamChoosing].Visible = false; if (Winner > 0) { - Texts[htTexts(TextFinishMessage)].Color = CBase.Theme.GetPlayerColor(Winner); - Texts[htTexts(TextFinishMessage)].Text = CBase.Language.Translate("TR_SCREENMAIN_WINNER", _PartyModeID) + " " + CBase.Language.Translate("TR_TEAM", _PartyModeID) + " " + Winner; + Texts[TextFinishMessage].Color = CBase.Theme.GetPlayerColor(Winner); + Texts[TextFinishMessage].Text = CBase.Language.Translate("TR_SCREENMAIN_WINNER", _PartyModeID) + " " + CBase.Language.Translate("TR_TEAM", _PartyModeID) + " " + Winner; } else { - Texts[htTexts(TextFinishMessage)].Color = new SColorF(1, 1, 1, 1); - Texts[htTexts(TextFinishMessage)].Text = CBase.Language.Translate("TR_SCREENMAIN_NOWINNER", _PartyModeID); + Texts[TextFinishMessage].Color = new SColorF(1, 1, 1, 1); + Texts[TextFinishMessage].Text = CBase.Language.Translate("TR_SCREENMAIN_NOWINNER", _PartyModeID); } - SetInteractionToButton(Buttons[htButtons(ButtonExit)]); + SetInteractionToButton(Buttons[ButtonExit]); } ShowPopup(false); @@ -372,7 +372,7 @@ namespace Vocaluxe.PartyModes for (int i = 0; i < 25; i++) { Field f = new Field(); - f.Button = GetNewButton(Buttons[htButtons(ButtonField)]); + f.Button = GetNewButton(Buttons[ButtonField]); f.Button.Visible = false; f.Content = new Round(); AddButton(f.Button); @@ -429,9 +429,9 @@ namespace Vocaluxe.PartyModes for (int i = 0; i < GameData.Rounds.Count; i++) { Fields[i].Button.Enabled = true; - Fields[i].Button.Texture = Buttons[htButtons(ButtonField)].Texture; - Fields[i].Button.Color = Buttons[htButtons(ButtonField)].Color; - Fields[i].Button.SColor = Buttons[htButtons(ButtonField)].SColor; + Fields[i].Button.Texture = Buttons[ButtonField].Texture; + Fields[i].Button.Color = Buttons[ButtonField].Color; + Fields[i].Button.SColor = Buttons[ButtonField].SColor; Fields[i].Content = GameData.Rounds[i]; if (Fields[i].Content.Finished) { @@ -500,25 +500,25 @@ namespace Vocaluxe.PartyModes GameData.Rounds[SelectedField].SingerTeam2 = SingerTeam2; UpdateFieldContents(); - Texts[htTexts(TextNextPlayerT1)].Visible = true; - Texts[htTexts(TextNextPlayerT2)].Visible = true; - Texts[htTexts(TextNextPlayerNameT1)].Visible = true; - Texts[htTexts(TextNextPlayerNameT2)].Visible = true; + Texts[TextNextPlayerT1].Visible = true; + Texts[TextNextPlayerT2].Visible = true; + Texts[TextNextPlayerNameT1].Visible = true; + Texts[TextNextPlayerNameT2].Visible = true; SProfile[] profiles = CBase.Profiles.GetProfiles(); - Texts[htTexts(TextNextPlayerNameT1)].Text = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].PlayerName; - Texts[htTexts(TextNextPlayerNameT2)].Text = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].PlayerName; - Statics[htStatics(StaticAvatarT1)].Visible = true; - Statics[htStatics(StaticAvatarT2)].Visible = true; - Statics[htStatics(StaticAvatarT1)].Texture = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].Avatar.Texture; - Statics[htStatics(StaticAvatarT2)].Texture = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].Avatar.Texture; + Texts[TextNextPlayerNameT1].Text = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].PlayerName; + Texts[TextNextPlayerNameT2].Text = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].PlayerName; + Statics[StaticAvatarT1].Visible = true; + Statics[StaticAvatarT2].Visible = true; + Statics[StaticAvatarT1].Texture = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].Avatar.Texture; + Statics[StaticAvatarT2].Texture = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].Avatar.Texture; UpdateJokerButtons(); - Buttons[htButtons(ButtonNextRound)].Visible = true; - Buttons[htButtons(ButtonExit)].Visible = true; - Buttons[htButtons(ButtonBack)].Visible = false; + Buttons[ButtonNextRound].Visible = true; + Buttons[ButtonExit].Visible = true; + Buttons[ButtonBack].Visible = false; - SetInteractionToButton(Buttons[htButtons(ButtonNextRound)]); + SetInteractionToButton(Buttons[ButtonNextRound]); } private void FieldSelectedAgain() @@ -539,25 +539,25 @@ namespace Vocaluxe.PartyModes GameData.Rounds[SelectedField].SingerTeam2 = GameData.Rounds[OldSelectedField].SingerTeam2; UpdateFieldContents(); - Texts[htTexts(TextNextPlayerT1)].Visible = true; - Texts[htTexts(TextNextPlayerT2)].Visible = true; - Texts[htTexts(TextNextPlayerNameT1)].Visible = true; - Texts[htTexts(TextNextPlayerNameT2)].Visible = true; + Texts[TextNextPlayerT1].Visible = true; + Texts[TextNextPlayerT2].Visible = true; + Texts[TextNextPlayerNameT1].Visible = true; + Texts[TextNextPlayerNameT2].Visible = true; SProfile[] profiles = CBase.Profiles.GetProfiles(); - Texts[htTexts(TextNextPlayerNameT1)].Text = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].PlayerName; - Texts[htTexts(TextNextPlayerNameT2)].Text = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].PlayerName; - Statics[htStatics(StaticAvatarT1)].Visible = true; - Statics[htStatics(StaticAvatarT2)].Visible = true; - Statics[htStatics(StaticAvatarT1)].Texture = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].Avatar.Texture; - Statics[htStatics(StaticAvatarT2)].Texture = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].Avatar.Texture; + Texts[TextNextPlayerNameT1].Text = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].PlayerName; + Texts[TextNextPlayerNameT2].Text = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].PlayerName; + Statics[StaticAvatarT1].Visible = true; + Statics[StaticAvatarT2].Visible = true; + Statics[StaticAvatarT1].Texture = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].Avatar.Texture; + Statics[StaticAvatarT2].Texture = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].Avatar.Texture; UpdateJokerButtons(); - Buttons[htButtons(ButtonNextRound)].Visible = true; - Buttons[htButtons(ButtonExit)].Visible = true; - Buttons[htButtons(ButtonBack)].Visible = false; + Buttons[ButtonNextRound].Visible = true; + Buttons[ButtonExit].Visible = true; + Buttons[ButtonBack].Visible = false; - SetInteractionToButton(Buttons[htButtons(ButtonNextRound)]); + SetInteractionToButton(Buttons[ButtonNextRound]); } private void UseJoker(int TeamNr, int JokerNum) @@ -595,28 +595,28 @@ namespace Vocaluxe.PartyModes private void UpdateTeamChoosingMessage() { - Texts[htTexts(TextTeamChoosing)].Color = CBase.Theme.GetPlayerColor(GameData.Team + 1); - Texts[htTexts(TextTeamChoosing)].Text = CBase.Language.Translate("TR_TEAM", _PartyModeID) + " " + (GameData.Team + 1) + "! " + CBase.Language.Translate("TR_SCREENMAIN_TEAM_CHOOSE", _PartyModeID); + Texts[TextTeamChoosing].Color = CBase.Theme.GetPlayerColor(GameData.Team + 1); + Texts[TextTeamChoosing].Text = CBase.Language.Translate("TR_TEAM", _PartyModeID) + " " + (GameData.Team + 1) + "! " + CBase.Language.Translate("TR_SCREENMAIN_TEAM_CHOOSE", _PartyModeID); if (Status == EStatus.JokerRetry || Status == EStatus.FieldChoosing) - Texts[htTexts(TextTeamChoosing)].Visible = true; + Texts[TextTeamChoosing].Visible = true; else - Texts[htTexts(TextTeamChoosing)].Visible = false; + Texts[TextTeamChoosing].Visible = false; } private void UpdateJokerButtons() { - Buttons[htButtons(ButtonJokerRandomT1)].Visible = true; - Buttons[htButtons(ButtonJokerRandomT2)].Visible = true; - Buttons[htButtons(ButtonJokerRandomT1)].Text.Text = GameData.NumJokerRandom[0].ToString(); - Buttons[htButtons(ButtonJokerRandomT2)].Text.Text = GameData.NumJokerRandom[1].ToString(); - Buttons[htButtons(ButtonJokerRandomT1)].Enabled = GameData.NumJokerRandom[0] > 0; - Buttons[htButtons(ButtonJokerRandomT2)].Enabled = GameData.NumJokerRandom[1] > 0; - Buttons[htButtons(ButtonJokerRetryT1)].Visible = true; - Buttons[htButtons(ButtonJokerRetryT2)].Visible = true; - Buttons[htButtons(ButtonJokerRetryT1)].Text.Text = GameData.NumJokerRetry[0].ToString(); - Buttons[htButtons(ButtonJokerRetryT2)].Text.Text = GameData.NumJokerRetry[1].ToString(); - Buttons[htButtons(ButtonJokerRetryT1)].Enabled = GameData.NumJokerRetry[0] > 0; - Buttons[htButtons(ButtonJokerRetryT2)].Enabled = GameData.NumJokerRetry[1] > 0; + Buttons[ButtonJokerRandomT1].Visible = true; + Buttons[ButtonJokerRandomT2].Visible = true; + Buttons[ButtonJokerRandomT1].Text.Text = GameData.NumJokerRandom[0].ToString(); + Buttons[ButtonJokerRandomT2].Text.Text = GameData.NumJokerRandom[1].ToString(); + Buttons[ButtonJokerRandomT1].Enabled = GameData.NumJokerRandom[0] > 0; + Buttons[ButtonJokerRandomT2].Enabled = GameData.NumJokerRandom[1] > 0; + Buttons[ButtonJokerRetryT1].Visible = true; + Buttons[ButtonJokerRetryT2].Visible = true; + Buttons[ButtonJokerRetryT1].Text.Text = GameData.NumJokerRetry[0].ToString(); + Buttons[ButtonJokerRetryT2].Text.Text = GameData.NumJokerRetry[1].ToString(); + Buttons[ButtonJokerRetryT1].Enabled = GameData.NumJokerRetry[0] > 0; + Buttons[ButtonJokerRetryT2].Enabled = GameData.NumJokerRetry[1] > 0; } private void NextRound() @@ -642,13 +642,13 @@ namespace Vocaluxe.PartyModes { ExitPopupVisible = Visible; - Statics[htStatics(StaticPopupBG)].Visible = ExitPopupVisible; - Texts[htTexts(TextPopupReallyExit)].Visible = ExitPopupVisible; - Buttons[htButtons(ButtonPopupYes)].Visible = ExitPopupVisible; - Buttons[htButtons(ButtonPopupNo)].Visible = ExitPopupVisible; + Statics[StaticPopupBG].Visible = ExitPopupVisible; + Texts[TextPopupReallyExit].Visible = ExitPopupVisible; + Buttons[ButtonPopupYes].Visible = ExitPopupVisible; + Buttons[ButtonPopupNo].Visible = ExitPopupVisible; if (ExitPopupVisible) - SetInteractionToButton(Buttons[htButtons(ButtonPopupNo)]); + SetInteractionToButton(Buttons[ButtonPopupNo]); } private void Back() diff --git a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs index 7edfec94..c095028a 100644 --- a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs +++ b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs @@ -144,16 +144,16 @@ namespace Vocaluxe.PartyModes break; case Keys.Enter: - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) Next(); - if (Buttons[htButtons(ButtonPlayerChooseScrollUp)].Selected) + if (Buttons[ButtonPlayerChooseScrollUp].Selected) Scroll(-1); - if (Buttons[htButtons(ButtonPlayerChooseScrollDown)].Selected) + if (Buttons[ButtonPlayerChooseScrollDown].Selected) Scroll(1); if (!OnAdd()) @@ -277,16 +277,16 @@ namespace Vocaluxe.PartyModes if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (Buttons[htButtons(ButtonBack)].Selected) + if (Buttons[ButtonBack].Selected) Back(); - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) Next(); - if (Buttons[htButtons(ButtonPlayerChooseScrollUp)].Selected) + if (Buttons[ButtonPlayerChooseScrollUp].Selected) Scroll(-1); - if (Buttons[htButtons(ButtonPlayerChooseScrollDown)].Selected) + if (Buttons[ButtonPlayerChooseScrollDown].Selected) Scroll(1); } @@ -354,13 +354,13 @@ namespace Vocaluxe.PartyModes private void AddButtonPlayerDestination() { - Buttons[htButtons(ButtonPlayerDestination)].Visible = false; + Buttons[ButtonPlayerDestination].Visible = false; PlayerDestinationButtons = new List(); int row = 0; int column = 0; for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++) { - CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerDestination)]); + CButton b = GetNewButton(Buttons[ButtonPlayerDestination]); b.Rect.X = PlayerDestinationButtonsFirstX + column * (b.Rect.W + PlayerDestinationButtonsSpaceH); b.Rect.Y = PlayerDestinationButtonsFirstY + row * (b.Rect.H + PlayerDestinationButtonsSpaceW); PlayerDestinationButtons.Add(b); @@ -378,13 +378,13 @@ namespace Vocaluxe.PartyModes private void AddButtonPlayerChoose() { - Buttons[htButtons(ButtonPlayerChoose)].Visible = false; + Buttons[ButtonPlayerChoose].Visible = false; PlayerChooseButtons = new List(); int row = 0; int column = 0; for (int i = 1; i <= PlayerChooseButtonsNumH * PlayerChooseButtonsNumW; i++) { - CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerChoose)]); + CButton b = GetNewButton(Buttons[ButtonPlayerChoose]); b.Rect.X = PlayerChooseButtonsFirstX + column * (b.Rect.W + PlayerChooseButtonsSpaceH); b.Rect.Y = PlayerChooseButtonsFirstY + row * (b.Rect.H + PlayerChooseButtonsSpaceW); CPlayerChooseButton pcb = new CPlayerChooseButton(); @@ -414,8 +414,8 @@ namespace Vocaluxe.PartyModes { UpdateButtonPlayerChoose(PlayerChooseButtonsOffset); } - Buttons[htButtons(ButtonPlayerChooseScrollUp)].Enabled = PlayerChooseButtonsOffset > 0; - Buttons[htButtons(ButtonPlayerChooseScrollDown)].Enabled = PlayerChooseButtonsVisibleProfiles.Count > PlayerChooseButtons.Count + PlayerChooseButtonsOffset * PlayerChooseButtonsNumH; + Buttons[ButtonPlayerChooseScrollUp].Enabled = PlayerChooseButtonsOffset > 0; + Buttons[ButtonPlayerChooseScrollDown].Enabled = PlayerChooseButtonsVisibleProfiles.Count > PlayerChooseButtons.Count + PlayerChooseButtonsOffset * PlayerChooseButtonsNumH; } private void UpdateButtonPlayerChoose(int Offset) @@ -442,10 +442,10 @@ namespace Vocaluxe.PartyModes { PlayerChooseButtons[i].ProfileID = -1; PlayerChooseButtons[i].Button.Text.Text = String.Empty; - PlayerChooseButtons[i].Button.Texture = Buttons[htButtons(ButtonPlayerChoose)].Texture; - PlayerChooseButtons[i].Button.STexture = Buttons[htButtons(ButtonPlayerChoose)].STexture; - PlayerChooseButtons[i].Button.Color = Buttons[htButtons(ButtonPlayerChoose)].Color; - PlayerChooseButtons[i].Button.SColor = Buttons[htButtons(ButtonPlayerChoose)].SColor; + PlayerChooseButtons[i].Button.Texture = Buttons[ButtonPlayerChoose].Texture; + PlayerChooseButtons[i].Button.STexture = Buttons[ButtonPlayerChoose].STexture; + PlayerChooseButtons[i].Button.Color = Buttons[ButtonPlayerChoose].Color; + PlayerChooseButtons[i].Button.SColor = Buttons[ButtonPlayerChoose].SColor; PlayerChooseButtons[i].Button.Enabled = false; } } @@ -534,10 +534,10 @@ namespace Vocaluxe.PartyModes } else { - PlayerDestinationButtons[i].Color = Buttons[htButtons(ButtonPlayerDestination)].Color; - PlayerDestinationButtons[i].SColor = Buttons[htButtons(ButtonPlayerDestination)].SColor; - PlayerDestinationButtons[i].Texture = Buttons[htButtons(ButtonPlayerDestination)].Texture; - PlayerDestinationButtons[i].STexture = Buttons[htButtons(ButtonPlayerDestination)].STexture; + PlayerDestinationButtons[i].Color = Buttons[ButtonPlayerDestination].Color; + PlayerDestinationButtons[i].SColor = Buttons[ButtonPlayerDestination].SColor; + PlayerDestinationButtons[i].Texture = Buttons[ButtonPlayerDestination].Texture; + PlayerDestinationButtons[i].STexture = Buttons[ButtonPlayerDestination].STexture; PlayerDestinationButtons[i].Text.Text = String.Empty; PlayerDestinationButtons[i].Enabled = false; } @@ -558,10 +558,10 @@ namespace Vocaluxe.PartyModes } else { - PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Color = Buttons[htButtons(ButtonPlayerDestination)].Color; - PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].SColor = Buttons[htButtons(ButtonPlayerDestination)].SColor; - PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Texture = Buttons[htButtons(ButtonPlayerDestination)].Texture; - PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].STexture = Buttons[htButtons(ButtonPlayerDestination)].STexture; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Color = Buttons[ButtonPlayerDestination].Color; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].SColor = Buttons[ButtonPlayerDestination].SColor; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Texture = Buttons[ButtonPlayerDestination].Texture; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].STexture = Buttons[ButtonPlayerDestination].STexture; PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Text.Text = String.Empty; PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Enabled = false; } @@ -572,11 +572,11 @@ namespace Vocaluxe.PartyModes { if (Data.ScreenNames.ProfileIDsTeam1.Count == NumPlayerTeam1 && Data.ScreenNames.ProfileIDsTeam2.Count == NumPlayerTeam2) { - Buttons[htButtons(ButtonNext)].Visible = true; - SetInteractionToButton(Buttons[htButtons(ButtonNext)]); + Buttons[ButtonNext].Visible = true; + SetInteractionToButton(Buttons[ButtonNext]); } else - Buttons[htButtons(ButtonNext)].Visible = false; + Buttons[ButtonNext].Visible = false; } private bool OnAdd() diff --git a/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs b/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs index 72c59faf..13f5b04f 100644 --- a/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs +++ b/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs @@ -42,7 +42,7 @@ namespace Vocaluxe.Lib.Video i = CGstreamerVideoWrapper.LoadVideo(u.AbsoluteUri); return i; } - catch (Exception e) { } + catch (Exception) { } return i; } diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 495b9cdf..1e10751e 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -104,7 +104,7 @@ namespace Vocaluxe.Screens { base.LoadTheme(XmlPath); - _ScreenArea = Statics[htStatics(StaticBG)].Rect; + _ScreenArea = Statics[StaticBG].Rect; } public override bool HandleInput(KeyEvent KeyEvent) @@ -124,21 +124,21 @@ namespace Vocaluxe.Screens return false; case Keys.Enter: - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) CBackgroundMusic.Next(); - if (Buttons[htButtons(ButtonPrevious)].Selected) + if (Buttons[ButtonPrevious].Selected) CBackgroundMusic.Previous(); - if (Buttons[htButtons(ButtonPlay)].Selected) + if (Buttons[ButtonPlay].Selected) CBackgroundMusic.Play(); - if (Buttons[htButtons(ButtonPause)].Selected) + if (Buttons[ButtonPause].Selected) CBackgroundMusic.Pause(); - if (Buttons[htButtons(ButtonRepeat)].Selected) + if (Buttons[ButtonRepeat].Selected) CBackgroundMusic.RepeatSong = !CBackgroundMusic.RepeatSong; - if (Buttons[htButtons(ButtonShowVideo)].Selected) + if (Buttons[ButtonShowVideo].Selected) VideoPreview = !VideoPreview; - if (Buttons[htButtons(ButtonSing)].Selected) + if (Buttons[ButtonSing].Selected) StartSong(CBackgroundMusic.SongID, CBackgroundMusic.Duet); - if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) + if (Buttons[ButtonToBackgroundVideo].Selected) VideoBackground = !VideoBackground; break; } @@ -152,21 +152,21 @@ namespace Vocaluxe.Screens base.HandleMouse(MouseEvent); if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (Buttons[htButtons(ButtonNext)].Selected) + if (Buttons[ButtonNext].Selected) CBackgroundMusic.Next(); - if (Buttons[htButtons(ButtonPrevious)].Selected) + if (Buttons[ButtonPrevious].Selected) CBackgroundMusic.Previous(); - if (Buttons[htButtons(ButtonPlay)].Selected) + if (Buttons[ButtonPlay].Selected) CBackgroundMusic.Play(); - if (Buttons[htButtons(ButtonPause)].Selected) + if (Buttons[ButtonPause].Selected) CBackgroundMusic.Pause(); - if (Buttons[htButtons(ButtonRepeat)].Selected) + if (Buttons[ButtonRepeat].Selected) CBackgroundMusic.RepeatSong = !CBackgroundMusic.RepeatSong; - if (Buttons[htButtons(ButtonShowVideo)].Selected) + if (Buttons[ButtonShowVideo].Selected) VideoPreview = !VideoPreview; - if (Buttons[htButtons(ButtonSing)].Selected) + if (Buttons[ButtonSing].Selected) StartSong(CBackgroundMusic.SongID, CBackgroundMusic.Duet); - if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) + if (Buttons[ButtonToBackgroundVideo].Selected) VideoBackground = !VideoBackground; } else if (MouseEvent.LB) { @@ -183,11 +183,11 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { - Statics[htStatics(StaticCover)].Visible = !_VideoPreview || !CBackgroundMusic.SongHasVideo; - Buttons[htButtons(ButtonToBackgroundVideo)].Pressed = VideoBackground; - Buttons[htButtons(ButtonShowVideo)].Pressed = _VideoPreview; - Buttons[htButtons(ButtonRepeat)].Pressed = CBackgroundMusic.RepeatSong; - Buttons[htButtons(ButtonSing)].Visible = CBackgroundMusic.CanSing && CParty.CurrentPartyModeID == -1; + Statics[StaticCover].Visible = !_VideoPreview || !CBackgroundMusic.SongHasVideo; + Buttons[ButtonToBackgroundVideo].Pressed = VideoBackground; + Buttons[ButtonShowVideo].Pressed = _VideoPreview; + Buttons[ButtonRepeat].Pressed = CBackgroundMusic.RepeatSong; + Buttons[ButtonSing].Visible = CBackgroundMusic.CanSing && CParty.CurrentPartyModeID == -1; return true; } @@ -200,12 +200,12 @@ namespace Vocaluxe.Screens { if (!_Active) return false; - Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.Cover; + Statics[StaticCover].Texture = CBackgroundMusic.Cover; if (CBackgroundMusic.VideoEnabled && VideoPreview && CBackgroundMusic.SongHasVideo) - CDraw.DrawTexture(Statics[htStatics(StaticCover)], CBackgroundMusic.GetVideoTexture(), EAspect.Crop); - Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.Playing; - Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.Playing; - Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.ArtistAndTitle; + CDraw.DrawTexture(Statics[StaticCover], CBackgroundMusic.GetVideoTexture(), EAspect.Crop); + Buttons[ButtonPause].Visible = CBackgroundMusic.Playing; + Buttons[ButtonPlay].Visible = !CBackgroundMusic.Playing; + Texts[TextCurrentSong].Text = CBackgroundMusic.ArtistAndTitle; return base.Draw(); } diff --git a/Vocaluxe/Screens/CPopupScreenVolumeControl.cs b/Vocaluxe/Screens/CPopupScreenVolumeControl.cs index 19ef40d9..2256acb1 100644 --- a/Vocaluxe/Screens/CPopupScreenVolumeControl.cs +++ b/Vocaluxe/Screens/CPopupScreenVolumeControl.cs @@ -42,8 +42,8 @@ namespace Vocaluxe.Screens { base.LoadTheme(XmlPath); - _ScreenArea = Statics[htStatics(StaticBG)].Rect; - SelectSlides[htSelectSlides(SelectSlideVolume)].AddValues(new string[] { "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100" }); + _ScreenArea = Statics[StaticBG].Rect; + SelectSlides[SelectSlideVolume].AddValues(new string[] { "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100" }); } public override bool HandleInput(KeyEvent KeyEvent) @@ -62,19 +62,19 @@ namespace Vocaluxe.Screens } else if (MouseEvent.Wheel > 0 && CHelper.IsInBounds(_ScreenArea, MouseEvent)) { - if (SelectSlides[htSelectSlides(SelectSlideVolume)].Selection - MouseEvent.Wheel >= 0) - SelectSlides[htSelectSlides(SelectSlideVolume)].Selection = SelectSlides[htSelectSlides(SelectSlideVolume)].Selection - MouseEvent.Wheel; - else if (SelectSlides[htSelectSlides(SelectSlideVolume)].Selection - MouseEvent.Wheel < 0) - SelectSlides[htSelectSlides(SelectSlideVolume)].Selection = 0; + if (SelectSlides[SelectSlideVolume].Selection - MouseEvent.Wheel >= 0) + SelectSlides[SelectSlideVolume].Selection = SelectSlides[SelectSlideVolume].Selection - MouseEvent.Wheel; + else if (SelectSlides[SelectSlideVolume].Selection - MouseEvent.Wheel < 0) + SelectSlides[SelectSlideVolume].Selection = 0; SaveConfig(); return true; } else if (MouseEvent.Wheel < 0 && CHelper.IsInBounds(_ScreenArea, MouseEvent)) { - if (SelectSlides[htSelectSlides(SelectSlideVolume)].Selection - MouseEvent.Wheel < SelectSlides[htSelectSlides(SelectSlideVolume)].NumValues) - SelectSlides[htSelectSlides(SelectSlideVolume)].Selection = SelectSlides[htSelectSlides(SelectSlideVolume)].Selection - MouseEvent.Wheel; - else if (SelectSlides[htSelectSlides(SelectSlideVolume)].Selection - MouseEvent.Wheel >= SelectSlides[htSelectSlides(SelectSlideVolume)].NumValues) - SelectSlides[htSelectSlides(SelectSlideVolume)].Selection = SelectSlides[htSelectSlides(SelectSlideVolume)].NumValues - 1; + if (SelectSlides[SelectSlideVolume].Selection - MouseEvent.Wheel < SelectSlides[SelectSlideVolume].NumValues) + SelectSlides[SelectSlideVolume].Selection = SelectSlides[SelectSlideVolume].Selection - MouseEvent.Wheel; + else if (SelectSlides[SelectSlideVolume].Selection - MouseEvent.Wheel >= SelectSlides[SelectSlideVolume].NumValues) + SelectSlides[SelectSlideVolume].Selection = SelectSlides[SelectSlideVolume].NumValues - 1; SaveConfig(); return true; } @@ -111,20 +111,20 @@ namespace Vocaluxe.Screens { case EScreens.ScreenSong: if (CSongs.IsInCategory) - CConfig.PreviewMusicVolume = SelectSlides[htSelectSlides(SelectSlideVolume)].Selection * 5; + CConfig.PreviewMusicVolume = SelectSlides[SelectSlideVolume].Selection * 5; else { - CConfig.BackgroundMusicVolume = SelectSlides[htSelectSlides(SelectSlideVolume)].Selection * 5; + CConfig.BackgroundMusicVolume = SelectSlides[SelectSlideVolume].Selection * 5; CBackgroundMusic.ApplyVolume(); } break; case EScreens.ScreenSing: - CConfig.GameMusicVolume = SelectSlides[htSelectSlides(SelectSlideVolume)].Selection * 5; + CConfig.GameMusicVolume = SelectSlides[SelectSlideVolume].Selection * 5; break; default: - CConfig.BackgroundMusicVolume = SelectSlides[htSelectSlides(SelectSlideVolume)].Selection * 5; + CConfig.BackgroundMusicVolume = SelectSlides[SelectSlideVolume].Selection * 5; CBackgroundMusic.ApplyVolume(); break; } @@ -137,17 +137,17 @@ namespace Vocaluxe.Screens { case EScreens.ScreenSong: if(CSongs.IsInCategory) - SelectSlides[htSelectSlides(SelectSlideVolume)].Selection = (int)(CConfig.PreviewMusicVolume / 5); + SelectSlides[SelectSlideVolume].Selection = (int)(CConfig.PreviewMusicVolume / 5); else - SelectSlides[htSelectSlides(SelectSlideVolume)].Selection = ((int)CConfig.BackgroundMusicVolume / 5); + SelectSlides[SelectSlideVolume].Selection = ((int)CConfig.BackgroundMusicVolume / 5); break; case EScreens.ScreenSing: - SelectSlides[htSelectSlides(SelectSlideVolume)].Selection = ((int)CConfig.GameMusicVolume / 5); + SelectSlides[SelectSlideVolume].Selection = ((int)CConfig.GameMusicVolume / 5); break; default: - SelectSlides[htSelectSlides(SelectSlideVolume)].Selection = ((int)CConfig.BackgroundMusicVolume / 5); + SelectSlides[SelectSlideVolume].Selection = ((int)CConfig.BackgroundMusicVolume / 5); break; } } diff --git a/Vocaluxe/Screens/CScreenHighscore.cs b/Vocaluxe/Screens/CScreenHighscore.cs index fff28659..33a84e39 100644 --- a/Vocaluxe/Screens/CScreenHighscore.cs +++ b/Vocaluxe/Screens/CScreenHighscore.cs @@ -160,38 +160,38 @@ namespace Vocaluxe.Screens { if (_Pos + p < _Scores[_Round].Count) { - Texts[htTexts(TextNumber[p])].Visible = true; - Texts[htTexts(TextName[p])].Visible = true; - Texts[htTexts(TextScore[p])].Visible = true; - Texts[htTexts(TextDate[p])].Visible = true; + Texts[TextNumber[p]].Visible = true; + Texts[TextName[p]].Visible = true; + Texts[TextScore[p]].Visible = true; + Texts[TextDate[p]].Visible = true; - Texts[htTexts(TextNumber[p])].Text = (_Pos + p + 1).ToString(); + Texts[TextNumber[p]].Text = (_Pos + p + 1).ToString(); string name = _Scores[_Round][_Pos + p].Name; name += " [" + CLanguage.Translate(Enum.GetName(typeof(EGameDifficulty), _Scores[_Round][_Pos + p].Difficulty)) + "]"; if (_IsDuet) name += " (P" + (_Scores[_Round][_Pos + p].LineNr + 1).ToString() + ")"; - Texts[htTexts(TextName[p])].Text = name; + Texts[TextName[p]].Text = name; - Texts[htTexts(TextScore[p])].Text = _Scores[_Round][_Pos + p].Score.ToString("00000"); - Texts[htTexts(TextDate[p])].Text = _Scores[_Round][_Pos + p].Date; + Texts[TextScore[p]].Text = _Scores[_Round][_Pos + p].Score.ToString("00000"); + Texts[TextDate[p]].Text = _Scores[_Round][_Pos + p].Date; if (isNewEntry(_Scores[_Round][_Pos + p].ID) == true) { - ParticleEffects[htParticleEffects(ParticleEffectNew[p])].Visible = true; + ParticleEffects[ParticleEffectNew[p]].Visible = true; } else { - ParticleEffects[htParticleEffects(ParticleEffectNew[p])].Visible = false; + ParticleEffects[ParticleEffectNew[p]].Visible = false; } } else { - Texts[htTexts(TextNumber[p])].Visible = false; - Texts[htTexts(TextName[p])].Visible = false; - Texts[htTexts(TextScore[p])].Visible = false; - Texts[htTexts(TextDate[p])].Visible = false; - ParticleEffects[htParticleEffects(ParticleEffectNew[p])].Visible = false; + Texts[TextNumber[p]].Visible = false; + Texts[TextName[p]].Visible = false; + Texts[TextScore[p]].Visible = false; + Texts[TextDate[p]].Visible = false; + ParticleEffects[ParticleEffectNew[p]].Visible = false; } } return true; @@ -275,33 +275,33 @@ namespace Vocaluxe.Screens if (song == null) return; - Texts[htTexts(TextSongName)].Text = song.Artist + " - " + song.Title; + Texts[TextSongName].Text = song.Artist + " - " + song.Title; if (points.NumRounds > 1) { - Texts[htTexts(TextSongName)].Text += " (" + (_Round+1) + "/" + points.NumRounds + ")"; + Texts[TextSongName].Text += " (" + (_Round+1) + "/" + points.NumRounds + ")"; } switch (CGame.GetGameMode(_Round)) { case EGameMode.TR_GAMEMODE_NORMAL: - Texts[htTexts(TextSongMode)].Text = "TR_GAMEMODE_NORMAL"; + Texts[TextSongMode].Text = "TR_GAMEMODE_NORMAL"; break; case EGameMode.TR_GAMEMODE_MEDLEY: - Texts[htTexts(TextSongMode)].Text = "TR_GAMEMODE_MEDLEY"; + Texts[TextSongMode].Text = "TR_GAMEMODE_MEDLEY"; break; case EGameMode.TR_GAMEMODE_DUET: - Texts[htTexts(TextSongMode)].Text = "TR_GAMEMODE_DUET"; + Texts[TextSongMode].Text = "TR_GAMEMODE_DUET"; _IsDuet = true; break; case EGameMode.TR_GAMEMODE_SHORTSONG: - Texts[htTexts(TextSongMode)].Text = "TR_GAMEMODE_SHORTSONG"; + Texts[TextSongMode].Text = "TR_GAMEMODE_SHORTSONG"; break; default: - Texts[htTexts(TextSongMode)].Text = "TR_GAMEMODE_NORMAL"; + Texts[TextSongMode].Text = "TR_GAMEMODE_NORMAL"; break; } diff --git a/Vocaluxe/Screens/CScreenLoad.cs b/Vocaluxe/Screens/CScreenLoad.cs index 6b83f4fb..8569ab59 100644 --- a/Vocaluxe/Screens/CScreenLoad.cs +++ b/Vocaluxe/Screens/CScreenLoad.cs @@ -106,7 +106,7 @@ namespace Vocaluxe.Screens _SongLoaderThread = new Thread(new ThreadStart(CSongs.LoadSongs)); _SongLoaderThread.Name = "SongLoader"; - Texts[htTexts(TextStatus)].Text = CLanguage.Translate("TR_SCREENLOAD_TOTAL") + ": 0 " + + Texts[TextStatus].Text = CLanguage.Translate("TR_SCREENLOAD_TOTAL") + ": 0 " + CLanguage.Translate("TR_SCREENLOAD_SONGS") + " (0 " + CLanguage.Translate("TR_SCREENLOAD_LOADED") + ")"; @@ -175,7 +175,7 @@ namespace Vocaluxe.Screens if (CSettings.GameState == EGameState.Normal) CGraphics.FadeTo(EScreens.ScreenMain); - Texts[htTexts(TextStatus)].Text = + Texts[TextStatus].Text = CLanguage.Translate("TR_SCREENLOAD_TOTAL") + ": " + CSongs.NumAllSongs.ToString() + " " + CLanguage.Translate("TR_SCREENLOAD_SONGS") + " (" + CSongs.NumSongsWithCoverLoaded + " " + CLanguage.Translate("TR_SCREENLOAD_LOADED") + ")"; diff --git a/Vocaluxe/Screens/CScreenMain.cs b/Vocaluxe/Screens/CScreenMain.cs index 79f31142..4278b878 100644 --- a/Vocaluxe/Screens/CScreenMain.cs +++ b/Vocaluxe/Screens/CScreenMain.cs @@ -74,22 +74,22 @@ namespace Vocaluxe.Screens break; case Keys.Enter: - if (Buttons[htButtons(ButtonSing)].Selected) + if (Buttons[ButtonSing].Selected) { CParty.SetNormalGameMode(); CGraphics.FadeTo(EScreens.ScreenSong); } - if (Buttons[htButtons(ButtonParty)].Selected) + if (Buttons[ButtonParty].Selected) CGraphics.FadeTo(EScreens.ScreenParty); - if (Buttons[htButtons(ButtonOptions)].Selected) + if (Buttons[ButtonOptions].Selected) CGraphics.FadeTo(EScreens.ScreenOptions); - if (Buttons[htButtons(ButtonProfiles)].Selected) + if (Buttons[ButtonProfiles].Selected) CGraphics.FadeTo(EScreens.ScreenProfiles); - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) return false; break; @@ -104,22 +104,22 @@ namespace Vocaluxe.Screens if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (Buttons[htButtons(ButtonSing)].Selected) + if (Buttons[ButtonSing].Selected) { CParty.SetNormalGameMode(); CGraphics.FadeTo(EScreens.ScreenSong); } - if (Buttons[htButtons(ButtonParty)].Selected) + if (Buttons[ButtonParty].Selected) CGraphics.FadeTo(EScreens.ScreenParty); - if (Buttons[htButtons(ButtonOptions)].Selected) + if (Buttons[ButtonOptions].Selected) CGraphics.FadeTo(EScreens.ScreenOptions); - if (Buttons[htButtons(ButtonProfiles)].Selected) + if (Buttons[ButtonProfiles].Selected) CGraphics.FadeTo(EScreens.ScreenProfiles); - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) return false; } diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs index 1767dd95..269cb060 100644 --- a/Vocaluxe/Screens/CScreenNames.cs +++ b/Vocaluxe/Screens/CScreenNames.cs @@ -107,12 +107,12 @@ namespace Vocaluxe.Screens for (int i = 0; i < CSettings.MaxNumPlayer; i++) { - OriginalPlayerAvatarTextures[i] = Statics[htStatics(StaticPlayerAvatar[i])].Texture; + OriginalPlayerAvatarTextures[i] = Statics[StaticPlayerAvatar[i]].Texture; } for (int i = 1; i <= CSettings.MaxNumPlayer; i++) { - Equalizers[htEqualizer("EqualizerPlayer" + i)].ScreenHandles = true; + Equalizers["EqualizerPlayer" + i].ScreenHandles = true; } } @@ -123,20 +123,20 @@ namespace Vocaluxe.Screens case Keys.Add: if (CConfig.NumPlayer + 1 <= CSettings.MaxNumPlayer) { - SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Selection = CConfig.NumPlayer; + SelectSlides[SelectSlidePlayerNumber].Selection = CConfig.NumPlayer; UpdatePlayerNumber(); //Update Tiles-List - NameSelections[htNameSelections(NameSelection)].UpdateList(); + NameSelections[NameSelection].UpdateList(); } break; case Keys.Subtract: if (CConfig.NumPlayer - 1 > 0) { - SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Selection = CConfig.NumPlayer - 2; + SelectSlides[SelectSlidePlayerNumber].Selection = CConfig.NumPlayer - 2; UpdatePlayerNumber(); //Update Tiles-List - NameSelections[htNameSelections(NameSelection)].UpdateList(); + NameSelections[NameSelection].UpdateList(); } break; @@ -152,7 +152,7 @@ namespace Vocaluxe.Screens selectingKeyboardPlayerNr++; else selectingKeyboardPlayerNr = 1; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, selectingKeyboardPlayerNr); + NameSelections[NameSelection].KeyboardSelection(true, selectingKeyboardPlayerNr); } break; } @@ -160,14 +160,14 @@ namespace Vocaluxe.Screens if (selectingKeyboardActive) { //Handle left/right/up/down - NameSelections[htNameSelections(NameSelection)].HandleInput(KeyEvent); + NameSelections[NameSelection].HandleInput(KeyEvent); switch (KeyEvent.Key) { case Keys.Enter: //Check, if a player is selected - if (NameSelections[htNameSelections(NameSelection)].Selection > -1) + if (NameSelections[NameSelection].Selection > -1) { - SelectedPlayerNr = NameSelections[htNameSelections(NameSelection)].Selection; + SelectedPlayerNr = NameSelections[NameSelection].Selection; //Update Game-infos with new player CGame.Player[selectingKeyboardPlayerNr-1].Name = CProfiles.Profiles[SelectedPlayerNr].PlayerName; CGame.Player[selectingKeyboardPlayerNr-1].Difficulty = CProfiles.Profiles[SelectedPlayerNr].Difficulty; @@ -176,13 +176,13 @@ namespace Vocaluxe.Screens CConfig.Players[selectingKeyboardPlayerNr - 1] = CProfiles.Profiles[SelectedPlayerNr].ProfileFile; CConfig.SaveConfig(); //Update texture and name - Statics[htStatics(StaticPlayerAvatar[selectingKeyboardPlayerNr-1])].Texture = CProfiles.Profiles[SelectedPlayerNr].Avatar.Texture; - Texts[htTexts(TextPlayer[selectingKeyboardPlayerNr-1])].Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName; + Statics[StaticPlayerAvatar[selectingKeyboardPlayerNr-1]].Texture = CProfiles.Profiles[SelectedPlayerNr].Avatar.Texture; + Texts[TextPlayer[selectingKeyboardPlayerNr-1]].Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName; //Update profile-warning CheckPlayers(); //Update Tiles-List - NameSelections[htNameSelections(NameSelection)].UpdateList(); - SetInteractionToButton(Buttons[htButtons(ButtonStart)]); + NameSelections[NameSelection].UpdateList(); + SetInteractionToButton(Buttons[ButtonStart]); } //Started selecting with 'P' if (selectingKeyboardUnendless) @@ -192,12 +192,12 @@ namespace Vocaluxe.Screens //Reset all values selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + NameSelections[NameSelection].KeyboardSelection(false, -1); } else { selectingKeyboardPlayerNr++; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, selectingKeyboardPlayerNr); + NameSelections[NameSelection].KeyboardSelection(true, selectingKeyboardPlayerNr); } } else @@ -205,7 +205,7 @@ namespace Vocaluxe.Screens //Reset all values selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + NameSelections[NameSelection].KeyboardSelection(false, -1); } break; @@ -216,12 +216,12 @@ namespace Vocaluxe.Screens //Reset all values selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + NameSelections[NameSelection].KeyboardSelection(false, -1); } else { selectingKeyboardPlayerNr = 1; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 1); + NameSelections[NameSelection].KeyboardSelection(true, 1); } selectingKeyboardUnendless = false; break; @@ -232,12 +232,12 @@ namespace Vocaluxe.Screens //Reset all values selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + NameSelections[NameSelection].KeyboardSelection(false, -1); } else { selectingKeyboardPlayerNr = 2; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 2); + NameSelections[NameSelection].KeyboardSelection(true, 2); } selectingKeyboardUnendless = false; break; @@ -248,12 +248,12 @@ namespace Vocaluxe.Screens //Reset all values selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + NameSelections[NameSelection].KeyboardSelection(false, -1); } else { selectingKeyboardPlayerNr = 3; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 3); + NameSelections[NameSelection].KeyboardSelection(true, 3); } selectingKeyboardUnendless = false; break; @@ -264,12 +264,12 @@ namespace Vocaluxe.Screens //Reset all values selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + NameSelections[NameSelection].KeyboardSelection(false, -1); } else { selectingKeyboardPlayerNr = 4; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 4); + NameSelections[NameSelection].KeyboardSelection(true, 4); } selectingKeyboardUnendless = false; break; @@ -280,12 +280,12 @@ namespace Vocaluxe.Screens //Reset all values selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + NameSelections[NameSelection].KeyboardSelection(false, -1); } else { selectingKeyboardPlayerNr = 5; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 5); + NameSelections[NameSelection].KeyboardSelection(true, 5); } selectingKeyboardUnendless = false; break; @@ -296,12 +296,12 @@ namespace Vocaluxe.Screens //Reset all values selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + NameSelections[NameSelection].KeyboardSelection(false, -1); } else { selectingKeyboardPlayerNr = 6; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 6); + NameSelections[NameSelection].KeyboardSelection(true, 6); } selectingKeyboardUnendless = false; break; @@ -311,7 +311,7 @@ namespace Vocaluxe.Screens selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; selectingKeyboardUnendless = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + NameSelections[NameSelection].KeyboardSelection(false, -1); break; case Keys.Delete: @@ -323,31 +323,31 @@ namespace Vocaluxe.Screens CConfig.Players[selectingKeyboardPlayerNr - 1] = String.Empty; CConfig.SaveConfig(); //Update texture and name - Statics[htStatics(StaticPlayerAvatar[selectingKeyboardPlayerNr - 1])].Texture = OriginalPlayerAvatarTextures[selectingKeyboardPlayerNr - 1]; - Texts[htTexts(TextPlayer[selectingKeyboardPlayerNr - 1])].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + selectingKeyboardPlayerNr.ToString(); + Statics[StaticPlayerAvatar[selectingKeyboardPlayerNr - 1]].Texture = OriginalPlayerAvatarTextures[selectingKeyboardPlayerNr - 1]; + Texts[TextPlayer[selectingKeyboardPlayerNr - 1]].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + selectingKeyboardPlayerNr.ToString(); //Update profile-warning CheckPlayers(); //Reset all values selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); + NameSelections[NameSelection].KeyboardSelection(false, -1); //Update Tiles-List - NameSelections[htNameSelections(NameSelection)].UpdateList(); + NameSelections[NameSelection].UpdateList(); break; case Keys.F10: if (CGame.GetNumSongs() == 1 && CGame.GetSong(1).IsDuet) { - if (SelectSlides[htSelectSlides(SelectSlideDuetPlayer[selectingKeyboardPlayerNr - 1])].Selection == 0) - SelectSlides[htSelectSlides(SelectSlideDuetPlayer[selectingKeyboardPlayerNr - 1])].Selection = 1; + if (SelectSlides[SelectSlideDuetPlayer[selectingKeyboardPlayerNr - 1]].Selection == 0) + SelectSlides[SelectSlideDuetPlayer[selectingKeyboardPlayerNr - 1]].Selection = 1; else - SelectSlides[htSelectSlides(SelectSlideDuetPlayer[selectingKeyboardPlayerNr - 1])].Selection = 0; + SelectSlides[SelectSlideDuetPlayer[selectingKeyboardPlayerNr - 1]].Selection = 0; //Reset all values selectingKeyboardPlayerNr = 0; selectingKeyboardActive = false; selectingKeyboardUnendless = false; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1); - SetInteractionToButton(Buttons[htButtons(ButtonStart)]); + NameSelections[NameSelection].KeyboardSelection(false, -1); + SetInteractionToButton(Buttons[ButtonStart]); } break; @@ -367,13 +367,13 @@ namespace Vocaluxe.Screens case Keys.Enter: - if (!processed && Buttons[htButtons(ButtonBack)].Selected) + if (!processed && Buttons[ButtonBack].Selected) { processed = true; CGraphics.FadeTo(EScreens.ScreenSong); } - if (!processed /* && Buttons[htButtons(ButtonStart)].Selected */) + if (!processed /* && Buttons[ButtonStart].Selected */) { processed = true; StartSong(); @@ -418,7 +418,7 @@ namespace Vocaluxe.Screens if (selectingKeyboardPlayerNr > 0 && selectingKeyboardPlayerNr <= CConfig.NumPlayer) { selectingKeyboardActive = true; - NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, selectingKeyboardPlayerNr); + NameSelections[NameSelection].KeyboardSelection(true, selectingKeyboardPlayerNr); } } @@ -436,17 +436,17 @@ namespace Vocaluxe.Screens OldMouseX = MouseEvent.X; OldMouseY = MouseEvent.Y; //Check if mouse if over tile - if (NameSelections[htNameSelections(NameSelection)].isOverTile(MouseEvent)) + if (NameSelections[NameSelection].isOverTile(MouseEvent)) { //Get player-number of tile - SelectedPlayerNr = NameSelections[htNameSelections(NameSelection)].TilePlayerNr(MouseEvent); + SelectedPlayerNr = NameSelections[NameSelection].TilePlayerNr(MouseEvent); if (SelectedPlayerNr != -1) { //Activate mouse-selecting selectingMouseActive = true; //Update of Drag/Drop-Texture - CStatic SelectedPlayer = NameSelections[htNameSelections(NameSelection)].TilePlayerAvatar(MouseEvent); + CStatic SelectedPlayer = NameSelections[NameSelection].TilePlayerAvatar(MouseEvent); chooseAvatarStatic.Visible = true; chooseAvatarStatic.Rect = SelectedPlayer.Rect; chooseAvatarStatic.Rect.Z = CSettings.zNear; @@ -475,10 +475,10 @@ namespace Vocaluxe.Screens for (int i = 0; i < StaticPlayer.Length; i++) { //Check first, if area is "active" - if (Statics[htStatics(StaticPlayer[i])].Visible == true) + if (Statics[StaticPlayer[i]].Visible == true) { //Check if Mouse is in area - if (CHelper.IsInBounds(Statics[htStatics(StaticPlayer[i])].Rect, MouseEvent)) + if (CHelper.IsInBounds(Statics[StaticPlayer[i]].Rect, MouseEvent)) { //Update Game-infos with new player CGame.Player[i].Name = CProfiles.Profiles[SelectedPlayerNr].PlayerName; @@ -488,12 +488,12 @@ namespace Vocaluxe.Screens CConfig.Players[i] = CProfiles.Profiles[SelectedPlayerNr].ProfileFile; CConfig.SaveConfig(); //Update texture and name - Statics[htStatics(StaticPlayerAvatar[i])].Texture = chooseAvatarStatic.Texture; - Texts[htTexts(TextPlayer[i])].Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName; + Statics[StaticPlayerAvatar[i]].Texture = chooseAvatarStatic.Texture; + Texts[TextPlayer[i]].Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName; //Update profile-warning CheckPlayers(); //Update Tiles-List - NameSelections[htNameSelections(NameSelection)].UpdateList(); + NameSelections[NameSelection].UpdateList(); } } } @@ -513,13 +513,13 @@ namespace Vocaluxe.Screens { bool processed = false; - if (!processed && Buttons[htButtons(ButtonBack)].Selected) + if (!processed && Buttons[ButtonBack].Selected) { processed = true; CGraphics.FadeTo(EScreens.ScreenSong); } - if (!processed && Buttons[htButtons(ButtonStart)].Selected) + if (!processed && Buttons[ButtonStart].Selected) { processed = true; StartSong(); @@ -528,7 +528,7 @@ namespace Vocaluxe.Screens if (!processed) UpdatePlayerNumber(); //Update Tiles-List - NameSelections[htNameSelections(NameSelection)].UpdateList(); + NameSelections[NameSelection].UpdateList(); } if (MouseEvent.RB) @@ -538,7 +538,7 @@ namespace Vocaluxe.Screens //Remove profile-selection for (int i = 0; i < CConfig.NumPlayer; i++) { - if (CHelper.IsInBounds(Statics[htStatics(StaticPlayer[i])].Rect, MouseEvent)) + if (CHelper.IsInBounds(Statics[StaticPlayer[i]].Rect, MouseEvent)) { CGame.Player[i].ProfileID = -1; CGame.Player[i].Name = String.Empty; @@ -547,12 +547,12 @@ namespace Vocaluxe.Screens CConfig.Players[i] = String.Empty; CConfig.SaveConfig(); //Update texture and name - Statics[htStatics(StaticPlayerAvatar[i])].Texture = OriginalPlayerAvatarTextures[i]; - Texts[htTexts(TextPlayer[i])].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + (i+1).ToString(); + Statics[StaticPlayerAvatar[i]].Texture = OriginalPlayerAvatarTextures[i]; + Texts[TextPlayer[i]].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + (i+1).ToString(); //Update profile-warning CheckPlayers(); //Update Tiles-List - NameSelections[htNameSelections(NameSelection)].UpdateList(); + NameSelections[NameSelection].UpdateList(); exit = false; } } @@ -563,10 +563,10 @@ namespace Vocaluxe.Screens //Check mouse-wheel for scrolling if (MouseEvent.Wheel != 0) { - if (CHelper.IsInBounds(NameSelections[htNameSelections(NameSelection)].Rect, MouseEvent)) + if (CHelper.IsInBounds(NameSelections[NameSelection].Rect, MouseEvent)) { - int offset = NameSelections[htNameSelections(NameSelection)]._Offset + MouseEvent.Wheel; - NameSelections[htNameSelections(NameSelection)].UpdateList(offset); + int offset = NameSelections[NameSelection]._Offset + MouseEvent.Wheel; + NameSelections[NameSelection].UpdateList(offset); } } return true; @@ -577,7 +577,7 @@ namespace Vocaluxe.Screens for (int i = 1; i <= CGame.NumPlayer; i++) { CSound.AnalyzeBuffer((i-1)); - Equalizers[htEqualizer("EqualizerPlayer" + i)].Update(CSound.ToneWeigth((i-1))); + Equalizers["EqualizerPlayer" + i].Update(CSound.ToneWeigth((i-1))); } return true; } @@ -587,7 +587,7 @@ namespace Vocaluxe.Screens base.OnShow(); CSound.RecordStart(); - NameSelections[htNameSelections(NameSelection)].Init(); + NameSelections[NameSelection].Init(); UpdateSlides(); UpdatePlayerNumber(); @@ -599,28 +599,28 @@ namespace Vocaluxe.Screens //Update texture and name if (CConfig.Players[i].Length > 0) { - Statics[htStatics(StaticPlayerAvatar[i])].Texture = CProfiles.Profiles[CGame.Player[i].ProfileID].Avatar.Texture; - Texts[htTexts(TextPlayer[i])].Text = CProfiles.Profiles[CGame.Player[i].ProfileID].PlayerName; + Statics[StaticPlayerAvatar[i]].Texture = CProfiles.Profiles[CGame.Player[i].ProfileID].Avatar.Texture; + Texts[TextPlayer[i]].Text = CProfiles.Profiles[CGame.Player[i].ProfileID].PlayerName; } if (CGame.GetNumSongs() == 1 && CGame.GetSong(1).IsDuet) { - SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Clear(); + SelectSlides[SelectSlideDuetPlayer[i]].Clear(); if (i + 1 <= CGame.NumPlayer) - SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Visible = true; + SelectSlides[SelectSlideDuetPlayer[i]].Visible = true; else - SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Visible = false; - SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].AddValue(CGame.GetSong(1).DuetPart1); - SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].AddValue(CGame.GetSong(1).DuetPart2); + SelectSlides[SelectSlideDuetPlayer[i]].Visible = false; + SelectSlides[SelectSlideDuetPlayer[i]].AddValue(CGame.GetSong(1).DuetPart1); + SelectSlides[SelectSlideDuetPlayer[i]].AddValue(CGame.GetSong(1).DuetPart2); if ((i + 1) % 2 == 0) - SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Selection = 1; + SelectSlides[SelectSlideDuetPlayer[i]].Selection = 1; else - SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Selection = 0; + SelectSlides[SelectSlideDuetPlayer[i]].Selection = 0; } else - SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Visible = false; + SelectSlides[SelectSlideDuetPlayer[i]].Visible = false; } - SetInteractionToButton(Buttons[htButtons(ButtonStart)]); + SetInteractionToButton(Buttons[ButtonStart]); } public override void OnClose() @@ -639,7 +639,7 @@ namespace Vocaluxe.Screens } for (int i = 1; i <= CGame.NumPlayer; i++) { - Equalizers[htEqualizer("EqualizerPlayer" + i)].Draw(); + Equalizers["EqualizerPlayer" + i].Draw(); } return true; } @@ -664,7 +664,7 @@ namespace Vocaluxe.Screens } if (CGame.GetNumSongs() == 1 && CGame.GetSong(1).IsDuet) { - CGame.Player[i].LineNr = SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Selection; + CGame.Player[i].LineNr = SelectSlides[SelectSlideDuetPlayer[i]].Selection; } } @@ -673,40 +673,40 @@ namespace Vocaluxe.Screens private void UpdateSlides() { - SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Clear(); + SelectSlides[SelectSlidePlayerNumber].Clear(); for (int i = 1; i <= CSettings.MaxNumPlayer; i++) { - SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].AddValue(CLanguage.Translate("TR_SCREENNAMES_" + i + "PLAYER")); + SelectSlides[SelectSlidePlayerNumber].AddValue(CLanguage.Translate("TR_SCREENNAMES_" + i + "PLAYER")); } - SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Selection = CConfig.NumPlayer - 1; + SelectSlides[SelectSlidePlayerNumber].Selection = CConfig.NumPlayer - 1; } private void UpdatePlayerNumber() { - CConfig.NumPlayer = (int)SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Selection + 1; - CGame.NumPlayer = (int)SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Selection + 1; + CConfig.NumPlayer = (int)SelectSlides[SelectSlidePlayerNumber].Selection + 1; + CGame.NumPlayer = (int)SelectSlides[SelectSlidePlayerNumber].Selection + 1; for (int i = 1; i <= CSettings.MaxNumPlayer; i++) { if (i <= CGame.NumPlayer) { - Statics[htStatics("StaticPlayer" + i)].Visible = true; - Statics[htStatics("StaticPlayerAvatar" + i)].Visible = true; - Texts[htTexts("TextPlayer" + i)].Visible = true; - if (Texts[htTexts("TextPlayer" + i)].Text.Length == 0) + Statics["StaticPlayer" + i].Visible = true; + Statics["StaticPlayerAvatar" + i].Visible = true; + Texts["TextPlayer" + i].Visible = true; + if (Texts["TextPlayer" + i].Text.Length == 0) { - Texts[htTexts("TextPlayer" + i)].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + i.ToString(); + Texts["TextPlayer" + i].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + i.ToString(); } - Equalizers[htEqualizer("EqualizerPlayer" + i)].Visible = true; + Equalizers["EqualizerPlayer" + i].Visible = true; if (CGame.GetNumSongs() == 1 && CGame.GetSong(1).IsDuet) - SelectSlides[htSelectSlides("SelectSlideDuetPlayer" + i)].Visible = true; + SelectSlides["SelectSlideDuetPlayer" + i].Visible = true; } else { - Statics[htStatics("StaticPlayer" + i)].Visible = false; - Statics[htStatics("StaticPlayerAvatar" + i)].Visible = false; - Texts[htTexts("TextPlayer" + i)].Visible = false; - Equalizers[htEqualizer("EqualizerPlayer" + i)].Visible = false; - SelectSlides[htSelectSlides("SelectSlideDuetPlayer" + i)].Visible = false; + Statics["StaticPlayer" + i].Visible = false; + Statics["StaticPlayerAvatar" + i].Visible = false; + Texts["TextPlayer" + i].Visible = false; + Equalizers["EqualizerPlayer" + i].Visible = false; + SelectSlides["SelectSlideDuetPlayer" + i].Visible = false; } } CConfig.SaveConfig(); @@ -726,8 +726,8 @@ namespace Vocaluxe.Screens } if (_PlayerWithoutMicro.Count > 0) { - Statics[htStatics(StaticWarningMics)].Visible = true; - Texts[htTexts(TextWarningMics)].Visible = true; + Statics[StaticWarningMics].Visible = true; + Texts[TextWarningMics].Visible = true; if (_PlayerWithoutMicro.Count > 1) { @@ -748,17 +748,17 @@ namespace Vocaluxe.Screens } } - Texts[htTexts(TextWarningMics)].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_MICS_PL").Replace("%v", PlayerNums); + Texts[TextWarningMics].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_MICS_PL").Replace("%v", PlayerNums); } else { - Texts[htTexts(TextWarningMics)].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_MICS_SG").Replace("%v", _PlayerWithoutMicro[0].ToString()); + Texts[TextWarningMics].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_MICS_SG").Replace("%v", _PlayerWithoutMicro[0].ToString()); } } else { - Statics[htStatics(StaticWarningMics)].Visible = false; - Texts[htTexts(TextWarningMics)].Visible = false; + Statics[StaticWarningMics].Visible = false; + Texts[TextWarningMics].Visible = false; } } @@ -775,8 +775,8 @@ namespace Vocaluxe.Screens if (_PlayerWithoutProfile.Count > 0) { - Statics[htStatics(StaticWarningProfiles)].Visible = true; - Texts[htTexts(TextWarningProfiles)].Visible = true; + Statics[StaticWarningProfiles].Visible = true; + Texts[TextWarningProfiles].Visible = true; if (_PlayerWithoutProfile.Count > 1) { @@ -797,17 +797,17 @@ namespace Vocaluxe.Screens } } - Texts[htTexts(TextWarningProfiles)].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_PROFILES_PL").Replace("%v", PlayerNums); + Texts[TextWarningProfiles].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_PROFILES_PL").Replace("%v", PlayerNums); } else { - Texts[htTexts(TextWarningProfiles)].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_PROFILES_SG").Replace("%v", _PlayerWithoutProfile[0].ToString()); + Texts[TextWarningProfiles].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_PROFILES_SG").Replace("%v", _PlayerWithoutProfile[0].ToString()); } } else { - Statics[htStatics(StaticWarningProfiles)].Visible = false; - Texts[htTexts(TextWarningProfiles)].Visible = false; + Statics[StaticWarningProfiles].Visible = false; + Texts[TextWarningProfiles].Visible = false; } } } diff --git a/Vocaluxe/Screens/CScreenOptions.cs b/Vocaluxe/Screens/CScreenOptions.cs index 755a03c3..addb4a58 100644 --- a/Vocaluxe/Screens/CScreenOptions.cs +++ b/Vocaluxe/Screens/CScreenOptions.cs @@ -57,22 +57,22 @@ namespace Vocaluxe.Screens break; case Keys.Enter: - if (Buttons[htButtons(ButtonOptionsGame)].Selected) + if (Buttons[ButtonOptionsGame].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsGame); - if (Buttons[htButtons(ButtonOptionsSound)].Selected) + if (Buttons[ButtonOptionsSound].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsSound); - if (Buttons[htButtons(ButtonOptionsRecord)].Selected) + if (Buttons[ButtonOptionsRecord].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsRecord); - if (Buttons[htButtons(ButtonOptionsVideo)].Selected) + if (Buttons[ButtonOptionsVideo].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsVideo); - if (Buttons[htButtons(ButtonOptionsLyrics)].Selected) + if (Buttons[ButtonOptionsLyrics].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsLyrics); - if (Buttons[htButtons(ButtonOptionsTheme)].Selected) + if (Buttons[ButtonOptionsTheme].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsTheme); break; @@ -87,22 +87,22 @@ namespace Vocaluxe.Screens if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (Buttons[htButtons(ButtonOptionsGame)].Selected) + if (Buttons[ButtonOptionsGame].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsGame); - if (Buttons[htButtons(ButtonOptionsSound)].Selected) + if (Buttons[ButtonOptionsSound].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsSound); - if (Buttons[htButtons(ButtonOptionsRecord)].Selected) + if (Buttons[ButtonOptionsRecord].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsRecord); - if (Buttons[htButtons(ButtonOptionsVideo)].Selected) + if (Buttons[ButtonOptionsVideo].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsVideo); - if (Buttons[htButtons(ButtonOptionsLyrics)].Selected) + if (Buttons[ButtonOptionsLyrics].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsLyrics); - if (Buttons[htButtons(ButtonOptionsTheme)].Selected) + if (Buttons[ButtonOptionsTheme].Selected) CGraphics.FadeTo(EScreens.ScreenOptionsTheme); } diff --git a/Vocaluxe/Screens/CScreenOptionsGame.cs b/Vocaluxe/Screens/CScreenOptionsGame.cs index 3bb48d0d..1dd242d4 100644 --- a/Vocaluxe/Screens/CScreenOptionsGame.cs +++ b/Vocaluxe/Screens/CScreenOptionsGame.cs @@ -55,14 +55,14 @@ namespace Vocaluxe.Screens { base.LoadTheme(XmlPath); - SelectSlides[htSelectSlides(SelectSlideLanguage)].AddValues(_Languages); - SelectSlides[htSelectSlides(SelectSlideLanguage)].Selection = _CurrentLang; + SelectSlides[SelectSlideLanguage].AddValues(_Languages); + SelectSlides[SelectSlideLanguage].Selection = _CurrentLang; - SelectSlides[htSelectSlides(SelectSlideDebugLevel)].SetValues((int)CConfig.DebugLevel); - SelectSlides[htSelectSlides(SelectSlideSongMenu)].SetValues((int)CConfig.SongMenu); - SelectSlides[htSelectSlides(SelectSlideSongSorting)].SetValues((int)CConfig.SongSorting); - SelectSlides[htSelectSlides(SelectSlideTabs)].SetValues((int)CConfig.Tabs); - SelectSlides[htSelectSlides(SelectSlideTimerMode)].SetValues((int)CConfig.TimerMode); + SelectSlides[SelectSlideDebugLevel].SetValues((int)CConfig.DebugLevel); + SelectSlides[SelectSlideSongMenu].SetValues((int)CConfig.SongMenu); + SelectSlides[SelectSlideSongSorting].SetValues((int)CConfig.SongSorting); + SelectSlides[SelectSlideTabs].SetValues((int)CConfig.Tabs); + SelectSlides[SelectSlideTimerMode].SetValues((int)CConfig.TimerMode); } @@ -90,7 +90,7 @@ namespace Vocaluxe.Screens break; case Keys.Enter: - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { SaveConfig(); CGraphics.FadeTo(EScreens.ScreenOptions); @@ -122,7 +122,7 @@ namespace Vocaluxe.Screens if (MouseEvent.LB && IsMouseOver(MouseEvent)) { SaveConfig(); - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { CGraphics.FadeTo(EScreens.ScreenOptions); } @@ -143,12 +143,12 @@ namespace Vocaluxe.Screens private void SaveConfig() { - CConfig.Language = _Languages[SelectSlides[htSelectSlides(SelectSlideLanguage)].Selection]; - CConfig.DebugLevel = (EDebugLevel)SelectSlides[htSelectSlides(SelectSlideDebugLevel)].Selection; - CConfig.SongMenu = (ESongMenu)SelectSlides[htSelectSlides(SelectSlideSongMenu)].Selection; - CConfig.SongSorting = (ESongSorting)SelectSlides[htSelectSlides(SelectSlideSongSorting)].Selection; - CConfig.Tabs = (EOffOn)SelectSlides[htSelectSlides(SelectSlideTabs)].Selection; - CConfig.TimerMode = (ETimerMode)SelectSlides[htSelectSlides(SelectSlideTimerMode)].Selection; + CConfig.Language = _Languages[SelectSlides[SelectSlideLanguage].Selection]; + CConfig.DebugLevel = (EDebugLevel)SelectSlides[SelectSlideDebugLevel].Selection; + CConfig.SongMenu = (ESongMenu)SelectSlides[SelectSlideSongMenu].Selection; + CConfig.SongSorting = (ESongSorting)SelectSlides[SelectSlideSongSorting].Selection; + CConfig.Tabs = (EOffOn)SelectSlides[SelectSlideTabs].Selection; + CConfig.TimerMode = (ETimerMode)SelectSlides[SelectSlideTimerMode].Selection; CConfig.SaveConfig(); diff --git a/Vocaluxe/Screens/CScreenOptionsLyrics.cs b/Vocaluxe/Screens/CScreenOptionsLyrics.cs index 302ec76d..81257172 100644 --- a/Vocaluxe/Screens/CScreenOptionsLyrics.cs +++ b/Vocaluxe/Screens/CScreenOptionsLyrics.cs @@ -36,8 +36,8 @@ namespace Vocaluxe.Screens public override void LoadTheme(string XmlPath) { base.LoadTheme(XmlPath); - SelectSlides[htSelectSlides(SelectSlideLyricStyle)].SetValues((int)CConfig.LyricStyle); - SelectSlides[htSelectSlides(SelectSlideLyricsOnTop)].SetValues((int)CConfig.LyricsOnTop); + SelectSlides[SelectSlideLyricStyle].SetValues((int)CConfig.LyricStyle); + SelectSlides[SelectSlideLyricsOnTop].SetValues((int)CConfig.LyricsOnTop); } public override bool HandleInput(KeyEvent KeyEvent) @@ -64,7 +64,7 @@ namespace Vocaluxe.Screens break; case Keys.Enter: - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { SaveConfig(); CGraphics.FadeTo(EScreens.ScreenOptions); @@ -95,7 +95,7 @@ namespace Vocaluxe.Screens if (MouseEvent.LB && IsMouseOver(MouseEvent)) { SaveConfig(); - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { CGraphics.FadeTo(EScreens.ScreenOptions); } @@ -116,8 +116,8 @@ namespace Vocaluxe.Screens private void SaveConfig() { - CConfig.LyricsOnTop = (EOffOn)SelectSlides[htSelectSlides(SelectSlideLyricsOnTop)].Selection; - CConfig.LyricStyle = (ELyricStyle)SelectSlides[htSelectSlides(SelectSlideLyricStyle)].Selection; + CConfig.LyricsOnTop = (EOffOn)SelectSlides[SelectSlideLyricsOnTop].Selection; + CConfig.LyricStyle = (ELyricStyle)SelectSlides[SelectSlideLyricStyle].Selection; CConfig.SaveConfig(); } } diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index 3f06c4dc..8a8bfca9 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -84,33 +84,33 @@ namespace Vocaluxe.Screens if (max > 7) max = 7; - SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].NumVisible = max; - SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].NumVisible = max; + SelectSlides[SelectSlideRecordChannel1].NumVisible = max; + SelectSlides[SelectSlideRecordChannel2].NumVisible = max; - SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].AddValue(CLanguage.Translate("TR_CONFIG_OFF")); - SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].AddValue(CLanguage.Translate("TR_CONFIG_OFF")); + SelectSlides[SelectSlideRecordChannel1].AddValue(CLanguage.Translate("TR_CONFIG_OFF")); + SelectSlides[SelectSlideRecordChannel2].AddValue(CLanguage.Translate("TR_CONFIG_OFF")); for (int i = 1; i <= CSettings.MaxNumPlayer; i++) { - SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].AddValue(i.ToString()); - SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].AddValue(i.ToString()); + SelectSlides[SelectSlideRecordChannel1].AddValue(i.ToString()); + SelectSlides[SelectSlideRecordChannel2].AddValue(i.ToString()); } for (int i = 0; i < 26; i++) { - SelectSlides[htSelectSlides(SelectSlideDelay)].AddValue((i * 20).ToString() + " ms"); + SelectSlides[SelectSlideDelay].AddValue((i * 20).ToString() + " ms"); } ChannelEnergy = new float[StaticEnergyChannel.Length]; for (int i = 0; i < ChannelEnergy.Length; i++) { - Statics[htStatics(StaticEnergyChannel[i])].Visible = false; + Statics[StaticEnergyChannel[i]].Visible = false; ChannelEnergy[i] = 0f; } - Equalizers[htEqualizer(EqualizerChannel1)].ScreenHandles = true; - Equalizers[htEqualizer(EqualizerChannel2)].ScreenHandles = true; + Equalizers[EqualizerChannel1].ScreenHandles = true; + Equalizers[EqualizerChannel2].ScreenHandles = true; } public override bool HandleInput(KeyEvent KeyEvent) @@ -137,13 +137,13 @@ namespace Vocaluxe.Screens break; case Keys.Enter: - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { SaveMicConfig(); CGraphics.FadeTo(EScreens.ScreenOptions); } - if (Buttons[htButtons(ButtonDelayTest)].Selected) + if (Buttons[ButtonDelayTest].Selected) { TestDelay(); } @@ -155,32 +155,32 @@ namespace Vocaluxe.Screens break; case Keys.Left: - if (SelectSlides[htSelectSlides(SelectSlideRecordDevices)].Selected) + if (SelectSlides[SelectSlideRecordDevices].Selected) OnDeviceEvent(); - if (SelectSlides[htSelectSlides(SelectSlideRecordInputs)].Selected) + if (SelectSlides[SelectSlideRecordInputs].Selected) OnInputEvent(); - if (SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].Selected || - SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].Selected) + if (SelectSlides[SelectSlideRecordChannel1].Selected || + SelectSlides[SelectSlideRecordChannel2].Selected) SetMicConfig(); - if (SelectSlides[htSelectSlides(SelectSlideDelay)].Selected) + if (SelectSlides[SelectSlideDelay].Selected) SaveDelayConfig(); break; case Keys.Right: - if (SelectSlides[htSelectSlides(SelectSlideRecordDevices)].Selected) + if (SelectSlides[SelectSlideRecordDevices].Selected) OnDeviceEvent(); - if (SelectSlides[htSelectSlides(SelectSlideRecordInputs)].Selected) + if (SelectSlides[SelectSlideRecordInputs].Selected) OnInputEvent(); - if (SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].Selected || - SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].Selected) + if (SelectSlides[SelectSlideRecordChannel1].Selected || + SelectSlides[SelectSlideRecordChannel2].Selected) SetMicConfig(); - if (SelectSlides[htSelectSlides(SelectSlideDelay)].Selected) + if (SelectSlides[SelectSlideDelay].Selected) SaveDelayConfig(); break; } @@ -200,26 +200,26 @@ namespace Vocaluxe.Screens if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (SelectSlides[htSelectSlides(SelectSlideRecordDevices)].Selected) + if (SelectSlides[SelectSlideRecordDevices].Selected) OnDeviceEvent(); - if (SelectSlides[htSelectSlides(SelectSlideRecordInputs)].Selected) + if (SelectSlides[SelectSlideRecordInputs].Selected) OnInputEvent(); - if (SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].Selected || - SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].Selected) + if (SelectSlides[SelectSlideRecordChannel1].Selected || + SelectSlides[SelectSlideRecordChannel2].Selected) SetMicConfig(); - if (SelectSlides[htSelectSlides(SelectSlideDelay)].Selected) + if (SelectSlides[SelectSlideDelay].Selected) SaveDelayConfig(); - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { SaveMicConfig(); CGraphics.FadeTo(EScreens.ScreenOptions); } - if (Buttons[htButtons(ButtonDelayTest)].Selected) + if (Buttons[ButtonDelayTest].Selected) { TestDelay(); } @@ -250,10 +250,10 @@ namespace Vocaluxe.Screens { int player = 0; if (i == 0) - player = SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].Selection; + player = SelectSlides[SelectSlideRecordChannel1].Selection; if (i == 1) - player = SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].Selection; + player = SelectSlides[SelectSlideRecordChannel2].Selection; if (_DelayTest[i].Timer.ElapsedMilliseconds > MaxDelayTime * 1000f || player == 0) { @@ -270,32 +270,32 @@ namespace Vocaluxe.Screens } } } - Texts[htTexts(TextDelayChannel1)].Text = _DelayTest[0].Delay.ToString("000") + " ms"; - Texts[htTexts(TextDelayChannel2)].Text = _DelayTest[1].Delay.ToString("000") + " ms"; + Texts[TextDelayChannel1].Text = _DelayTest[0].Delay.ToString("000") + " ms"; + Texts[TextDelayChannel2].Text = _DelayTest[1].Delay.ToString("000") + " ms"; } if (CheckMicConfig()) { ChannelEnergy[0] = 0f; - int player = SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].Selection; + int player = SelectSlides[SelectSlideRecordChannel1].Selection; if (player > 0) { ChannelEnergy[0] = CSound.RecordGetMaxVolume(player - 1); - Equalizers[htEqualizer(EqualizerChannel1)].Update(CSound.ToneWeigth(player - 1)); + Equalizers[EqualizerChannel1].Update(CSound.ToneWeigth(player - 1)); } else - Equalizers[htEqualizer(EqualizerChannel1)].Reset(); + Equalizers[EqualizerChannel1].Reset(); ChannelEnergy[1] = 0f; - player = SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].Selection; + player = SelectSlides[SelectSlideRecordChannel2].Selection; if (player > 0) { ChannelEnergy[1] = CSound.RecordGetMaxVolume(player - 1); - Equalizers[htEqualizer(EqualizerChannel2)].Update(CSound.ToneWeigth(player - 1)); + Equalizers[EqualizerChannel2].Update(CSound.ToneWeigth(player - 1)); } else - Equalizers[htEqualizer(EqualizerChannel2)].Reset(); + Equalizers[EqualizerChannel2].Reset(); } else { @@ -303,8 +303,8 @@ namespace Vocaluxe.Screens { ChannelEnergy[i] = 0f; } - Equalizers[htEqualizer(EqualizerChannel1)].Reset(); - Equalizers[htEqualizer(EqualizerChannel2)].Reset(); + Equalizers[EqualizerChannel1].Reset(); + Equalizers[EqualizerChannel2].Reset(); } return true; @@ -314,8 +314,8 @@ namespace Vocaluxe.Screens { base.OnShow(); - SelectSlides[htSelectSlides(SelectSlideRecordDevices)].Clear(); - SelectSlides[htSelectSlides(SelectSlideRecordInputs)].Clear(); + SelectSlides[SelectSlideRecordDevices].Clear(); + SelectSlides[SelectSlideRecordInputs].Clear(); for (int i = 0; i < ChannelEnergy.Length; i++) { @@ -334,23 +334,23 @@ namespace Vocaluxe.Screens for (int dev = 0; dev < _devices.Length; dev++) { - SelectSlides[htSelectSlides(SelectSlideRecordDevices)].AddValue(_devices[dev].Name); + SelectSlides[SelectSlideRecordDevices].AddValue(_devices[dev].Name); } - SelectSlides[htSelectSlides(SelectSlideRecordDevices)].Selection = _DeviceNr; + SelectSlides[SelectSlideRecordDevices].Selection = _DeviceNr; for (int inp = 0; inp < _devices[0].Inputs.Count; inp++) { - SelectSlides[htSelectSlides(SelectSlideRecordInputs)].AddValue(_devices[0].Inputs[inp].Name); + SelectSlides[SelectSlideRecordInputs].AddValue(_devices[0].Inputs[inp].Name); } - SelectSlides[htSelectSlides(SelectSlideRecordInputs)].Selection = _InputNr; + SelectSlides[SelectSlideRecordInputs].Selection = _InputNr; UpdateChannels(); } - SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].Visible = (_devices != null); - SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].Visible = (_devices != null); + SelectSlides[SelectSlideRecordChannel1].Visible = (_devices != null); + SelectSlides[SelectSlideRecordChannel2].Visible = (_devices != null); - Statics[htStatics(StaticWarning)].Visible = false; - Texts[htTexts(TextWarning)].Visible = false; + Statics[StaticWarning].Visible = false; + Texts[TextWarning].Visible = false; _DelayTest = null; if (_devices != null) @@ -363,7 +363,7 @@ namespace Vocaluxe.Screens } } - SelectSlides[htSelectSlides(SelectSlideDelay)].Selection = (int)(CConfig.MicDelay / 20); + SelectSlides[SelectSlideDelay].Selection = (int)(CConfig.MicDelay / 20); _DelayTestRunning = false; _DelaySound = -1; @@ -381,32 +381,32 @@ namespace Vocaluxe.Screens if (!CheckMicConfig()) { - Statics[htStatics(StaticWarning)].Visible = true; - Texts[htTexts(TextWarning)].Visible = true; + Statics[StaticWarning].Visible = true; + Texts[TextWarning].Visible = true; } else { - Statics[htStatics(StaticWarning)].Visible = false; - Texts[htTexts(TextWarning)].Visible = false; + Statics[StaticWarning].Visible = false; + Texts[TextWarning].Visible = false; } for (int i = 0; i < StaticEnergyChannel.Length; i++) { if (ChannelEnergy[i] > 0f) { - SRectF rect = new SRectF(Statics[htStatics(StaticEnergyChannel[i])].Rect.X, - Statics[htStatics(StaticEnergyChannel[i])].Rect.Y, - Statics[htStatics(StaticEnergyChannel[i])].Rect.W * ChannelEnergy[i], - Statics[htStatics(StaticEnergyChannel[i])].Rect.H, - Statics[htStatics(StaticEnergyChannel[i])].Rect.Z); + SRectF rect = new SRectF(Statics[StaticEnergyChannel[i]].Rect.X, + Statics[StaticEnergyChannel[i]].Rect.Y, + Statics[StaticEnergyChannel[i]].Rect.W * ChannelEnergy[i], + Statics[StaticEnergyChannel[i]].Rect.H, + Statics[StaticEnergyChannel[i]].Rect.Z); - CDraw.DrawTexture(Statics[htStatics(StaticEnergyChannel[i])].Texture, Statics[htStatics(StaticEnergyChannel[i])].Rect, + CDraw.DrawTexture(Statics[StaticEnergyChannel[i]].Texture, Statics[StaticEnergyChannel[i]].Rect, new SColorF(1f, 1f, 1f, 1f), rect); } } - Equalizers[htEqualizer(EqualizerChannel1)].Draw(); - Equalizers[htEqualizer(EqualizerChannel2)].Draw(); + Equalizers[EqualizerChannel1].Draw(); + Equalizers[EqualizerChannel2].Draw(); DrawFG(); @@ -424,27 +424,27 @@ namespace Vocaluxe.Screens private void OnDeviceEvent() { - if (SelectSlides[htSelectSlides(SelectSlideRecordDevices)].Selection != _DeviceNr) + if (SelectSlides[SelectSlideRecordDevices].Selection != _DeviceNr) { - SelectSlides[htSelectSlides(SelectSlideRecordInputs)].Clear(); - _DeviceNr = SelectSlides[htSelectSlides(SelectSlideRecordDevices)].Selection; + SelectSlides[SelectSlideRecordInputs].Clear(); + _DeviceNr = SelectSlides[SelectSlideRecordDevices].Selection; _InputNr = 0; for (int inp = 0; inp < _devices[_DeviceNr].Inputs.Count; inp++) { - SelectSlides[htSelectSlides(SelectSlideRecordInputs)].AddValue(_devices[_DeviceNr].Inputs[inp].Name); + SelectSlides[SelectSlideRecordInputs].AddValue(_devices[_DeviceNr].Inputs[inp].Name); } _InputNr = 0; - SelectSlides[htSelectSlides(SelectSlideRecordInputs)].Selection = 0; + SelectSlides[SelectSlideRecordInputs].Selection = 0; UpdateChannels(); } } private void OnInputEvent() { - if (SelectSlides[htSelectSlides(SelectSlideRecordInputs)].Selection != _InputNr) + if (SelectSlides[SelectSlideRecordInputs].Selection != _InputNr) { - _InputNr = SelectSlides[htSelectSlides(SelectSlideRecordInputs)].Selection; + _InputNr = SelectSlides[SelectSlideRecordInputs].Selection; UpdateChannels(); } @@ -452,7 +452,7 @@ namespace Vocaluxe.Screens private void SaveDelayConfig() { - CConfig.MicDelay = SelectSlides[htSelectSlides(SelectSlideDelay)].Selection * 20; + CConfig.MicDelay = SelectSlides[SelectSlideDelay].Selection * 20; CConfig.SaveConfig(); } @@ -503,15 +503,15 @@ namespace Vocaluxe.Screens if (_DeviceNr < 0) return; SInput input = _devices[_DeviceNr].Inputs[_InputNr]; - input.PlayerChannel1 = SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].Selection; - input.PlayerChannel2 = SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].Selection; + input.PlayerChannel1 = SelectSlides[SelectSlideRecordChannel1].Selection; + input.PlayerChannel2 = SelectSlides[SelectSlideRecordChannel2].Selection; _devices[_DeviceNr].Inputs[_InputNr] = input; } private void UpdateChannels() { - SelectSlides[htSelectSlides(SelectSlideRecordChannel1)].Selection = _devices[_DeviceNr].Inputs[_InputNr].PlayerChannel1; - SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].Selection = _devices[_DeviceNr].Inputs[_InputNr].PlayerChannel2; + SelectSlides[SelectSlideRecordChannel1].Selection = _devices[_DeviceNr].Inputs[_InputNr].PlayerChannel1; + SelectSlides[SelectSlideRecordChannel2].Selection = _devices[_DeviceNr].Inputs[_InputNr].PlayerChannel2; SaveMicConfig(); } diff --git a/Vocaluxe/Screens/CScreenOptionsSound.cs b/Vocaluxe/Screens/CScreenOptionsSound.cs index e4d3ac44..414bcbd1 100644 --- a/Vocaluxe/Screens/CScreenOptionsSound.cs +++ b/Vocaluxe/Screens/CScreenOptionsSound.cs @@ -43,15 +43,15 @@ namespace Vocaluxe.Screens public override void LoadTheme(string XmlPath) { base.LoadTheme(XmlPath); - SelectSlides[htSelectSlides(SelectSlideBackgroundMusic)].SetValues((int)CConfig.BackgroundMusic); - SelectSlides[htSelectSlides(SelectSlideBackgroundMusicVolume)].AddValues(new string[] { "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100"}); - SelectSlides[htSelectSlides(SelectSlideBackgroundMusicVolume)].Selection = CConfig.BackgroundMusicVolume / 5; - SelectSlides[htSelectSlides(SelectSlideBackgroundMusicSource)].SetValues((int)CConfig.BackgroundMusicSource); - SelectSlides[htSelectSlides(SelectSlideBackgroundMusicSource)].Selection = (int)CConfig.BackgroundMusicSource; - SelectSlides[htSelectSlides(SelectSlidePreviewMusicVolume)].AddValues(new string[] { "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100" }); - SelectSlides[htSelectSlides(SelectSlidePreviewMusicVolume)].Selection = CConfig.PreviewMusicVolume / 5; - SelectSlides[htSelectSlides(SelectSlideGameMusicVolume)].AddValues(new string[] { "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100" }); - SelectSlides[htSelectSlides(SelectSlideGameMusicVolume)].Selection = CConfig.GameMusicVolume / 5; + SelectSlides[SelectSlideBackgroundMusic].SetValues((int)CConfig.BackgroundMusic); + SelectSlides[SelectSlideBackgroundMusicVolume].AddValues(new string[] { "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100"}); + SelectSlides[SelectSlideBackgroundMusicVolume].Selection = CConfig.BackgroundMusicVolume / 5; + SelectSlides[SelectSlideBackgroundMusicSource].SetValues((int)CConfig.BackgroundMusicSource); + SelectSlides[SelectSlideBackgroundMusicSource].Selection = (int)CConfig.BackgroundMusicSource; + SelectSlides[SelectSlidePreviewMusicVolume].AddValues(new string[] { "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100" }); + SelectSlides[SelectSlidePreviewMusicVolume].Selection = CConfig.PreviewMusicVolume / 5; + SelectSlides[SelectSlideGameMusicVolume].AddValues(new string[] { "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100" }); + SelectSlides[SelectSlideGameMusicVolume].Selection = CConfig.GameMusicVolume / 5; } @@ -79,7 +79,7 @@ namespace Vocaluxe.Screens break; case Keys.Enter: - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { SaveConfig(); CGraphics.FadeTo(EScreens.ScreenOptions); @@ -110,7 +110,7 @@ namespace Vocaluxe.Screens if (MouseEvent.LB && IsMouseOver(MouseEvent)) { SaveConfig(); - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { CGraphics.FadeTo(EScreens.ScreenOptions); } @@ -122,7 +122,7 @@ namespace Vocaluxe.Screens { if (_BackgroundMusicVolume != CConfig.BackgroundMusicVolume) { - SelectSlides[htSelectSlides(SelectSlideBackgroundMusicVolume)].Selection = CConfig.BackgroundMusicVolume / 5; + SelectSlides[SelectSlideBackgroundMusicVolume].Selection = CConfig.BackgroundMusicVolume / 5; } return true; } @@ -139,18 +139,18 @@ namespace Vocaluxe.Screens _BackgroundMusic = CConfig.BackgroundMusic; _BackgroundMusicVolume = CConfig.BackgroundMusicVolume; - SelectSlides[htSelectSlides(SelectSlideGameMusicVolume)].Selection = CConfig.GameMusicVolume / 5; - SelectSlides[htSelectSlides(SelectSlidePreviewMusicVolume)].Selection = CConfig.PreviewMusicVolume / 5; + SelectSlides[SelectSlideGameMusicVolume].Selection = CConfig.GameMusicVolume / 5; + SelectSlides[SelectSlidePreviewMusicVolume].Selection = CConfig.PreviewMusicVolume / 5; } private void SaveConfig() { - CConfig.GameMusicVolume = SelectSlides[htSelectSlides(SelectSlideGameMusicVolume)].Selection * 5; - CConfig.PreviewMusicVolume = SelectSlides[htSelectSlides(SelectSlidePreviewMusicVolume)].Selection * 5; + CConfig.GameMusicVolume = SelectSlides[SelectSlideGameMusicVolume].Selection * 5; + CConfig.PreviewMusicVolume = SelectSlides[SelectSlidePreviewMusicVolume].Selection * 5; CConfig.SaveConfig(); - EOffOn NewOffOn = (EOffOn)SelectSlides[htSelectSlides(SelectSlideBackgroundMusic)].Selection; - EBackgroundMusicSource NewSource = (EBackgroundMusicSource)SelectSlides[htSelectSlides(SelectSlideBackgroundMusicSource)].Selection; - float NewVolume = SelectSlides[htSelectSlides(SelectSlideBackgroundMusicVolume)].Selection * 5; + EOffOn NewOffOn = (EOffOn)SelectSlides[SelectSlideBackgroundMusic].Selection; + EBackgroundMusicSource NewSource = (EBackgroundMusicSource)SelectSlides[SelectSlideBackgroundMusicSource].Selection; + float NewVolume = SelectSlides[SelectSlideBackgroundMusicVolume].Selection * 5; CBackgroundMusic.CheckAndApplyConfig(NewOffOn, NewSource, NewVolume); } diff --git a/Vocaluxe/Screens/CScreenOptionsTheme.cs b/Vocaluxe/Screens/CScreenOptionsTheme.cs index 57d41052..d696a646 100644 --- a/Vocaluxe/Screens/CScreenOptionsTheme.cs +++ b/Vocaluxe/Screens/CScreenOptionsTheme.cs @@ -58,19 +58,19 @@ namespace Vocaluxe.Screens { base.LoadTheme(XmlPath); - SelectSlides[htSelectSlides(SelectSlideTheme)].AddValues(CTheme.ThemeNames); - SelectSlides[htSelectSlides(SelectSlideTheme)].Selection = CTheme.GetThemeIndex(-1); + SelectSlides[SelectSlideTheme].AddValues(CTheme.ThemeNames); + SelectSlides[SelectSlideTheme].Selection = CTheme.GetThemeIndex(-1); - SelectSlides[htSelectSlides(SelectSlideSkin)].AddValues(CTheme.SkinNames); - SelectSlides[htSelectSlides(SelectSlideSkin)].Selection = CTheme.GetSkinIndex(-1); + SelectSlides[SelectSlideSkin].AddValues(CTheme.SkinNames); + SelectSlides[SelectSlideSkin].Selection = CTheme.GetSkinIndex(-1); - SelectSlides[htSelectSlides(SelectSlideCover)].AddValues(CCover.CoverThemes); - SelectSlides[htSelectSlides(SelectSlideCover)].Selection = CCover.GetCoverThemeIndex(); - SelectSlides[htSelectSlides(SelectSlideNoteLines)].SetValues((int)CConfig.DrawNoteLines); - SelectSlides[htSelectSlides(SelectSlideToneHelper)].SetValues((int)CConfig.DrawToneHelper); - SelectSlides[htSelectSlides(SelectSlideTimerLook)].SetValues((int)CConfig.TimerLook); - SelectSlides[htSelectSlides(SelectSlideFadeInfo)].SetValues((int)CConfig.FadePlayerInfo); - SelectSlides[htSelectSlides(SelectSlideCoverLoading)].SetValues((int)CConfig.CoverLoading); + SelectSlides[SelectSlideCover].AddValues(CCover.CoverThemes); + SelectSlides[SelectSlideCover].Selection = CCover.GetCoverThemeIndex(); + SelectSlides[SelectSlideNoteLines].SetValues((int)CConfig.DrawNoteLines); + SelectSlides[SelectSlideToneHelper].SetValues((int)CConfig.DrawToneHelper); + SelectSlides[SelectSlideTimerLook].SetValues((int)CConfig.TimerLook); + SelectSlides[SelectSlideFadeInfo].SetValues((int)CConfig.FadePlayerInfo); + SelectSlides[SelectSlideCoverLoading].SetValues((int)CConfig.CoverLoading); } public override bool HandleInput(KeyEvent KeyEvent) @@ -96,7 +96,7 @@ namespace Vocaluxe.Screens break; case Keys.Enter: - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { Close(); } @@ -125,7 +125,7 @@ namespace Vocaluxe.Screens if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { Close(); } @@ -164,18 +164,18 @@ namespace Vocaluxe.Screens private void SaveConfig() { - CConfig.Theme = CTheme.ThemeNames[SelectSlides[htSelectSlides(SelectSlideTheme)].Selection]; - CConfig.Skin = CTheme.SkinNames[SelectSlides[htSelectSlides(SelectSlideSkin)].Selection]; - CConfig.CoverTheme = CCover.CoverThemes[SelectSlides[htSelectSlides(SelectSlideCover)].Selection]; - CConfig.DrawNoteLines = (EOffOn)SelectSlides[htSelectSlides(SelectSlideNoteLines)].Selection; - CConfig.DrawToneHelper = (EOffOn)SelectSlides[htSelectSlides(SelectSlideToneHelper)].Selection; - CConfig.TimerLook = (ETimerLook)SelectSlides[htSelectSlides(SelectSlideTimerLook)].Selection; - CConfig.FadePlayerInfo = (EFadePlayerInfo)SelectSlides[htSelectSlides(SelectSlideFadeInfo)].Selection; - CConfig.CoverLoading = (ECoverLoading)SelectSlides[htSelectSlides(SelectSlideCoverLoading)].Selection; + CConfig.Theme = CTheme.ThemeNames[SelectSlides[SelectSlideTheme].Selection]; + CConfig.Skin = CTheme.SkinNames[SelectSlides[SelectSlideSkin].Selection]; + CConfig.CoverTheme = CCover.CoverThemes[SelectSlides[SelectSlideCover].Selection]; + CConfig.DrawNoteLines = (EOffOn)SelectSlides[SelectSlideNoteLines].Selection; + CConfig.DrawToneHelper = (EOffOn)SelectSlides[SelectSlideToneHelper].Selection; + CConfig.TimerLook = (ETimerLook)SelectSlides[SelectSlideTimerLook].Selection; + CConfig.FadePlayerInfo = (EFadePlayerInfo)SelectSlides[SelectSlideFadeInfo].Selection; + CConfig.CoverLoading = (ECoverLoading)SelectSlides[SelectSlideCoverLoading].Selection; CConfig.SaveConfig(); - if (_OldCoverTheme != SelectSlides[htSelectSlides(SelectSlideCover)].Selection) + if (_OldCoverTheme != SelectSlides[SelectSlideCover].Selection) { CCover.ReloadCover(); CSongs.Filter.SearchString = String.Empty; @@ -183,10 +183,10 @@ namespace Vocaluxe.Screens CSongs.Categorizer.Tabs = CConfig.Tabs; } - if (_OldTheme != SelectSlides[htSelectSlides(SelectSlideTheme)].Selection) + if (_OldTheme != SelectSlides[SelectSlideTheme].Selection) { - CConfig.Theme = CTheme.ThemeNames[SelectSlides[htSelectSlides(SelectSlideTheme)].Selection]; - _OldTheme = SelectSlides[htSelectSlides(SelectSlideTheme)].Selection; + CConfig.Theme = CTheme.ThemeNames[SelectSlides[SelectSlideTheme].Selection]; + _OldTheme = SelectSlides[SelectSlideTheme].Selection; CTheme.UnloadSkins(); CFonts.UnloadThemeFonts(CConfig.Theme); @@ -206,10 +206,10 @@ namespace Vocaluxe.Screens private void OnChange() { - if (_OldTheme != SelectSlides[htSelectSlides(SelectSlideTheme)].Selection) + if (_OldTheme != SelectSlides[SelectSlideTheme].Selection) { - CConfig.Theme = CTheme.ThemeNames[SelectSlides[htSelectSlides(SelectSlideTheme)].Selection]; - _OldTheme = SelectSlides[htSelectSlides(SelectSlideTheme)].Selection; + CConfig.Theme = CTheme.ThemeNames[SelectSlides[SelectSlideTheme].Selection]; + _OldTheme = SelectSlides[SelectSlideTheme].Selection; CTheme.UnloadSkins(); CFonts.UnloadThemeFonts(CConfig.Theme); @@ -229,9 +229,9 @@ namespace Vocaluxe.Screens return; } - if (_TempSkin != SelectSlides[htSelectSlides(SelectSlideSkin)].Selection) + if (_TempSkin != SelectSlides[SelectSlideSkin].Selection) { - _TempSkin = SelectSlides[htSelectSlides(SelectSlideSkin)].Selection; + _TempSkin = SelectSlides[SelectSlideSkin].Selection; PauseBG(); CConfig.Skin = CTheme.SkinNames[_TempSkin]; diff --git a/Vocaluxe/Screens/CScreenOptionsVideo.cs b/Vocaluxe/Screens/CScreenOptionsVideo.cs index e45d25e5..9744e8cf 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideo.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideo.cs @@ -51,10 +51,10 @@ namespace Vocaluxe.Screens { base.LoadTheme(XmlPath); - SelectSlides[htSelectSlides(SelectSlideVideoBackgrounds)].SetValues((int)CConfig.VideoBackgrounds); - SelectSlides[htSelectSlides(SelectSlideVideoPreview)].SetValues((int)CConfig.VideoPreview); - SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].SetValues((int)CConfig.VideosInSongs); - SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].SetValues((int)CConfig.VideosToBackground); + SelectSlides[SelectSlideVideoBackgrounds].SetValues((int)CConfig.VideoBackgrounds); + SelectSlides[SelectSlideVideoPreview].SetValues((int)CConfig.VideoPreview); + SelectSlides[SelectSlideVideosInSongs].SetValues((int)CConfig.VideosInSongs); + SelectSlides[SelectSlideVideosToBackground].SetValues((int)CConfig.VideosToBackground); } public override bool HandleInput(KeyEvent KeyEvent) @@ -81,7 +81,7 @@ namespace Vocaluxe.Screens break; case Keys.Enter: - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { SaveConfig(); CGraphics.FadeTo(EScreens.ScreenOptions); @@ -89,17 +89,17 @@ namespace Vocaluxe.Screens break; case Keys.Left: - if (SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selected) + if (SelectSlides[SelectSlideWebcamDevices].Selected) OnDeviceEvent(); - if (SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selected) + if (SelectSlides[SelectSlideWebcamCapabilities].Selected) OnCapabilitiesEvent(); SaveConfig(); break; case Keys.Right: - if (SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selected) + if (SelectSlides[SelectSlideWebcamDevices].Selected) OnDeviceEvent(); - if (SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selected) + if (SelectSlides[SelectSlideWebcamCapabilities].Selected) OnCapabilitiesEvent(); SaveConfig(); break; @@ -120,12 +120,12 @@ namespace Vocaluxe.Screens if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selected) + if (SelectSlides[SelectSlideWebcamDevices].Selected) OnDeviceEvent(); - if (SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selected) + if (SelectSlides[SelectSlideWebcamCapabilities].Selected) OnCapabilitiesEvent(); SaveConfig(); - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { CGraphics.FadeTo(EScreens.ScreenOptions); } @@ -136,8 +136,8 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { CWebcam.GetFrame(ref _WebcamTexture); - Statics[htStatics(StaticWebcamOutput)].Texture = _WebcamTexture; - SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].Selection = (int)CConfig.VideosToBackground; + Statics[StaticWebcamOutput].Texture = _WebcamTexture; + SelectSlides[SelectSlideVideosToBackground].Selection = (int)CConfig.VideosToBackground; return true; } @@ -157,8 +157,8 @@ namespace Vocaluxe.Screens public override void OnShow() { base.OnShow(); - SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Clear(); - SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Clear(); + SelectSlides[SelectSlideWebcamDevices].Clear(); + SelectSlides[SelectSlideWebcamCapabilities].Clear(); _DeviceNr = -1; _CapabilityNr = -1; @@ -177,18 +177,18 @@ namespace Vocaluxe.Screens foreach (SWebcamDevice d in devices) { - SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].AddValue(d.Name); + SelectSlides[SelectSlideWebcamDevices].AddValue(d.Name); } - SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection = _DeviceNr; + SelectSlides[SelectSlideWebcamDevices].Selection = _DeviceNr; foreach (SCapabilities c in devices[_DeviceNr].Capabilities) { - SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].AddValue(c.Width.ToString() + " x " + c.Height.ToString() + " @ " + c.Framerate.ToString() + " FPS "); + SelectSlides[SelectSlideWebcamCapabilities].AddValue(c.Width.ToString() + " x " + c.Height.ToString() + " @ " + c.Framerate.ToString() + " FPS "); } - _Config.MonikerString = devices[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString; - _Config.Width = devices[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Width; - _Config.Height = devices[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Height; - _Config.Framerate = devices[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Framerate; + _Config.MonikerString = devices[SelectSlides[SelectSlideWebcamDevices].Selection].MonikerString; + _Config.Width = devices[SelectSlides[SelectSlideWebcamDevices].Selection].Capabilities[SelectSlides[SelectSlideWebcamCapabilities].Selection].Width; + _Config.Height = devices[SelectSlides[SelectSlideWebcamDevices].Selection].Capabilities[SelectSlides[SelectSlideWebcamCapabilities].Selection].Height; + _Config.Framerate = devices[SelectSlides[SelectSlideWebcamDevices].Selection].Capabilities[SelectSlides[SelectSlideWebcamCapabilities].Selection].Framerate; CWebcam.Close(); CWebcam.Select(CConfig.WebcamConfig); CWebcam.Start(); @@ -201,17 +201,17 @@ namespace Vocaluxe.Screens devices = null; } - SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Visible = (devices != null && devices.Length > 0); - SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Visible = (devices != null && devices.Length > 0); - Statics[htStatics(StaticWebcamOutput)].Visible = (devices != null && devices.Length > 0); + SelectSlides[SelectSlideWebcamDevices].Visible = (devices != null && devices.Length > 0); + SelectSlides[SelectSlideWebcamCapabilities].Visible = (devices != null && devices.Length > 0); + Statics[StaticWebcamOutput].Visible = (devices != null && devices.Length > 0); } private void SaveConfig() { - CConfig.VideoBackgrounds = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideoBackgrounds)].Selection; - CConfig.VideoPreview = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideoPreview)].Selection; - CConfig.VideosInSongs = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].Selection; - CConfig.VideosToBackground = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].Selection; + CConfig.VideoBackgrounds = (EOffOn)SelectSlides[SelectSlideVideoBackgrounds].Selection; + CConfig.VideoPreview = (EOffOn)SelectSlides[SelectSlideVideoPreview].Selection; + CConfig.VideosInSongs = (EOffOn)SelectSlides[SelectSlideVideosInSongs].Selection; + CConfig.VideosToBackground = (EOffOn)SelectSlides[SelectSlideVideosToBackground].Selection; CConfig.WebcamConfig = _Config; CBackgroundMusic.VideoEnabled = true; @@ -221,23 +221,23 @@ namespace Vocaluxe.Screens private void OnDeviceEvent() { - if (SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection != _DeviceNr) + if (SelectSlides[SelectSlideWebcamDevices].Selection != _DeviceNr) { - SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Clear(); - _DeviceNr = SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection; + SelectSlides[SelectSlideWebcamCapabilities].Clear(); + _DeviceNr = SelectSlides[SelectSlideWebcamDevices].Selection; _CapabilityNr = 0; SWebcamDevice[] d = CWebcam.GetDevices(); - for (int i = 0; i < d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities.Count; i++) + for (int i = 0; i < d[SelectSlides[SelectSlideWebcamDevices].Selection].Capabilities.Count; i++) { - SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].AddValue(d[_DeviceNr].Capabilities[i].Width.ToString() + " x " + d[_DeviceNr].Capabilities[i].Height.ToString() + " @ " + d[_DeviceNr].Capabilities[i].Framerate.ToString() + "FPS"); + SelectSlides[SelectSlideWebcamCapabilities].AddValue(d[_DeviceNr].Capabilities[i].Width.ToString() + " x " + d[_DeviceNr].Capabilities[i].Height.ToString() + " @ " + d[_DeviceNr].Capabilities[i].Framerate.ToString() + "FPS"); } - SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection = 0; + SelectSlides[SelectSlideWebcamCapabilities].Selection = 0; - _Config.MonikerString = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString; - _Config.Width = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Width; - _Config.Height = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Height; - _Config.Framerate = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Framerate; + _Config.MonikerString = d[SelectSlides[SelectSlideWebcamDevices].Selection].MonikerString; + _Config.Width = d[SelectSlides[SelectSlideWebcamDevices].Selection].Capabilities[SelectSlides[SelectSlideWebcamCapabilities].Selection].Width; + _Config.Height = d[SelectSlides[SelectSlideWebcamDevices].Selection].Capabilities[SelectSlides[SelectSlideWebcamCapabilities].Selection].Height; + _Config.Framerate = d[SelectSlides[SelectSlideWebcamDevices].Selection].Capabilities[SelectSlides[SelectSlideWebcamCapabilities].Selection].Framerate; CWebcam.Close(); CWebcam.Select(_Config); @@ -247,15 +247,15 @@ namespace Vocaluxe.Screens private void OnCapabilitiesEvent() { - if (SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection != _CapabilityNr) + if (SelectSlides[SelectSlideWebcamCapabilities].Selection != _CapabilityNr) { - _CapabilityNr = SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection; + _CapabilityNr = SelectSlides[SelectSlideWebcamCapabilities].Selection; SWebcamDevice[] d = CWebcam.GetDevices(); - _Config.MonikerString = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].MonikerString; - _Config.Width = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Width; - _Config.Height = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Height; - _Config.Framerate = d[SelectSlides[htSelectSlides(SelectSlideWebcamDevices)].Selection].Capabilities[SelectSlides[htSelectSlides(SelectSlideWebcamCapabilities)].Selection].Framerate; + _Config.MonikerString = d[SelectSlides[SelectSlideWebcamDevices].Selection].MonikerString; + _Config.Width = d[SelectSlides[SelectSlideWebcamDevices].Selection].Capabilities[SelectSlides[SelectSlideWebcamCapabilities].Selection].Width; + _Config.Height = d[SelectSlides[SelectSlideWebcamDevices].Selection].Capabilities[SelectSlides[SelectSlideWebcamCapabilities].Selection].Height; + _Config.Framerate = d[SelectSlides[SelectSlideWebcamDevices].Selection].Capabilities[SelectSlides[SelectSlideWebcamCapabilities].Selection].Framerate; CWebcam.Close(); CWebcam.Select(_Config); diff --git a/Vocaluxe/Screens/CScreenParty.cs b/Vocaluxe/Screens/CScreenParty.cs index eef3558d..55d2a17c 100644 --- a/Vocaluxe/Screens/CScreenParty.cs +++ b/Vocaluxe/Screens/CScreenParty.cs @@ -64,16 +64,16 @@ namespace Vocaluxe.Screens break; case Keys.Enter: - if (Buttons[htButtons(ButtonStart)].Selected) + if (Buttons[ButtonStart].Selected) StartPartyMode(); - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) CGraphics.FadeTo(EScreens.ScreenMain); break; case Keys.Left: case Keys.Right: - if (SelectSlides[htSelectSlides(SelectSlideModes)].Selected) + if (SelectSlides[SelectSlideModes].Selected) UpdateSelection(); break; } @@ -87,13 +87,13 @@ namespace Vocaluxe.Screens if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (Buttons[htButtons(ButtonStart)].Selected) + if (Buttons[ButtonStart].Selected) StartPartyMode(); - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) CGraphics.FadeTo(EScreens.ScreenMain); - if (SelectSlides[htSelectSlides(SelectSlideModes)].Selected) + if (SelectSlides[SelectSlideModes].Selected) UpdateSelection(); } @@ -111,15 +111,15 @@ namespace Vocaluxe.Screens _PartyModeInfos = CParty.GetPartyModeInfos(); - SelectSlides[htSelectSlides(SelectSlideModes)].Clear(); + SelectSlides[SelectSlideModes].Clear(); foreach (SPartyModeInfos info in _PartyModeInfos) { - SelectSlides[htSelectSlides(SelectSlideModes)].AddValue(info.Name, info.PartyModeID); + SelectSlides[SelectSlideModes].AddValue(info.Name, info.PartyModeID); } - SelectSlides[htSelectSlides(SelectSlideModes)].Selection = 0; + SelectSlides[SelectSlideModes].Selection = 0; UpdateSelection(); - SetInteractionToSelectSlide(SelectSlides[htSelectSlides(SelectSlideModes)]); + SetInteractionToSelectSlide(SelectSlides[SelectSlideModes]); } public override bool UpdateGame() @@ -144,49 +144,49 @@ namespace Vocaluxe.Screens if (_PartyModeInfos.Count == 0) return; - int index = SelectSlides[htSelectSlides(SelectSlideModes)].Selection; + int index = SelectSlides[SelectSlideModes].Selection; if (index >= _PartyModeInfos.Count) return; //Description - Texts[htTexts(TextDescription)].Text = _PartyModeInfos[index].Description; - Texts[htTexts(TextDescription)].TranslationID = _PartyModeInfos[index].PartyModeID; + Texts[TextDescription].Text = _PartyModeInfos[index].Description; + Texts[TextDescription].TranslationID = _PartyModeInfos[index].PartyModeID; //TargetAudience - Texts[htTexts(TextTargetAudience)].TranslationID = _PartyModeInfos[index].PartyModeID; - Texts[htTexts(TextTargetAudience)].Text = _PartyModeInfos[index].TargetAudience; + Texts[TextTargetAudience].TranslationID = _PartyModeInfos[index].PartyModeID; + Texts[TextTargetAudience].Text = _PartyModeInfos[index].TargetAudience; //NumTeams if (_PartyModeInfos[index].MaxTeams == 0) - Texts[htTexts(TextNumTeams)].Text = "TR_SCREENPARTY_NOTEAMS"; + Texts[TextNumTeams].Text = "TR_SCREENPARTY_NOTEAMS"; else if (_PartyModeInfos[index].MaxTeams == _PartyModeInfos[index].MinTeams) - Texts[htTexts(TextNumTeams)].Text = _PartyModeInfos[index].MaxTeams.ToString(); + Texts[TextNumTeams].Text = _PartyModeInfos[index].MaxTeams.ToString(); else if (_PartyModeInfos[index].MaxTeams > _PartyModeInfos[index].MinTeams) - Texts[htTexts(TextNumTeams)].Text = _PartyModeInfos[index].MinTeams + " - " + _PartyModeInfos[index].MaxTeams; + Texts[TextNumTeams].Text = _PartyModeInfos[index].MinTeams + " - " + _PartyModeInfos[index].MaxTeams; //NumPlayers if (_PartyModeInfos[index].MaxPlayers == _PartyModeInfos[index].MinPlayers) - Texts[htTexts(TextNumPlayers)].Text = _PartyModeInfos[index].MaxTeams.ToString(); + Texts[TextNumPlayers].Text = _PartyModeInfos[index].MaxTeams.ToString(); else if (_PartyModeInfos[index].MaxPlayers > _PartyModeInfos[index].MinPlayers) - Texts[htTexts(TextNumPlayers)].Text = _PartyModeInfos[index].MinPlayers + " - " + _PartyModeInfos[index].MaxPlayers; + Texts[TextNumPlayers].Text = _PartyModeInfos[index].MinPlayers + " - " + _PartyModeInfos[index].MaxPlayers; //Author - Texts[htTexts(TextAuthor)].Text = _PartyModeInfos[index].Author; - Texts[htTexts(TextAuthor)].TranslationID = _PartyModeInfos[index].PartyModeID; + Texts[TextAuthor].Text = _PartyModeInfos[index].Author; + Texts[TextAuthor].TranslationID = _PartyModeInfos[index].PartyModeID; //Version - Texts[htTexts(TextVersion)].Text = _PartyModeInfos[index].VersionMajor + "." + _PartyModeInfos[index].VersionMinor; - Texts[htTexts(TextVersion)].TranslationID = _PartyModeInfos[index].PartyModeID; + Texts[TextVersion].Text = _PartyModeInfos[index].VersionMajor + "." + _PartyModeInfos[index].VersionMinor; + Texts[TextVersion].TranslationID = _PartyModeInfos[index].PartyModeID; if (!_PartyModeInfos[index].Playable) { - Buttons[htButtons(ButtonStart)].Visible = false; - Texts[htTexts(TextError)].Visible = true; + Buttons[ButtonStart].Visible = false; + Texts[TextError].Visible = true; } else { - Buttons[htButtons(ButtonStart)].Visible = true; - Texts[htTexts(TextError)].Visible = false; + Buttons[ButtonStart].Visible = true; + Texts[TextError].Visible = false; } } @@ -195,7 +195,7 @@ namespace Vocaluxe.Screens if (_PartyModeInfos.Count == 0) return; - int index = SelectSlides[htSelectSlides(SelectSlideModes)].Selection; + int index = SelectSlides[SelectSlideModes].Selection; if (index >= _PartyModeInfos.Count) return; diff --git a/Vocaluxe/Screens/CScreenProfiles.cs b/Vocaluxe/Screens/CScreenProfiles.cs index a5ed50ea..e030efee 100644 --- a/Vocaluxe/Screens/CScreenProfiles.cs +++ b/Vocaluxe/Screens/CScreenProfiles.cs @@ -65,16 +65,16 @@ namespace Vocaluxe.Screens { base.LoadTheme(XmlPath); - Buttons[htButtons(ButtonSaveSnapshot)].Visible = false; - Buttons[htButtons(ButtonDiscardSnapshot)].Visible = false; - Buttons[htButtons(ButtonTakeSnapshot)].Visible = false; + Buttons[ButtonSaveSnapshot].Visible = false; + Buttons[ButtonDiscardSnapshot].Visible = false; + Buttons[ButtonTakeSnapshot].Visible = false; if (CWebcam.GetDevices().Length > 0) - Buttons[htButtons(ButtonWebcam)].Visible = true; + Buttons[ButtonWebcam].Visible = true; else - Buttons[htButtons(ButtonWebcam)].Visible = false; - SelectSlides[htSelectSlides(SelectSlideDifficulty)].SetValues(0); - SelectSlides[htSelectSlides(SelectSlideGuestProfile)].SetValues(0); - SelectSlides[htSelectSlides(SelectSlideActive)].SetValues(0); + Buttons[ButtonWebcam].Visible = false; + SelectSlides[SelectSlideDifficulty].SetValues(0); + SelectSlides[SelectSlideGuestProfile].SetValues(0); + SelectSlides[SelectSlideActive].SetValues(0); } @@ -90,8 +90,8 @@ namespace Vocaluxe.Screens case EEditMode.None: break; case EEditMode.PlayerName: - SelectSlides[htSelectSlides(SelectSlideProfiles)].RenameValue( - CProfiles.AddGetPlayerName(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, KeyEvent.Unicode)); + SelectSlides[SelectSlideProfiles].RenameValue( + CProfiles.AddGetPlayerName(SelectSlides[SelectSlideProfiles].Selection, KeyEvent.Unicode)); break; default: break; @@ -106,34 +106,34 @@ namespace Vocaluxe.Screens break; case Keys.Enter: - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { CGraphics.FadeTo(EScreens.ScreenMain); - } else if (Buttons[htButtons(ButtonSave)].Selected) + } else if (Buttons[ButtonSave].Selected) { SaveProfiles(); - } else if (Buttons[htButtons(ButtonNew)].Selected) + } else if (Buttons[ButtonNew].Selected) { NewProfile(); - } else if (Buttons[htButtons(ButtonPlayerName)].Selected) + } else if (Buttons[ButtonPlayerName].Selected) { if (CProfiles.NumProfiles > 0 && _EditMode != EEditMode.PlayerName) _EditMode = EEditMode.PlayerName; else _EditMode = EEditMode.None; - } else if (Buttons[htButtons(ButtonDelete)].Selected) + } else if (Buttons[ButtonDelete].Selected) { DeleteProfile(); - } else if (Buttons[htButtons(ButtonWebcam)].Selected && CWebcam.GetDevices().Length > 0) + } else if (Buttons[ButtonWebcam].Selected && CWebcam.GetDevices().Length > 0) { OnWebcam(); - } else if (Buttons[htButtons(ButtonSaveSnapshot)].Selected && CWebcam.GetDevices().Length > 0) + } else if (Buttons[ButtonSaveSnapshot].Selected && CWebcam.GetDevices().Length > 0) { OnSaveSnapshot(); - } else if (Buttons[htButtons(ButtonDiscardSnapshot)].Selected && CWebcam.GetDevices().Length > 0) + } else if (Buttons[ButtonDiscardSnapshot].Selected && CWebcam.GetDevices().Length > 0) { OnDiscardSnapshot(); - } else if (Buttons[htButtons(ButtonTakeSnapshot)].Selected && CWebcam.GetDevices().Length > 0) + } else if (Buttons[ButtonTakeSnapshot].Selected && CWebcam.GetDevices().Length > 0) { OnTakeSnapshot(); } @@ -142,8 +142,8 @@ namespace Vocaluxe.Screens case Keys.Back: if (_EditMode == EEditMode.PlayerName) { - SelectSlides[htSelectSlides(SelectSlideProfiles)].RenameValue( - CProfiles.GetDeleteCharInPlayerName(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection)); + SelectSlides[SelectSlideProfiles].RenameValue( + CProfiles.GetDeleteCharInPlayerName(SelectSlides[SelectSlideProfiles].Selection)); } else CGraphics.FadeTo(EScreens.ScreenMain); @@ -153,22 +153,22 @@ namespace Vocaluxe.Screens DeleteProfile(); break; } - if (SelectSlides[htSelectSlides(SelectSlideDifficulty)].Selected) + if (SelectSlides[SelectSlideDifficulty].Selected) { - CProfiles.SetDifficulty(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, - (EGameDifficulty)SelectSlides[htSelectSlides(SelectSlideDifficulty)].Selection); - } else if (SelectSlides[htSelectSlides(SelectSlideAvatars)].Selected) + CProfiles.SetDifficulty(SelectSlides[SelectSlideProfiles].Selection, + (EGameDifficulty)SelectSlides[SelectSlideDifficulty].Selection); + } else if (SelectSlides[SelectSlideAvatars].Selected) { - CProfiles.SetAvatar(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, - SelectSlides[htSelectSlides(SelectSlideAvatars)].Selection); - } else if (SelectSlides[htSelectSlides(SelectSlideGuestProfile)].Selected) + CProfiles.SetAvatar(SelectSlides[SelectSlideProfiles].Selection, + SelectSlides[SelectSlideAvatars].Selection); + } else if (SelectSlides[SelectSlideGuestProfile].Selected) { - CProfiles.SetGuestProfile(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, - (EOffOn)SelectSlides[htSelectSlides(SelectSlideGuestProfile)].Selection); - } else if (SelectSlides[htSelectSlides(SelectSlideActive)].Selected) + CProfiles.SetGuestProfile(SelectSlides[SelectSlideProfiles].Selection, + (EOffOn)SelectSlides[SelectSlideGuestProfile].Selection); + } else if (SelectSlides[SelectSlideActive].Selected) { - CProfiles.SetActive(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, - (EOffOn)SelectSlides[htSelectSlides(SelectSlideActive)].Selection); + CProfiles.SetActive(SelectSlides[SelectSlideProfiles].Selection, + (EOffOn)SelectSlides[SelectSlideActive].Selection); } } @@ -182,51 +182,51 @@ namespace Vocaluxe.Screens if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - if (Buttons[htButtons(ButtonExit)].Selected) + if (Buttons[ButtonExit].Selected) { CGraphics.FadeTo(EScreens.ScreenMain); - } else if (Buttons[htButtons(ButtonSave)].Selected) + } else if (Buttons[ButtonSave].Selected) { SaveProfiles(); - } else if (Buttons[htButtons(ButtonNew)].Selected) + } else if (Buttons[ButtonNew].Selected) { NewProfile(); - } else if (Buttons[htButtons(ButtonDelete)].Selected) { + } else if (Buttons[ButtonDelete].Selected) { DeleteProfile(); - } else if (Buttons[htButtons(ButtonPlayerName)].Selected) + } else if (Buttons[ButtonPlayerName].Selected) { if (CProfiles.NumProfiles > 0 && _EditMode != EEditMode.PlayerName) _EditMode = EEditMode.PlayerName; else _EditMode = EEditMode.None; - } else if (SelectSlides[htSelectSlides(SelectSlideDifficulty)].Selected) + } else if (SelectSlides[SelectSlideDifficulty].Selected) { - CProfiles.SetDifficulty(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, - (EGameDifficulty)SelectSlides[htSelectSlides(SelectSlideDifficulty)].Selection); - } else if (SelectSlides[htSelectSlides(SelectSlideAvatars)].Selected) + CProfiles.SetDifficulty(SelectSlides[SelectSlideProfiles].Selection, + (EGameDifficulty)SelectSlides[SelectSlideDifficulty].Selection); + } else if (SelectSlides[SelectSlideAvatars].Selected) { - CProfiles.SetAvatar(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, - SelectSlides[htSelectSlides(SelectSlideAvatars)].Selection); + CProfiles.SetAvatar(SelectSlides[SelectSlideProfiles].Selection, + SelectSlides[SelectSlideAvatars].Selection); if (CWebcam.GetDevices().Length > 0 && _WebcamTexture.index > 0) OnDiscardSnapshot(); - } else if (SelectSlides[htSelectSlides(SelectSlideGuestProfile)].Selected) + } else if (SelectSlides[SelectSlideGuestProfile].Selected) { - CProfiles.SetGuestProfile(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, - (EOffOn)SelectSlides[htSelectSlides(SelectSlideGuestProfile)].Selection); - } else if (SelectSlides[htSelectSlides(SelectSlideActive)].Selected) + CProfiles.SetGuestProfile(SelectSlides[SelectSlideProfiles].Selection, + (EOffOn)SelectSlides[SelectSlideGuestProfile].Selection); + } else if (SelectSlides[SelectSlideActive].Selected) { - CProfiles.SetActive(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, - (EOffOn)SelectSlides[htSelectSlides(SelectSlideActive)].Selection); - } else if (Buttons[htButtons(ButtonWebcam)].Selected && CWebcam.GetDevices().Length > 0) + CProfiles.SetActive(SelectSlides[SelectSlideProfiles].Selection, + (EOffOn)SelectSlides[SelectSlideActive].Selection); + } else if (Buttons[ButtonWebcam].Selected && CWebcam.GetDevices().Length > 0) { OnWebcam(); - } else if (Buttons[htButtons(ButtonSaveSnapshot)].Selected && CWebcam.GetDevices().Length > 0) + } else if (Buttons[ButtonSaveSnapshot].Selected && CWebcam.GetDevices().Length > 0) { OnSaveSnapshot(); - } else if (Buttons[htButtons(ButtonDiscardSnapshot)].Selected && CWebcam.GetDevices().Length > 0) + } else if (Buttons[ButtonDiscardSnapshot].Selected && CWebcam.GetDevices().Length > 0) { OnDiscardSnapshot(); - } else if (Buttons[htButtons(ButtonTakeSnapshot)].Selected && CWebcam.GetDevices().Length > 0) + } else if (Buttons[ButtonTakeSnapshot].Selected && CWebcam.GetDevices().Length > 0) { OnTakeSnapshot(); } @@ -241,10 +241,10 @@ namespace Vocaluxe.Screens private void OnTakeSnapshot() { - Buttons[htButtons(ButtonSaveSnapshot)].Visible = true; - Buttons[htButtons(ButtonDiscardSnapshot)].Visible = true; - Buttons[htButtons(ButtonWebcam)].Visible = false; - Buttons[htButtons(ButtonTakeSnapshot)].Visible = false; + Buttons[ButtonSaveSnapshot].Visible = true; + Buttons[ButtonDiscardSnapshot].Visible = true; + Buttons[ButtonWebcam].Visible = false; + Buttons[ButtonTakeSnapshot].Visible = false; _Snapshot = CWebcam.GetBitmap(); } @@ -253,10 +253,10 @@ namespace Vocaluxe.Screens CWebcam.Stop(); CDraw.RemoveTexture(ref _WebcamTexture); _Snapshot = null; - Buttons[htButtons(ButtonSaveSnapshot)].Visible = false; - Buttons[htButtons(ButtonDiscardSnapshot)].Visible = false; - Buttons[htButtons(ButtonTakeSnapshot)].Visible = false; - Buttons[htButtons(ButtonWebcam)].Visible = true; + Buttons[ButtonSaveSnapshot].Visible = false; + Buttons[ButtonDiscardSnapshot].Visible = false; + Buttons[ButtonTakeSnapshot].Visible = false; + Buttons[ButtonWebcam].Visible = true; } private void OnSaveSnapshot() @@ -278,16 +278,16 @@ namespace Vocaluxe.Screens { if (CProfiles.Avatars[j].FileName == (filename + i + ".png")) { - CProfiles.SetAvatar(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, j); + CProfiles.SetAvatar(SelectSlides[SelectSlideProfiles].Selection, j); break; } } - Buttons[htButtons(ButtonSaveSnapshot)].Visible = false; - Buttons[htButtons(ButtonDiscardSnapshot)].Visible = false; - Buttons[htButtons(ButtonTakeSnapshot)].Visible = false; - Buttons[htButtons(ButtonWebcam)].Visible = true; + Buttons[ButtonSaveSnapshot].Visible = false; + Buttons[ButtonDiscardSnapshot].Visible = false; + Buttons[ButtonTakeSnapshot].Visible = false; + Buttons[ButtonWebcam].Visible = true; } private void OnWebcam() @@ -295,38 +295,38 @@ namespace Vocaluxe.Screens _Snapshot = null; CWebcam.Start(); CWebcam.GetFrame(ref _WebcamTexture); - Buttons[htButtons(ButtonSaveSnapshot)].Visible = false; - Buttons[htButtons(ButtonDiscardSnapshot)].Visible = false; - Buttons[htButtons(ButtonTakeSnapshot)].Visible = true; - Buttons[htButtons(ButtonWebcam)].Visible = false; + Buttons[ButtonSaveSnapshot].Visible = false; + Buttons[ButtonDiscardSnapshot].Visible = false; + Buttons[ButtonTakeSnapshot].Visible = true; + Buttons[ButtonWebcam].Visible = false; } public override bool UpdateGame() { - if (SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection > -1) + if (SelectSlides[SelectSlideProfiles].Selection > -1) { - Buttons[htButtons(ButtonPlayerName)].Text.Text = CProfiles.GetPlayerName(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection); + Buttons[ButtonPlayerName].Text.Text = CProfiles.GetPlayerName(SelectSlides[SelectSlideProfiles].Selection); if (_EditMode == EEditMode.PlayerName) - Buttons[htButtons(ButtonPlayerName)].Text.Text += "|"; + Buttons[ButtonPlayerName].Text.Text += "|"; - SelectSlides[htSelectSlides(SelectSlideDifficulty)].Selection = (int)CProfiles.GetDifficulty(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection); - SelectSlides[htSelectSlides(SelectSlideGuestProfile)].Selection = (int)CProfiles.GetGuestProfile(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection); - SelectSlides[htSelectSlides(SelectSlideActive)].Selection = (int)CProfiles.GetActive(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection); + SelectSlides[SelectSlideDifficulty].Selection = (int)CProfiles.GetDifficulty(SelectSlides[SelectSlideProfiles].Selection); + SelectSlides[SelectSlideGuestProfile].Selection = (int)CProfiles.GetGuestProfile(SelectSlides[SelectSlideProfiles].Selection); + SelectSlides[SelectSlideActive].Selection = (int)CProfiles.GetActive(SelectSlides[SelectSlideProfiles].Selection); - int avatarNr = CProfiles.GetAvatarNr(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection); - SelectSlides[htSelectSlides(SelectSlideAvatars)].Selection = avatarNr; + int avatarNr = CProfiles.GetAvatarNr(SelectSlides[SelectSlideProfiles].Selection); + SelectSlides[SelectSlideAvatars].Selection = avatarNr; if (CWebcam.GetDevices().Length > 0 && _WebcamTexture.index > 0) { if(_Snapshot == null) CWebcam.GetFrame(ref _WebcamTexture); - Statics[htStatics(StaticAvatar)].Texture = _WebcamTexture; + Statics[StaticAvatar].Texture = _WebcamTexture; RectangleF bounds = new RectangleF(_WebcamTexture.rect.X, _WebcamTexture.rect.Y, _WebcamTexture.rect.W, _WebcamTexture.rect.H); RectangleF rect = new RectangleF(0f, 0f, _WebcamTexture.rect.W, _WebcamTexture.rect.H); CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop); } else - Statics[htStatics(StaticAvatar)].Texture = CProfiles.Avatars[avatarNr].Texture; + Statics[StaticAvatar].Texture = CProfiles.Avatars[avatarNr].Texture; } return true; @@ -364,7 +364,7 @@ namespace Vocaluxe.Screens private void DeleteProfile() { - CProfiles.DeleteProfile(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection); + CProfiles.DeleteProfile(SelectSlides[SelectSlideProfiles].Selection); LoadProfiles(); UpdateGame(); } @@ -372,28 +372,28 @@ namespace Vocaluxe.Screens private void LoadProfiles() { _EditMode = EEditMode.None; - SelectSlides[htSelectSlides(SelectSlideProfiles)].Clear(); + SelectSlides[SelectSlideProfiles].Clear(); for (int i = 0; i < CProfiles.NumProfiles; i++) { - SelectSlides[htSelectSlides(SelectSlideProfiles)].AddValue(CProfiles.GetPlayerName(i)); + SelectSlides[SelectSlideProfiles].AddValue(CProfiles.GetPlayerName(i)); } if (CProfiles.NumProfiles > 0 && CProfiles.NumAvatars > 0) { - SelectSlides[htSelectSlides(SelectSlideDifficulty)].Selection = (int)CProfiles.GetDifficulty(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection); - SelectSlides[htSelectSlides(SelectSlideGuestProfile)].Selection = (int)CProfiles.GetGuestProfile(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection); - SelectSlides[htSelectSlides(SelectSlideActive)].Selection = (int)CProfiles.GetActive(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection); - SelectSlides[htSelectSlides(SelectSlideAvatars)].Selection = CProfiles.GetAvatarNr(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection); + SelectSlides[SelectSlideDifficulty].Selection = (int)CProfiles.GetDifficulty(SelectSlides[SelectSlideProfiles].Selection); + SelectSlides[SelectSlideGuestProfile].Selection = (int)CProfiles.GetGuestProfile(SelectSlides[SelectSlideProfiles].Selection); + SelectSlides[SelectSlideActive].Selection = (int)CProfiles.GetActive(SelectSlides[SelectSlideProfiles].Selection); + SelectSlides[SelectSlideAvatars].Selection = CProfiles.GetAvatarNr(SelectSlides[SelectSlideProfiles].Selection); } } private void LoadAvatars() { - SelectSlides[htSelectSlides(SelectSlideAvatars)].Clear(); + SelectSlides[SelectSlideAvatars].Clear(); for (int i = 0; i < CProfiles.NumAvatars; i++) { - SelectSlides[htSelectSlides(SelectSlideAvatars)].AddValue(CProfiles.Avatars[i].FileName); + SelectSlides[SelectSlideAvatars].AddValue(CProfiles.Avatars[i].FileName); } } @@ -402,12 +402,12 @@ namespace Vocaluxe.Screens _EditMode = EEditMode.None; CProfiles.NewProfile(); LoadProfiles(); - SelectSlides[htSelectSlides(SelectSlideProfiles)].LastValue(); + SelectSlides[SelectSlideProfiles].LastValue(); - CProfiles.SetAvatar(SelectSlides[htSelectSlides(SelectSlideProfiles)].Selection, - SelectSlides[htSelectSlides(SelectSlideAvatars)].Selection); + CProfiles.SetAvatar(SelectSlides[SelectSlideProfiles].Selection, + SelectSlides[SelectSlideAvatars].Selection); - SetInteractionToButton(Buttons[htButtons(ButtonPlayerName)]); + SetInteractionToButton(Buttons[ButtonPlayerName]); _EditMode = EEditMode.PlayerName; } } diff --git a/Vocaluxe/Screens/CScreenScore.cs b/Vocaluxe/Screens/CScreenScore.cs index 3e8abc60..2ab40aec 100644 --- a/Vocaluxe/Screens/CScreenScore.cs +++ b/Vocaluxe/Screens/CScreenScore.cs @@ -158,15 +158,15 @@ namespace Vocaluxe.Screens { StaticPointsBarDrawnPoints[p] = player[p].Points; } - string direction = (string) ScreenSettings[htScreenSettings(ScreenSettingAnimationDirection)].GetValue(); + string direction = (string) ScreenSettings[ScreenSettingAnimationDirection].GetValue(); if (direction.ToLower() == "vertical") { - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.W = ((float)StaticPointsBarDrawnPoints[p]) * (Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.W / 10000); + Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.W = ((float)StaticPointsBarDrawnPoints[p]) * (Statics[StaticPointsBarBG[p, CGame.NumPlayer - 1]].Rect.W / 10000); } else { - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = ((float)StaticPointsBarDrawnPoints[p]) * (Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H / 10000); - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H; + Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.H = ((float)StaticPointsBarDrawnPoints[p]) * (Statics[StaticPointsBarBG[p, CGame.NumPlayer - 1]].Rect.H / 10000); + Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.Y = Statics[StaticPointsBarBG[p, CGame.NumPlayer - 1]].Rect.H + Statics[StaticPointsBarBG[p, CGame.NumPlayer - 1]].Rect.Y - Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.H; } } } @@ -285,16 +285,16 @@ namespace Vocaluxe.Screens if (song == null) return; - Texts[htTexts(TextSong)].Text = song.Artist + " - " + song.Title; + Texts[TextSong].Text = song.Artist + " - " + song.Title; if (_Points.NumRounds > 1) { - Texts[htTexts(TextSong)].Text += " (" + _Round + "/" + _Points.NumRounds + ")"; + Texts[TextSong].Text += " (" + _Round + "/" + _Points.NumRounds + ")"; } player = _Points.GetPlayer(_Round - 1, CGame.NumPlayer); } else { - Texts[htTexts(TextSong)].Text = "TR_SCREENSCORE_OVERALLSCORE"; + Texts[TextSong].Text = "TR_SCREENSCORE_OVERALLSCORE"; for (int i = 0; i < CGame.NumRounds; i++) { SPlayer[] points = _Points.GetPlayer(i, CGame.NumPlayer); @@ -320,52 +320,52 @@ namespace Vocaluxe.Screens if (song != null) { if (!song.IsDuet) - Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Text = player[p].Name; + Texts[TextNames[p, CGame.NumPlayer - 1]].Text = player[p].Name; else if (player[p].LineNr == 0 && song.DuetPart1 != "Part 1") - Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Text = player[p].Name + " (" + song.DuetPart1 + ")"; + Texts[TextNames[p, CGame.NumPlayer - 1]].Text = player[p].Name + " (" + song.DuetPart1 + ")"; else if (player[p].LineNr == 1 && song.DuetPart2 != "Part 2") - Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Text = player[p].Name + " (" + song.DuetPart2 + ")"; + Texts[TextNames[p, CGame.NumPlayer - 1]].Text = player[p].Name + " (" + song.DuetPart2 + ")"; else - Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Text = player[p].Name; + Texts[TextNames[p, CGame.NumPlayer - 1]].Text = player[p].Name; } else - Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Text = player[p].Name; + Texts[TextNames[p, CGame.NumPlayer - 1]].Text = player[p].Name; - if (CGame.NumPlayer < (int)ScreenSettings[htScreenSettings(ScreenSettingShortScore)].GetValue()) - Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = ((int)Math.Round(player[p].Points)).ToString("0000") + " " + CLanguage.Translate("TR_SCREENSCORE_POINTS"); + if (CGame.NumPlayer < (int)ScreenSettings[ScreenSettingShortScore].GetValue()) + Texts[TextScores[p, CGame.NumPlayer - 1]].Text = ((int)Math.Round(player[p].Points)).ToString("0000") + " " + CLanguage.Translate("TR_SCREENSCORE_POINTS"); else - Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = ((int)Math.Round(player[p].Points)).ToString("0000"); - if (CGame.NumPlayer < (int)ScreenSettings[htScreenSettings(ScreenSettingShortDifficulty)].GetValue()) - Texts[htTexts(TextDifficulty[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_GAMEDIFFICULTY") + ": " + CLanguage.Translate(player[p].Difficulty.ToString()); + Texts[TextScores[p, CGame.NumPlayer - 1]].Text = ((int)Math.Round(player[p].Points)).ToString("0000"); + if (CGame.NumPlayer < (int)ScreenSettings[ScreenSettingShortDifficulty].GetValue()) + Texts[TextDifficulty[p, CGame.NumPlayer - 1]].Text = CLanguage.Translate("TR_SCREENSCORE_GAMEDIFFICULTY") + ": " + CLanguage.Translate(player[p].Difficulty.ToString()); else - Texts[htTexts(TextDifficulty[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(player[p].Difficulty.ToString()); - if (CGame.NumPlayer < (int)ScreenSettings[htScreenSettings(ScreenSettingShortRating)].GetValue()) - Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_RATING") + ": " + CLanguage.Translate(GetRating((int)Math.Round(player[p].Points))); + Texts[TextDifficulty[p, CGame.NumPlayer - 1]].Text = CLanguage.Translate(player[p].Difficulty.ToString()); + if (CGame.NumPlayer < (int)ScreenSettings[ScreenSettingShortRating].GetValue()) + Texts[TextRatings[p, CGame.NumPlayer - 1]].Text = CLanguage.Translate("TR_SCREENSCORE_RATING") + ": " + CLanguage.Translate(GetRating((int)Math.Round(player[p].Points))); else - Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(GetRating((int)Math.Round(player[p].Points))); + Texts[TextRatings[p, CGame.NumPlayer - 1]].Text = CLanguage.Translate(GetRating((int)Math.Round(player[p].Points))); StaticPointsBarDrawnPoints[p] = 0.0; - string direction = (string)ScreenSettings[htScreenSettings(ScreenSettingAnimationDirection)].GetValue(); + string direction = (string)ScreenSettings[ScreenSettingAnimationDirection].GetValue(); if (direction.ToLower() == "vertical") { - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.W = 0; + Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.W = 0; } else { - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = 0; - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H; + Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.H = 0; + Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.Y = Statics[StaticPointsBarBG[p, CGame.NumPlayer - 1]].Rect.H + Statics[StaticPointsBarBG[p, CGame.NumPlayer - 1]].Rect.Y - Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.H; } if (player[p].ProfileID >= 0 && player[p].ProfileID < CProfiles.NumProfiles) - Statics[htStatics(StaticAvatar[p, CGame.NumPlayer - 1])].Texture = CProfiles.Profiles[player[p].ProfileID].Avatar.Texture; + Statics[StaticAvatar[p, CGame.NumPlayer - 1]].Texture = CProfiles.Profiles[player[p].ProfileID].Avatar.Texture; } if (CConfig.ScoreAnimationTime < 1) { for (int p = 0; p < CGame.NumPlayer; p++) { - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = ((float)player[p].Points) * (Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H / 10000); - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H; + Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.H = ((float)player[p].Points) * (Statics[StaticPointsBarBG[p, CGame.NumPlayer - 1]].Rect.H / 10000); + Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.Y = Statics[StaticPointsBarBG[p, CGame.NumPlayer - 1]].Rect.H + Statics[StaticPointsBarBG[p, CGame.NumPlayer - 1]].Rect.Y - Statics[StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.H; StaticPointsBarDrawnPoints[p] = player[p].Points; } } @@ -382,15 +382,15 @@ namespace Vocaluxe.Screens { if (player <= numplayer) { - Texts[htTexts(TextNames[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer); - Texts[htTexts(TextScores[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer); - Texts[htTexts(TextRatings[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer); - Texts[htTexts(TextDifficulty[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer); - Statics[htStatics(StaticPointsBar[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer); - Statics[htStatics(StaticPointsBarBG[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer); - Statics[htStatics(StaticAvatar[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer); + Texts[TextNames[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); + Texts[TextScores[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); + Texts[TextRatings[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); + Texts[TextDifficulty[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); + Statics[StaticPointsBar[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); + Statics[StaticPointsBarBG[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); + Statics[StaticAvatar[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); - Statics[htStatics(StaticAvatar[player, numplayer])].Texture = new STexture(-1); + Statics[StaticAvatar[player, numplayer]].Texture = new STexture(-1); } } } diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 2c45861e..626b8c3b 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -151,17 +151,17 @@ namespace Vocaluxe.Screens { base.LoadTheme(XmlPath); - Statics[htStatics(StaticTimeLine)].Visible = false; - Statics[htStatics(StaticTimeLineExpandedNormal)].Visible = false; - Statics[htStatics(StaticTimeLineExpandedHighlighted)].Visible = false; - Statics[htStatics(StaticPauseBG)].Visible = false; - Texts[htTexts(TextPause)].Visible = false; + Statics[StaticTimeLine].Visible = false; + Statics[StaticTimeLineExpandedNormal].Visible = false; + Statics[StaticTimeLineExpandedHighlighted].Visible = false; + Statics[StaticPauseBG].Visible = false; + Texts[TextPause].Visible = false; - Statics[htStatics(StaticPauseBG)].Visible = false; - Texts[htTexts(TextPause)].Visible = false; + Statics[StaticPauseBG].Visible = false; + Texts[TextPause].Visible = false; - Buttons[htButtons(ButtonCancel)].Visible = false; - Buttons[htButtons(ButtonContinue)].Visible = false; + Buttons[ButtonCancel].Visible = false; + Buttons[ButtonContinue].Visible = false; } public override bool HandleInput(KeyEvent KeyEvent) @@ -179,13 +179,13 @@ namespace Vocaluxe.Screens case Keys.Escape: TogglePause(); if (_Pause) - SetInteractionToButton(Buttons[htButtons(ButtonCancel)]); + SetInteractionToButton(Buttons[ButtonCancel]); break; case Keys.P: TogglePause(); if (_Pause) - SetInteractionToButton(Buttons[htButtons(ButtonContinue)]); + SetInteractionToButton(Buttons[ButtonContinue]); break; case Keys.T: @@ -230,11 +230,11 @@ namespace Vocaluxe.Screens } break; case Keys.Enter: - if (Buttons[htButtons(ButtonContinue)].Selected && _Pause) + if (Buttons[ButtonContinue].Selected && _Pause) TogglePause(); - if (Buttons[htButtons(ButtonCancel)].Selected && _Pause) + if (Buttons[ButtonCancel].Selected && _Pause) Stop(); - if (Buttons[htButtons(ButtonSkip)].Selected && _Pause) + if (Buttons[ButtonSkip].Selected && _Pause) { LoadNextSong(); TogglePause(); @@ -278,18 +278,18 @@ namespace Vocaluxe.Screens { TogglePause(); if (_Pause) - SetInteractionToButton(Buttons[htButtons(ButtonContinue)]); + SetInteractionToButton(Buttons[ButtonContinue]); } if (MouseEvent.LB && IsMouseOver(MouseEvent) && _Pause) { - if (Buttons[htButtons(ButtonContinue)].Selected && _Pause) + if (Buttons[ButtonContinue].Selected && _Pause) TogglePause(); - if (Buttons[htButtons(ButtonCancel)].Selected && _Pause) + if (Buttons[ButtonCancel].Selected && _Pause) Stop(); - if (Buttons[htButtons(ButtonSkip)].Selected && _Pause) + if (Buttons[ButtonSkip].Selected && _Pause) { LoadNextSong(); TogglePause(); @@ -331,48 +331,48 @@ namespace Vocaluxe.Screens float[] Alpha = CalcFadingAlpha(); if (Alpha != null) { - Lyrics[htLyrics(LyricMain)].Alpha = Alpha[0]; - Lyrics[htLyrics(LyricSub)].Alpha = Alpha[1]; + Lyrics[LyricMain].Alpha = Alpha[0]; + Lyrics[LyricSub].Alpha = Alpha[1]; - Lyrics[htLyrics(LyricMainTop)].Alpha = Alpha[0]; - Lyrics[htLyrics(LyricSubTop)].Alpha = Alpha[1]; + Lyrics[LyricMainTop].Alpha = Alpha[0]; + Lyrics[LyricSubTop].Alpha = Alpha[1]; - Statics[htStatics(StaticLyrics)].Alpha = Alpha[0]; - Statics[htStatics(StaticLyricsTop)].Alpha = Alpha[0]; + Statics[StaticLyrics].Alpha = Alpha[0]; + Statics[StaticLyricsTop].Alpha = Alpha[0]; - Statics[htStatics(StaticLyricHelper)].Alpha = Alpha[0]; - Statics[htStatics(StaticLyricHelperTop)].Alpha = Alpha[0]; + Statics[StaticLyricHelper].Alpha = Alpha[0]; + Statics[StaticLyricHelperTop].Alpha = Alpha[0]; for (int p = 0; p < CGame.NumPlayer; p++) { - SingNotes[htSingNotes(SingBars)].SetAlpha(NoteLines[p], Alpha[CGame.Player[p].LineNr * 2]); + SingNotes[SingBars].SetAlpha(NoteLines[p], Alpha[CGame.Player[p].LineNr * 2]); if (CConfig.FadePlayerInfo == EFadePlayerInfo.TR_CONFIG_FADEPLAYERINFO_INFO || CConfig.FadePlayerInfo == EFadePlayerInfo.TR_CONFIG_FADEPLAYERINFO_ALL) { - Statics[htStatics(StaticAvatars[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2]; - Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2]; + Statics[StaticAvatars[p, CGame.NumPlayer - 1]].Alpha = Alpha[CGame.Player[p].LineNr * 2]; + Texts[TextNames[p, CGame.NumPlayer - 1]].Alpha = Alpha[CGame.Player[p].LineNr * 2]; } if (CConfig.FadePlayerInfo == EFadePlayerInfo.TR_CONFIG_FADEPLAYERINFO_ALL) { - Statics[htStatics(StaticScores[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2]; - Statics[htStatics(StaticAvatars[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2]; - Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2]; - Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2]; + Statics[StaticScores[p, CGame.NumPlayer - 1]].Alpha = Alpha[CGame.Player[p].LineNr * 2]; + Statics[StaticAvatars[p, CGame.NumPlayer - 1]].Alpha = Alpha[CGame.Player[p].LineNr * 2]; + Texts[TextNames[p, CGame.NumPlayer - 1]].Alpha = Alpha[CGame.Player[p].LineNr * 2]; + Texts[TextScores[p, CGame.NumPlayer - 1]].Alpha = Alpha[CGame.Player[p].LineNr * 2]; } } if (Alpha.Length > 2) { - Lyrics[htLyrics(LyricMainDuet)].Alpha = Alpha[0]; - Lyrics[htLyrics(LyricSubDuet)].Alpha = Alpha[1]; + Lyrics[LyricMainDuet].Alpha = Alpha[0]; + Lyrics[LyricSubDuet].Alpha = Alpha[1]; - Statics[htStatics(StaticLyricsDuet)].Alpha = Alpha[0]; - Statics[htStatics(StaticLyricHelperDuet)].Alpha = Alpha[0]; + Statics[StaticLyricsDuet].Alpha = Alpha[0]; + Statics[StaticLyricHelperDuet].Alpha = Alpha[0]; - Lyrics[htLyrics(LyricMain)].Alpha = Alpha[2]; - Lyrics[htLyrics(LyricSub)].Alpha = Alpha[3]; + Lyrics[LyricMain].Alpha = Alpha[2]; + Lyrics[LyricSub].Alpha = Alpha[3]; - Statics[htStatics(StaticLyrics)].Alpha = Alpha[2]; - Statics[htStatics(StaticLyricHelper)].Alpha = Alpha[2]; + Statics[StaticLyrics].Alpha = Alpha[2]; + Statics[StaticLyricHelper].Alpha = Alpha[2]; } } @@ -381,11 +381,11 @@ namespace Vocaluxe.Screens { if (CGame.Player[p].Points < 10000) { - Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = CGame.Player[p].Points.ToString("0000"); + Texts[TextScores[p, CGame.NumPlayer - 1]].Text = CGame.Player[p].Points.ToString("0000"); } else { - Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = CGame.Player[p].Points.ToString("00000"); + Texts[TextScores[p, CGame.NumPlayer - 1]].Text = CGame.Player[p].Points.ToString("00000"); } } @@ -419,20 +419,20 @@ namespace Vocaluxe.Screens _TimeRects.Clear(); - SingNotes[htSingNotes(SingBars)].Reset(); + SingNotes[SingBars].Reset(); for (int i = 0; i < CSettings.MaxNumPlayer; i++) { NoteLines[i] = -1; } - for (int i = 0; i < Lyrics.Length; i++) + foreach(CLyric lyric in Lyrics) { - Lyrics[i].LyricStyle = CConfig.LyricStyle; + lyric.LyricStyle = CConfig.LyricStyle; } for (int p = 0; p < CGame.NumPlayer; p++) { - Statics[htStatics(StaticAvatars[p, CGame.NumPlayer - 1])].Aspect = EAspect.Crop; + Statics[StaticAvatars[p, CGame.NumPlayer - 1]].Aspect = EAspect.Crop; } SetVisibility(); @@ -496,37 +496,37 @@ namespace Vocaluxe.Screens switch (CConfig.TimerLook) { case ETimerLook.TR_CONFIG_TIMERLOOK_NORMAL: - CDraw.DrawTexture(Statics[htStatics(StaticTimeLine)].Texture, Statics[htStatics(StaticTimeLine)].Rect, new SColorF(1, 1, 1, 1), _TimeLineRect); + CDraw.DrawTexture(Statics[StaticTimeLine].Texture, Statics[StaticTimeLine].Rect, new SColorF(1, 1, 1, 1), _TimeLineRect); break; case ETimerLook.TR_CONFIG_TIMERLOOK_EXPANDED: for (int i = 0; i < _TimeRects.Count; i++) { - CDraw.DrawTexture(_TimeRects[i].rect.Texture, Statics[htStatics(StaticTimeLine)].Rect, _TimeRects[i].rect.Color, _TimeRects[i].rect.Rect); + CDraw.DrawTexture(_TimeRects[i].rect.Texture, Statics[StaticTimeLine].Rect, _TimeRects[i].rect.Color, _TimeRects[i].rect.Rect); } break; } - Lyrics[htLyrics(LyricSub)].Draw(-100); - Lyrics[htLyrics(LyricMain)].Draw(CGame.Beat); + Lyrics[LyricSub].Draw(-100); + Lyrics[LyricMain].Draw(CGame.Beat); - Lyrics[htLyrics(LyricSubDuet)].Draw(-100); - Lyrics[htLyrics(LyricMainDuet)].Draw(CGame.Beat); + Lyrics[LyricSubDuet].Draw(-100); + Lyrics[LyricMainDuet].Draw(CGame.Beat); - Lyrics[htLyrics(LyricSubTop)].Draw(-100); - Lyrics[htLyrics(LyricMainTop)].Draw(CGame.Beat); + Lyrics[LyricSubTop].Draw(-100); + Lyrics[LyricMainTop].Draw(CGame.Beat); for (int i = 0; i < CGame.NumPlayer; i++) { - SingNotes[htSingNotes(SingBars)].Draw(NoteLines[i], CGame.Player[i].SingLine, i); + SingNotes[SingBars].Draw(NoteLines[i], CGame.Player[i].SingLine, i); } DrawLyricHelper(); if (_Pause) { - Statics[htStatics(StaticPauseBG)].ForceDraw(); - Texts[htTexts(TextPause)].ForceDraw(); + Statics[StaticPauseBG].ForceDraw(); + Texts[TextPause].ForceDraw(); foreach (CButton button in Buttons) button.Draw(); @@ -562,15 +562,15 @@ namespace Vocaluxe.Screens } CDraw.RemoveTexture(ref _Background); - Lyrics[htLyrics(LyricMain)].Clear(); - Lyrics[htLyrics(LyricSub)].Clear(); - Lyrics[htLyrics(LyricMainDuet)].Clear(); - Lyrics[htLyrics(LyricSubDuet)].Clear(); - Lyrics[htLyrics(LyricMainTop)].Clear(); - Lyrics[htLyrics(LyricSubTop)].Clear(); - Texts[htTexts(TextSongName)].Text = String.Empty; - Texts[htTexts(TextDuetName1)].Text = String.Empty; - Texts[htTexts(TextDuetName2)].Text = String.Empty; + Lyrics[LyricMain].Clear(); + Lyrics[LyricSub].Clear(); + Lyrics[LyricMainDuet].Clear(); + Lyrics[LyricSubDuet].Clear(); + Lyrics[LyricMainTop].Clear(); + Lyrics[LyricSubTop].Clear(); + Texts[TextSongName].Text = String.Empty; + Texts[TextDuetName1].Text = String.Empty; + Texts[TextDuetName2].Text = String.Empty; GC.Collect(); } @@ -601,7 +601,7 @@ namespace Vocaluxe.Screens int rounds = CGame.GetNumSongs(); if (rounds > 1) songname += " (" + CGame.RoundNr + "/" + rounds.ToString() + ")"; - Texts[htTexts(TextSongName)].Text = songname; + Texts[TextSongName].Text = songname; _CurrentStream = CSound.Load(song.GetMP3(), true); CSound.SetStreamVolumeMax(_CurrentStream, CConfig.GameMusicVolume); @@ -635,13 +635,13 @@ namespace Vocaluxe.Screens if (song.BackgroundFileName.Length > 0) _Background = CDraw.AddTexture(Path.Combine(song.Folder, song.BackgroundFileName)); - SingNotes[htSingNotes(SingBars)].Reset(); + SingNotes[SingBars].Reset(); if (song.IsDuet) { - Texts[htTexts(TextDuetName1)].Text = song.DuetPart1; - Texts[htTexts(TextDuetName2)].Text = song.DuetPart2; + Texts[TextDuetName1].Text = song.DuetPart1; + Texts[TextDuetName2].Text = song.DuetPart2; //More than one song: Player is not assigned to line by user //Otherwise, this is done by CScreenNames if (CGame.GetNumSongs() > 1) @@ -667,18 +667,18 @@ namespace Vocaluxe.Screens for (int p = 0; p < CGame.NumPlayer; p++) { - NoteLines[p] = SingNotes[htSingNotes(SingBars)].AddPlayer( - SingNotes[htSingNotes(SingBars)].BarPos[p, CGame.NumPlayer - 1], + NoteLines[p] = SingNotes[SingBars].AddPlayer( + SingNotes[SingBars].BarPos[p, CGame.NumPlayer - 1], CTheme.GetPlayerColor(p + 1), p); } /* case 4: - NoteLines[0] = SingNotes[htSingNotes(SingBars)].AddPlayer(new SRectF(35f, 100f, 590f, 200f, -0.5f), CTheme.ThemeColors.Player[0]); - NoteLines[1] = SingNotes[htSingNotes(SingBars)].AddPlayer(new SRectF(35f, 350f, 590f, 200f, -0.5f), CTheme.ThemeColors.Player[1]); - NoteLines[2] = SingNotes[htSingNotes(SingBars)].AddPlayer(new SRectF(640f, 100f, 590f, 200f, -0.5f), CTheme.ThemeColors.Player[2]); - NoteLines[3] = SingNotes[htSingNotes(SingBars)].AddPlayer(new SRectF(640f, 350f, 590f, 200f, -0.5f), CTheme.ThemeColors.Player[3]); + NoteLines[0] = SingNotes[SingBars].AddPlayer(new SRectF(35f, 100f, 590f, 200f, -0.5f), CTheme.ThemeColors.Player[0]); + NoteLines[1] = SingNotes[SingBars].AddPlayer(new SRectF(35f, 350f, 590f, 200f, -0.5f), CTheme.ThemeColors.Player[1]); + NoteLines[2] = SingNotes[SingBars].AddPlayer(new SRectF(640f, 100f, 590f, 200f, -0.5f), CTheme.ThemeColors.Player[2]); + NoteLines[3] = SingNotes[SingBars].AddPlayer(new SRectF(640f, 350f, 590f, 200f, -0.5f), CTheme.ThemeColors.Player[3]); break; */ @@ -700,22 +700,22 @@ namespace Vocaluxe.Screens private void SetDuetLyricsVisibility(bool isDuet) { - Statics[htStatics(StaticLyricsDuet)].Visible = isDuet; - Lyrics[htLyrics(LyricMainDuet)].Visible = isDuet; - Lyrics[htLyrics(LyricSubDuet)].Visible = isDuet; + Statics[StaticLyricsDuet].Visible = isDuet; + Lyrics[LyricMainDuet].Visible = isDuet; + Lyrics[LyricSubDuet].Visible = isDuet; if (isDuet) { - Lyrics[htLyrics(LyricMainTop)].Visible = false; - Lyrics[htLyrics(LyricSubTop)].Visible = false; - Statics[htStatics(StaticLyricsTop)].Visible = false; + Lyrics[LyricMainTop].Visible = false; + Lyrics[LyricSubTop].Visible = false; + Statics[StaticLyricsTop].Visible = false; } else { bool LyricsOnTop = (CGame.NumPlayer != 1) && CConfig.LyricsOnTop == EOffOn.TR_CONFIG_ON; - Lyrics[htLyrics(LyricMainTop)].Visible = LyricsOnTop; - Lyrics[htLyrics(LyricSubTop)].Visible = LyricsOnTop; - Statics[htStatics(StaticLyricsTop)].Visible = LyricsOnTop; + Lyrics[LyricMainTop].Visible = LyricsOnTop; + Lyrics[LyricSubTop].Visible = LyricsOnTop; + Statics[StaticLyricsTop].Visible = LyricsOnTop; } } @@ -796,54 +796,54 @@ namespace Vocaluxe.Screens for (int j = 0; j < CGame.NumPlayer; j++) { if (CGame.Player[j].LineNr == i) - SingNotes[htSingNotes(SingBars)].AddLine(NoteLines[j], line, nr, j); + SingNotes[SingBars].AddLine(NoteLines[j], line, nr, j); } if (i == 0 && !song.IsDuet || i == 1 && song.IsDuet) { - Lyrics[htLyrics(LyricMain)].SetLine(line[nr]); - Lyrics[htLyrics(LyricMainTop)].SetLine(line[nr]); + Lyrics[LyricMain].SetLine(line[nr]); + Lyrics[LyricMainTop].SetLine(line[nr]); _TimeToFirstNote = CGame.GetTimeFromBeats(line[nr].FirstNoteBeat - line[nr].StartBeat, song.BPM); _RemainingTimeToFirstNote = CGame.GetTimeFromBeats(line[nr].FirstNoteBeat - CGame.GetBeatFromTime(_CurrentTime, song.BPM, song.Gap), song.BPM); if (line.Length >= nr + 2) { - Lyrics[htLyrics(LyricSub)].SetLine(line[nr + 1]); - Lyrics[htLyrics(LyricSubTop)].SetLine(line[nr + 1]); + Lyrics[LyricSub].SetLine(line[nr + 1]); + Lyrics[LyricSubTop].SetLine(line[nr + 1]); } else { - Lyrics[htLyrics(LyricSub)].Clear(); - Lyrics[htLyrics(LyricSubTop)].Clear(); + Lyrics[LyricSub].Clear(); + Lyrics[LyricSubTop].Clear(); } } if (i == 0 && song.IsDuet) { - Lyrics[htLyrics(LyricMainDuet)].SetLine(line[nr]); + Lyrics[LyricMainDuet].SetLine(line[nr]); _TimeToFirstNoteDuet = CGame.GetTimeFromBeats(line[nr].FirstNoteBeat - line[nr].StartBeat, song.BPM); _RemainingTimeToFirstNoteDuet = CGame.GetTimeFromBeats(line[nr].FirstNoteBeat - CGame.GetBeatFromTime(_CurrentTime, song.BPM, song.Gap), song.BPM); if (line.Length >= nr + 2) - Lyrics[htLyrics(LyricSubDuet)].SetLine(line[nr + 1]); + Lyrics[LyricSubDuet].SetLine(line[nr + 1]); else - Lyrics[htLyrics(LyricSubDuet)].Clear(); + Lyrics[LyricSubDuet].Clear(); } } else { if (i == 0 && !song.IsDuet || i == 1 && song.IsDuet) { - Lyrics[htLyrics(LyricMain)].Clear(); - Lyrics[htLyrics(LyricSub)].Clear(); - Lyrics[htLyrics(LyricMainTop)].Clear(); - Lyrics[htLyrics(LyricSubTop)].Clear(); + Lyrics[LyricMain].Clear(); + Lyrics[LyricSub].Clear(); + Lyrics[LyricMainTop].Clear(); + Lyrics[LyricSubTop].Clear(); _TimeToFirstNote = 0f; } if (i == 0 && song.IsDuet) { - Lyrics[htLyrics(LyricMainDuet)].Clear(); - Lyrics[htLyrics(LyricSubDuet)].Clear(); + Lyrics[LyricMainDuet].Clear(); + Lyrics[LyricSubDuet].Clear(); _TimeToFirstNoteDuet = 0f; } } @@ -855,18 +855,18 @@ namespace Vocaluxe.Screens _Pause = !_Pause; if (_Pause) { - Buttons[htButtons(ButtonCancel)].Visible = true; - Buttons[htButtons(ButtonContinue)].Visible = true; + Buttons[ButtonCancel].Visible = true; + Buttons[ButtonContinue].Visible = true; if (CGame.NumRounds > CGame.RoundNr && CGame.NumRounds > 1) - Buttons[htButtons(ButtonSkip)].Visible = true; + Buttons[ButtonSkip].Visible = true; else - Buttons[htButtons(ButtonSkip)].Visible = false; + Buttons[ButtonSkip].Visible = false; CSound.Pause(_CurrentStream); }else { - Buttons[htButtons(ButtonCancel)].Visible = false; - Buttons[htButtons(ButtonContinue)].Visible = false; - Buttons[htButtons(ButtonSkip)].Visible = false; + Buttons[ButtonCancel].Visible = false; + Buttons[ButtonContinue].Visible = false; + Buttons[ButtonSkip].Visible = false; CSound.Play(_CurrentStream); CWebcam.Start(); } @@ -918,17 +918,17 @@ namespace Vocaluxe.Screens private void SetVisibility() { - Statics[htStatics(StaticLyricsDuet)].Visible = false; - Statics[htStatics(StaticLyricHelper)].Visible = false; - Statics[htStatics(StaticLyricHelperDuet)].Visible = false; - Statics[htStatics(StaticLyricHelperTop)].Visible = false; - Lyrics[htLyrics(LyricMainDuet)].Visible = false; - Lyrics[htLyrics(LyricSubDuet)].Visible = false; + Statics[StaticLyricsDuet].Visible = false; + Statics[StaticLyricHelper].Visible = false; + Statics[StaticLyricHelperDuet].Visible = false; + Statics[StaticLyricHelperTop].Visible = false; + Lyrics[LyricMainDuet].Visible = false; + Lyrics[LyricSubDuet].Visible = false; - Statics[htStatics(StaticSongText)].Visible = false; - Texts[htTexts(TextSongName)].Visible = false; - Texts[htTexts(TextDuetName1)].Visible = false; - Texts[htTexts(TextDuetName2)].Visible = false; + Statics[StaticSongText].Visible = false; + Texts[TextSongName].Visible = false; + Texts[TextDuetName1].Visible = false; + Texts[TextDuetName2].Visible = false; for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++) { @@ -936,33 +936,33 @@ namespace Vocaluxe.Screens { if (player <= numplayer) { - Texts[htTexts(TextScores[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer); - Texts[htTexts(TextNames[player, numplayer])].Visible = ((numplayer + 1 == CGame.NumPlayer) + Texts[TextScores[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); + Texts[TextNames[player, numplayer]].Visible = ((numplayer + 1 == CGame.NumPlayer) && (CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH || CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_NAME)); - Statics[htStatics(StaticScores[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer); - Statics[htStatics(StaticAvatars[player, numplayer])].Visible = ((numplayer + 1 == CGame.NumPlayer) + Statics[StaticScores[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); + Statics[StaticAvatars[player, numplayer]].Visible = ((numplayer + 1 == CGame.NumPlayer) && (CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH || CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_AVATAR)); } } } - Lyrics[htLyrics(LyricMain)].Alpha = 0f; - Lyrics[htLyrics(LyricSub)].Alpha = 0f; + Lyrics[LyricMain].Alpha = 0f; + Lyrics[LyricSub].Alpha = 0f; - Lyrics[htLyrics(LyricMainTop)].Alpha = 0f; - Lyrics[htLyrics(LyricSubTop)].Alpha = 0f; + Lyrics[LyricMainTop].Alpha = 0f; + Lyrics[LyricSubTop].Alpha = 0f; - Statics[htStatics(StaticLyrics)].Alpha = 0f; - Statics[htStatics(StaticLyricsTop)].Alpha = 0f; + Statics[StaticLyrics].Alpha = 0f; + Statics[StaticLyricsTop].Alpha = 0f; - Statics[htStatics(StaticLyricHelper)].Alpha = 0f; - Statics[htStatics(StaticLyricHelperTop)].Alpha = 0f; + Statics[StaticLyricHelper].Alpha = 0f; + Statics[StaticLyricHelperTop].Alpha = 0f; - Lyrics[htLyrics(LyricMainDuet)].Alpha = 0f; - Lyrics[htLyrics(LyricSubDuet)].Alpha = 0f; + Lyrics[LyricMainDuet].Alpha = 0f; + Lyrics[LyricSubDuet].Alpha = 0f; - Statics[htStatics(StaticLyricsDuet)].Alpha = 0f; - Statics[htStatics(StaticLyricHelperDuet)].Alpha = 0f; + Statics[StaticLyricsDuet].Alpha = 0f; + Statics[StaticLyricHelperDuet].Alpha = 0f; } @@ -992,28 +992,28 @@ namespace Vocaluxe.Screens if (time > totaltime) time = totaltime; - SRectF Rect = Statics[htStatics(StaticLyricHelper)].Rect; + SRectF Rect = Statics[StaticLyricHelper].Rect; SColorF Color = new SColorF( - Statics[htStatics(StaticLyricHelper)].Color.R, - Statics[htStatics(StaticLyricHelper)].Color.G, - Statics[htStatics(StaticLyricHelper)].Color.B, - Statics[htStatics(StaticLyricHelper)].Color.A * Statics[htStatics(StaticLyricHelper)].Alpha * alpha); + Statics[StaticLyricHelper].Color.R, + Statics[StaticLyricHelper].Color.G, + Statics[StaticLyricHelper].Color.B, + Statics[StaticLyricHelper].Color.A * Statics[StaticLyricHelper].Alpha * alpha); - float distance = Lyrics[htLyrics(LyricMain)].GetCurrentLyricPosX() - Rect.X - Rect.W; - CDraw.DrawTexture(Statics[htStatics(StaticLyricHelper)].Texture, + float distance = Lyrics[LyricMain].GetCurrentLyricPosX() - Rect.X - Rect.W; + CDraw.DrawTexture(Statics[StaticLyricHelper].Texture, new SRectF(Rect.X + distance * (1f - time / totaltime), Rect.Y, Rect.W, Rect.H, Rect.Z), Color); - if (Statics[htStatics(StaticLyricsTop)].Visible) + if (Statics[StaticLyricsTop].Visible) { - Rect = Statics[htStatics(StaticLyricHelperTop)].Rect; + Rect = Statics[StaticLyricHelperTop].Rect; Color = new SColorF( - Statics[htStatics(StaticLyricHelperTop)].Color.R, - Statics[htStatics(StaticLyricHelperTop)].Color.G, - Statics[htStatics(StaticLyricHelperTop)].Color.B, - Statics[htStatics(StaticLyricHelperTop)].Color.A * Statics[htStatics(StaticLyricHelper)].Alpha * alpha); + Statics[StaticLyricHelperTop].Color.R, + Statics[StaticLyricHelperTop].Color.G, + Statics[StaticLyricHelperTop].Color.B, + Statics[StaticLyricHelperTop].Color.A * Statics[StaticLyricHelper].Alpha * alpha); - distance = Lyrics[htLyrics(LyricMainTop)].GetCurrentLyricPosX() - Rect.X - Rect.W; - CDraw.DrawTexture(Statics[htStatics(StaticLyricHelperTop)].Texture, + distance = Lyrics[LyricMainTop].GetCurrentLyricPosX() - Rect.X - Rect.W; + CDraw.DrawTexture(Statics[StaticLyricHelperTop].Texture, new SRectF(Rect.X + distance * (1f - time / totaltime), Rect.Y, Rect.W, Rect.H, Rect.Z), Color); } } @@ -1031,16 +1031,16 @@ namespace Vocaluxe.Screens if (time > totaltime) time = totaltime; - SRectF Rect = Statics[htStatics(StaticLyricHelperDuet)].Rect; + SRectF Rect = Statics[StaticLyricHelperDuet].Rect; SColorF Color = new SColorF( - Statics[htStatics(StaticLyricHelperDuet)].Color.R, - Statics[htStatics(StaticLyricHelperDuet)].Color.G, - Statics[htStatics(StaticLyricHelperDuet)].Color.B, - Statics[htStatics(StaticLyricHelperDuet)].Color.A * Statics[htStatics(StaticLyricHelperDuet)].Alpha * alpha); + Statics[StaticLyricHelperDuet].Color.R, + Statics[StaticLyricHelperDuet].Color.G, + Statics[StaticLyricHelperDuet].Color.B, + Statics[StaticLyricHelperDuet].Color.A * Statics[StaticLyricHelperDuet].Alpha * alpha); - float distance = Lyrics[htLyrics(LyricMainDuet)].GetCurrentLyricPosX() - Rect.X - Rect.W; - CDraw.DrawTexture(Statics[htStatics(StaticLyricHelperDuet)].Texture, + float distance = Lyrics[LyricMainDuet].GetCurrentLyricPosX() - Rect.X - Rect.W; + CDraw.DrawTexture(Statics[StaticLyricHelperDuet].Texture, new SRectF(Rect.X + distance * (1f - time / totaltime), Rect.Y, Rect.W, Rect.H, Rect.Z), Color); } @@ -1157,36 +1157,36 @@ namespace Vocaluxe.Screens private void UpdateSongText() { - if (_TimerSongText.IsRunning && !Lyrics[htLyrics(LyricMainDuet)].Visible && !Lyrics[htLyrics(LyricMainTop)].Visible) + if (_TimerSongText.IsRunning && !Lyrics[LyricMainDuet].Visible && !Lyrics[LyricMainTop].Visible) { float t = _TimerSongText.ElapsedMilliseconds / 1000f; if (t < 10f) { - Statics[htStatics(StaticSongText)].Visible = true; - Texts[htTexts(TextSongName)].Visible = true; + Statics[StaticSongText].Visible = true; + Texts[TextSongName].Visible = true; if (t < 7f) { - Statics[htStatics(StaticSongText)].Color.A = 1f; - Texts[htTexts(TextSongName)].Color.A = 1f; + Statics[StaticSongText].Color.A = 1f; + Texts[TextSongName].Color.A = 1f; } else { - Statics[htStatics(StaticSongText)].Color.A = (3f - (t - 7f)) / 3f; - Texts[htTexts(TextSongName)].Color.A = (3f - (t - 7f)) / 3f; + Statics[StaticSongText].Color.A = (3f - (t - 7f)) / 3f; + Texts[TextSongName].Color.A = (3f - (t - 7f)) / 3f; } } else { - Statics[htStatics(StaticSongText)].Visible = false; - Texts[htTexts(TextSongName)].Visible = false; + Statics[StaticSongText].Visible = false; + Texts[TextSongName].Visible = false; _TimerSongText.Stop(); } } else { - Statics[htStatics(StaticSongText)].Visible = false; - Texts[htTexts(TextSongName)].Visible = false; + Statics[StaticSongText].Visible = false; + Texts[TextSongName].Visible = false; } } @@ -1200,32 +1200,32 @@ namespace Vocaluxe.Screens float t = _TimerDuetText1.ElapsedMilliseconds / 1000f; if (t < 10f) { - Texts[htTexts(TextDuetName1)].Visible = true; + Texts[TextDuetName1].Visible = true; if (t < 3f) { - Texts[htTexts(TextDuetName1)].Color.A = (3f - (3f - t)) / 3f; + Texts[TextDuetName1].Color.A = (3f - (3f - t)) / 3f; } else if (t < 7f) { - Texts[htTexts(TextDuetName1)].Color.A = 1f; + Texts[TextDuetName1].Color.A = 1f; } else { - Texts[htTexts(TextDuetName1)].Color.A = (3f - (t - 7f)) / 3f; + Texts[TextDuetName1].Color.A = (3f - (t - 7f)) / 3f; } } else { - Texts[htTexts(TextDuetName1)].Visible = false; + Texts[TextDuetName1].Visible = false; _TimerDuetText1.Stop(); } } - else if (!_TimerDuetText1.IsRunning && _TimerDuetText1.ElapsedMilliseconds == 0 && Lyrics[htLyrics(LyricMainDuet)].Alpha > 0 && CGame.GetSong().IsDuet) + else if (!_TimerDuetText1.IsRunning && _TimerDuetText1.ElapsedMilliseconds == 0 && Lyrics[LyricMainDuet].Alpha > 0 && CGame.GetSong().IsDuet) _TimerDuetText1.Start(); else { - Texts[htTexts(TextDuetName1)].Visible = false; + Texts[TextDuetName1].Visible = false; } //Timer for second duet-part if (_TimerDuetText2.IsRunning) @@ -1233,32 +1233,32 @@ namespace Vocaluxe.Screens float t = _TimerDuetText2.ElapsedMilliseconds / 1000f; if (t < 10f) { - Texts[htTexts(TextDuetName2)].Visible = true; + Texts[TextDuetName2].Visible = true; if (t < 3f) { - Texts[htTexts(TextDuetName2)].Color.A = (3f - (3f - t)) / 3f; + Texts[TextDuetName2].Color.A = (3f - (3f - t)) / 3f; } else if (t < 7f) { - Texts[htTexts(TextDuetName2)].Color.A = 1f; + Texts[TextDuetName2].Color.A = 1f; } else { - Texts[htTexts(TextDuetName2)].Color.A = (3f - (t - 7f)) / 3f; + Texts[TextDuetName2].Color.A = (3f - (t - 7f)) / 3f; } } else { - Texts[htTexts(TextDuetName2)].Visible = false; + Texts[TextDuetName2].Visible = false; _TimerDuetText2.Stop(); } } - else if (!_TimerDuetText2.IsRunning && _TimerDuetText2.ElapsedMilliseconds == 0 && Lyrics[htLyrics(LyricMain)].Alpha > 0 && CGame.GetSong().IsDuet) + else if (!_TimerDuetText2.IsRunning && _TimerDuetText2.ElapsedMilliseconds == 0 && Lyrics[LyricMain].Alpha > 0 && CGame.GetSong().IsDuet) _TimerDuetText2.Start(); else { - Texts[htTexts(TextDuetName2)].Visible = false; + Texts[TextDuetName2].Visible = false; } } } @@ -1286,19 +1286,19 @@ namespace Vocaluxe.Screens case ETimerMode.TR_CONFIG_TIMERMODE_CURRENT: int min = (int)Math.Floor(CurrentTime / 60f); int sec = (int)(CurrentTime - min * 60f); - Texts[htTexts(TextTime)].Text = min.ToString("00") + ":" + sec.ToString("00"); + Texts[TextTime].Text = min.ToString("00") + ":" + sec.ToString("00"); break; case ETimerMode.TR_CONFIG_TIMERMODE_REMAINING: min = (int)Math.Floor(RemainingTime / 60f); sec = (int)(RemainingTime - min * 60f); - Texts[htTexts(TextTime)].Text = "-" + min.ToString("00") + ":" + sec.ToString("00"); + Texts[TextTime].Text = "-" + min.ToString("00") + ":" + sec.ToString("00"); break; case ETimerMode.TR_CONFIG_TIMERMODE_TOTAL: min = (int)Math.Floor(TotalTime / 60f); sec = (int)(TotalTime - min * 60f); - Texts[htTexts(TextTime)].Text = "#" + min.ToString("00") + ":" + sec.ToString("00"); + Texts[TextTime].Text = "#" + min.ToString("00") + ":" + sec.ToString("00"); break; } @@ -1306,44 +1306,44 @@ namespace Vocaluxe.Screens switch (CConfig.TimerLook) { case ETimerLook.TR_CONFIG_TIMERLOOK_NORMAL: - _TimeLineRect.W = Statics[htStatics(StaticTimeLine)].Rect.W * (CurrentTime / TotalTime); + _TimeLineRect.W = Statics[StaticTimeLine].Rect.W * (CurrentTime / TotalTime); break; case ETimerLook.TR_CONFIG_TIMERLOOK_EXPANDED: - CStatic stat = Statics[htStatics(StaticTimeLine)]; + CStatic stat = Statics[StaticTimeLine]; int CurrentBeat = CGame.CurrentBeat; for (int i = 0; i < _TimeRects.Count; i++) { if (CurrentBeat >= _TimeRects[i].startBeat && CurrentBeat <= _TimeRects[i].endBeat) { - _TimeRects[i].rect.Texture = Statics[htStatics(StaticTimeLineExpandedHighlighted)].Texture; - _TimeRects[i].rect.Color = Statics[htStatics(StaticTimeLineExpandedHighlighted)].Color; + _TimeRects[i].rect.Texture = Statics[StaticTimeLineExpandedHighlighted].Texture; + _TimeRects[i].rect.Color = Statics[StaticTimeLineExpandedHighlighted].Color; } else { - _TimeRects[i].rect.Texture = Statics[htStatics(StaticTimeLineExpandedNormal)].Texture; - _TimeRects[i].rect.Color = Statics[htStatics(StaticTimeLineExpandedNormal)].Color; + _TimeRects[i].rect.Texture = Statics[StaticTimeLineExpandedNormal].Texture; + _TimeRects[i].rect.Color = Statics[StaticTimeLineExpandedNormal].Color; } } - Statics[htStatics(StaticTimePointer)].Rect.X = stat.Rect.X + stat.Rect.W * (CurrentTime / TotalTime); + Statics[StaticTimePointer].Rect.X = stat.Rect.X + stat.Rect.W * (CurrentTime / TotalTime); break; } } private void PrepareTimeLine() { - CStatic stat = Statics[htStatics(StaticTimeLine)]; + CStatic stat = Statics[StaticTimeLine]; switch (CConfig.TimerLook) { case ETimerLook.TR_CONFIG_TIMERLOOK_NORMAL: _TimeLineRect = new SRectF(stat.Rect.X, stat.Rect.Y, 0f, stat.Rect.H, stat.Rect.Z); - Statics[htStatics(StaticTimePointer)].Visible = false; + Statics[StaticTimePointer].Visible = false; break; case ETimerLook.TR_CONFIG_TIMERLOOK_EXPANDED: _TimeRects.Clear(); - Statics[htStatics(StaticTimePointer)].Visible = true; + Statics[StaticTimePointer].Visible = true; CSong song = CGame.GetSong(); @@ -1394,11 +1394,11 @@ namespace Vocaluxe.Screens { if (CGame.Player[i].ProfileID > -1) { - Statics[htStatics(StaticAvatars[i, CGame.NumPlayer - 1])].Texture = CProfiles.Profiles[CGame.Player[i].ProfileID].Avatar.Texture; + Statics[StaticAvatars[i, CGame.NumPlayer - 1]].Texture = CProfiles.Profiles[CGame.Player[i].ProfileID].Avatar.Texture; } else { - Statics[htStatics(StaticAvatars[i, CGame.NumPlayer - 1])].Visible = false; + Statics[StaticAvatars[i, CGame.NumPlayer - 1]].Visible = false; } } } @@ -1409,11 +1409,11 @@ namespace Vocaluxe.Screens { if (CGame.Player[i].ProfileID > -1) { - Texts[htTexts(TextNames[i, CGame.NumPlayer - 1])].Text = CProfiles.Profiles[CGame.Player[i].ProfileID].PlayerName; + Texts[TextNames[i, CGame.NumPlayer - 1]].Text = CProfiles.Profiles[CGame.Player[i].ProfileID].PlayerName; } else { - Texts[htTexts(TextNames[i, CGame.NumPlayer - 1])].Visible = false; + Texts[TextNames[i, CGame.NumPlayer - 1]].Visible = false; } } } diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 914afbc1..ee58cd9d 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -131,11 +131,11 @@ namespace Vocaluxe.Screens { base.LoadTheme(XmlPath); ToggleSongOptions(ESongOptionsView.None); - Playlists[htPlaylists(Playlist)].Visible = false; + Playlists[Playlist].Visible = false; DragAndDropCover = GetNewStatic(); - Playlists[htPlaylists(Playlist)].Init(); + Playlists[Playlist].Init(); _AvailableGameModes.Clear(); @@ -150,7 +150,7 @@ namespace Vocaluxe.Screens if (_PlaylistActive) { - Playlists[htPlaylists(Playlist)].HandleInput(KeyEvent); + Playlists[Playlist].HandleInput(KeyEvent); return true; } @@ -168,7 +168,7 @@ namespace Vocaluxe.Screens } else { - SongMenus[htSongMenus(SongMenu)].HandleInput(ref KeyEvent, _sso); + SongMenus[SongMenu].HandleInput(ref KeyEvent, _sso); UpdatePartyModeOptions(); if (KeyEvent.Handled) @@ -194,21 +194,21 @@ namespace Vocaluxe.Screens { if (i < _sso.Selection.NumJokers.Length) { - if (Buttons[htButtons(ButtonsJoker[i])].Selected) + if (Buttons[ButtonsJoker[i]].Selected) { SelectNextRandom(i); return true; } } } - if (Buttons[htButtons(ButtonStart)].Selected) + if (Buttons[ButtonStart].Selected) { - HandlePartySongSelection(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); + HandlePartySongSelection(SongMenus[SongMenu].GetSelectedSong()); } } if (CSongs.NumVisibleSongs > 0 && !_sso.Selection.PartyMode) { - if (SongMenus[htSongMenus(SongMenu)].GetSelectedSong() != -1 && !_SongOptionsActive) + if (SongMenus[SongMenu].GetSelectedSong() != -1 && !_SongOptionsActive) { if (!_sso.Selection.PartyMode) ToggleSongOptions(ESongOptionsView.Song); @@ -217,11 +217,11 @@ namespace Vocaluxe.Screens break; case Keys.Tab: - if (Playlists[htPlaylists(Playlist)].Visible) + if (Playlists[Playlist].Visible) { _PlaylistActive = !_PlaylistActive; - Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; - SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); + Playlists[Playlist].Selected = _PlaylistActive; + SongMenus[SongMenu].SetActive(!_PlaylistActive); } break; @@ -273,7 +273,7 @@ namespace Vocaluxe.Screens case Keys.S: if (KeyEvent.Mod == EModifier.Ctrl && CSongs.NumVisibleSongs > 0 && !_sso.Selection.PartyMode) - StartMedleySong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); + StartMedleySong(SongMenus[SongMenu].GetSelectedSong()); break; case Keys.D1: @@ -308,51 +308,51 @@ namespace Vocaluxe.Screens switch (KeyEvent.Key) { case Keys.Enter: - if (Buttons[htButtons(ButtonOptionsClose)].Selected) + if (Buttons[ButtonOptionsClose].Selected) { ToggleSongOptions(ESongOptionsView.None); } - else if (Buttons[htButtons(ButtonOptionsSing)].Selected) + else if (Buttons[ButtonOptionsSing].Selected) { ToggleSongOptions(ESongOptionsView.None); - StartSong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); + StartSong(SongMenus[SongMenu].GetSelectedSong()); } - else if (Buttons[htButtons(ButtonOptionsPlaylist)].Selected) + else if (Buttons[ButtonOptionsPlaylist].Selected) { ToggleSongOptions(ESongOptionsView.None); OpenAndAddPlaylistAction(); } - else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) + else if (Buttons[ButtonOptionsRandom].Selected) { if (CSongs.IsInCategory) - SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); + SongMenus[SongMenu].SetSelectedSong(CSongs.GetRandomSong()); else - SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + SongMenus[SongMenu].SetSelectedCategory(CSongs.GetRandomCategory()); } - else if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) + else if (Buttons[ButtonOptionsSingAll].Selected) { StartRandomAllSongs(); } - else if (Buttons[htButtons(ButtonOptionsSingAllVisible)].Selected) + else if (Buttons[ButtonOptionsSingAllVisible].Selected) { StartRandomVisibleSongs(); } - else if (Buttons[htButtons(ButtonOptionsOpenSelectedItem)].Selected) + else if (Buttons[ButtonOptionsOpenSelectedItem].Selected) { _HandleSelectButton(); } - else if (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Selected) + else if (SelectSlides[SelectSlideOptionsPlaylistOpen].Selected) { OpenPlaylistAction(); } - else if (Buttons[htButtons(ButtonOptionsRandomMedley)].Selected) + else if (Buttons[ButtonOptionsRandomMedley].Selected) { ToggleSongOptions(ESongOptionsView.Medley); } - else if (Buttons[htButtons(ButtonOptionsStartMedley)].Selected) + else if (Buttons[ButtonOptionsStartMedley].Selected) { ToggleSongOptions(ESongOptionsView.None); - StartRandomMedley(SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Selection + 1, !CSongs.IsInCategory); + StartRandomMedley(SelectSlides[SelectSlideOptionsNumMedleySongs].Selection + 1, !CSongs.IsInCategory); } break; @@ -396,24 +396,24 @@ namespace Vocaluxe.Screens OldMousePosX = MouseEvent.X; OldMousePosY = MouseEvent.Y; - if (Playlists[htPlaylists(Playlist)].Visible && Playlists[htPlaylists(Playlist)].IsMouseOver(MouseEvent)) + if (Playlists[Playlist].Visible && Playlists[Playlist].IsMouseOver(MouseEvent)) { _PlaylistActive = true; - Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; - SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); + Playlists[Playlist].Selected = _PlaylistActive; + SongMenus[SongMenu].SetActive(!_PlaylistActive); ToggleSongOptions(ESongOptionsView.None); } - else if (CHelper.IsInBounds(SongMenus[htSongMenus(SongMenu)].Rect, MouseEvent.X, MouseEvent.Y)) + else if (CHelper.IsInBounds(SongMenus[SongMenu].Rect, MouseEvent.X, MouseEvent.Y)) { _PlaylistActive = false; - Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; - SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); + Playlists[Playlist].Selected = _PlaylistActive; + SongMenus[SongMenu].SetActive(!_PlaylistActive); } - if (Playlists[htPlaylists(Playlist)].Visible && _PlaylistActive) + if (Playlists[Playlist].Visible && _PlaylistActive) { - if (Playlists[htPlaylists(Playlist)].HandleMouse(MouseEvent)) + if (Playlists[Playlist].HandleMouse(MouseEvent)) { return true; } @@ -452,15 +452,15 @@ namespace Vocaluxe.Screens { //TODO: Causes Bug if you select a song (e.g. with Select random song) and double click a normal button. //E.g. clicking to fast on Select random song starts the next random song. is this OK? - if (CSongs.NumVisibleSongs > 0 && SongMenus[htSongMenus(SongMenu)].GetActualSelection() != -1) + if (CSongs.NumVisibleSongs > 0 && SongMenus[SongMenu].GetActualSelection() != -1) { ToggleSongOptions(ESongOptionsView.None); - StartVisibleSong(SongMenus[htSongMenus(SongMenu)].GetActualSelection()); + StartVisibleSong(SongMenus[SongMenu].GetActualSelection()); return true; } } - SongMenus[htSongMenus(SongMenu)].HandleMouse(ref MouseEvent, _sso); + SongMenus[SongMenu].HandleMouse(ref MouseEvent, _sso); UpdatePartyModeOptions(); if (MouseEvent.Handled) @@ -470,80 +470,80 @@ namespace Vocaluxe.Screens { if (IsMouseOver(MouseEvent)) { - if (Buttons[htButtons(ButtonOpenOptions)].Selected) + if (Buttons[ButtonOpenOptions].Selected) { ToggleSongOptions(ESongOptionsView.General); return true; - } else if (Buttons[htButtons(ButtonOptionsClose)].Selected) + } else if (Buttons[ButtonOptionsClose].Selected) { ToggleSongOptions(ESongOptionsView.None); return true; - } else if (Buttons[htButtons(ButtonOptionsSing)].Selected) + } else if (Buttons[ButtonOptionsSing].Selected) { ToggleSongOptions(ESongOptionsView.None); - StartSong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); + StartSong(SongMenus[SongMenu].GetSelectedSong()); return true; } - else if (Buttons[htButtons(ButtonOptionsPlaylist)].Selected) + else if (Buttons[ButtonOptionsPlaylist].Selected) { ToggleSongOptions(ESongOptionsView.None); OpenAndAddPlaylistAction(); return true; } - else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) + else if (Buttons[ButtonOptionsRandom].Selected) { if (CSongs.IsInCategory) { - SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); + SongMenus[SongMenu].SetSelectedSong(CSongs.GetRandomSong()); return true; } } - else if (Buttons[htButtons(ButtonOptionsRandomCategory)].Selected) + else if (Buttons[ButtonOptionsRandomCategory].Selected) { if (!CSongs.IsInCategory) { - SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + SongMenus[SongMenu].SetSelectedCategory(CSongs.GetRandomCategory()); return true; } } - else if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) + else if (Buttons[ButtonOptionsSingAll].Selected) { ToggleSongOptions(ESongOptionsView.None); StartRandomAllSongs(); return true; } - else if (Buttons[htButtons(ButtonOptionsSingAllVisible)].Selected) + else if (Buttons[ButtonOptionsSingAllVisible].Selected) { ToggleSongOptions(ESongOptionsView.None); StartRandomVisibleSongs(); return true; } - else if (Buttons[htButtons(ButtonOptionsOpenSelectedItem)].Selected) + else if (Buttons[ButtonOptionsOpenSelectedItem].Selected) { _HandleSelectButton(); return true; } - else if (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].ValueSelected) + else if (SelectSlides[SelectSlideOptionsPlaylistOpen].ValueSelected) { OpenPlaylistAction(); return true; } - else if (Buttons[htButtons(ButtonOptionsRandomMedley)].Selected) + else if (Buttons[ButtonOptionsRandomMedley].Selected) { ToggleSongOptions(ESongOptionsView.Medley); return true; } - else if (Buttons[htButtons(ButtonOptionsStartMedley)].Selected) + else if (Buttons[ButtonOptionsStartMedley].Selected) { ToggleSongOptions(ESongOptionsView.None); - StartRandomMedley(SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Selection + 1, !CSongs.IsInCategory); + StartRandomMedley(SelectSlides[SelectSlideOptionsNumMedleySongs].Selection + 1, !CSongs.IsInCategory); return true; } else if (_sso.Selection.RandomOnly && _sso.Selection.NumJokers != null) { - if (Buttons[htButtons(ButtonStart)].Selected) + if (Buttons[ButtonStart].Selected) { - HandlePartySongSelection(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); + HandlePartySongSelection(SongMenus[SongMenu].GetSelectedSong()); return true; } @@ -551,7 +551,7 @@ namespace Vocaluxe.Screens { if (i < _sso.Selection.NumJokers.Length) { - if (Buttons[htButtons(ButtonsJoker[i])].Selected) + if (Buttons[ButtonsJoker[i]].Selected) { SelectNextRandom(i); return true; @@ -561,9 +561,9 @@ namespace Vocaluxe.Screens } } - if (CSongs.NumVisibleSongs > 0 && SongMenus[htSongMenus(SongMenu)].GetActualSelection() != -1 && !_sso.Selection.PartyMode) + if (CSongs.NumVisibleSongs > 0 && SongMenus[SongMenu].GetActualSelection() != -1 && !_sso.Selection.PartyMode) { - if (SongMenus[htSongMenus(SongMenu)].GetSelectedSong() != -1 && !_SongOptionsActive) + if (SongMenus[SongMenu].GetSelectedSong() != -1 && !_SongOptionsActive) { ToggleSongOptions(ESongOptionsView.Song); return true; @@ -578,11 +578,11 @@ namespace Vocaluxe.Screens if (MouseEvent.LBH) { - if (!DragAndDropActive && Playlists[htPlaylists(Playlist)].Visible && CSongs.NumVisibleSongs > 0 && SongMenus[htSongMenus(SongMenu)].GetActualSelection() != -1) + if (!DragAndDropActive && Playlists[Playlist].Visible && CSongs.NumVisibleSongs > 0 && SongMenus[SongMenu].GetActualSelection() != -1) { - DragAndDropCover = SongMenus[htSongMenus(SongMenu)].GetSelectedSongCover(); + DragAndDropCover = SongMenus[SongMenu].GetSelectedSongCover(); DragAndDropCover.Rect.Z = CSettings.zNear; - Playlists[htPlaylists(Playlist)].DragAndDropSongID = CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetActualSelection()].ID; + Playlists[Playlist].DragAndDropSongID = CSongs.VisibleSongs[SongMenus[SongMenu].GetActualSelection()].ID; DragAndDropActive = true; return true; } @@ -592,7 +592,7 @@ namespace Vocaluxe.Screens if (!MouseEvent.LBH && DragAndDropActive) { DragAndDropActive = false; - Playlists[htPlaylists(Playlist)].DragAndDropSongID = -1; + Playlists[Playlist].DragAndDropSongID = -1; return true; } @@ -608,7 +608,7 @@ namespace Vocaluxe.Screens else if(_sso.Selection.CategoryChangeAllowed) { ToggleSongOptions(ESongOptionsView.None); - SongMenus[htSongMenus(SongMenu)].EnterCurrentCategory(); + SongMenus[SongMenu].EnterCurrentCategory(); } } @@ -625,7 +625,7 @@ namespace Vocaluxe.Screens _SearchText = _sso.Sorting.SearchString; CGame.EnterNormalGame(); - SongMenus[htSongMenus(SongMenu)].OnShow(); + SongMenus[SongMenu].OnShow(); if (_sso.Selection.PartyMode) _PlaylistActive = false; @@ -633,56 +633,56 @@ namespace Vocaluxe.Screens if (_sso.Selection.PartyMode) ToggleSongOptions(ESongOptionsView.None); - SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); - SongMenus[htSongMenus(SongMenu)].SetSmallView(Playlists[htPlaylists(Playlist)].Visible); + SongMenus[SongMenu].SetActive(!_PlaylistActive); + SongMenus[SongMenu].SetSmallView(Playlists[Playlist].Visible); - if (Playlists[htPlaylists(Playlist)].ActivePlaylistID != -1) - Playlists[htPlaylists(Playlist)].LoadPlaylist(Playlists[htPlaylists(Playlist)].ActivePlaylistID); + if (Playlists[Playlist].ActivePlaylistID != -1) + Playlists[Playlist].LoadPlaylist(Playlists[Playlist].ActivePlaylistID); DragAndDropActive = false; - Playlists[htPlaylists(Playlist)].DragAndDropSongID = -1; + Playlists[Playlist].DragAndDropSongID = -1; UpdateGame(); } public override bool UpdateGame() { - if (SongMenus[htSongMenus(SongMenu)].IsSmallView()) + if (SongMenus[SongMenu].IsSmallView()) CheckPlaylist(); - Texts[htTexts(TextCategory)].Text = CSongs.GetCurrentCategoryName(); + Texts[TextCategory].Text = CSongs.GetCurrentCategoryName(); if (CSongs.Category > -1 || CConfig.Tabs == EOffOn.TR_CONFIG_OFF) CBackgroundMusic.Disabled = true; else CBackgroundMusic.Disabled = false; - int song = SongMenus[htSongMenus(SongMenu)].GetActualSelection(); + int song = SongMenus[SongMenu].GetActualSelection(); if ((CSongs.Category >= 0 || CConfig.Tabs == EOffOn.TR_CONFIG_OFF) && song >= 0 && song < CSongs.VisibleSongs.Length) { - Texts[htTexts(TextSelection)].Text = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title; + Texts[TextSelection].Text = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title; } else if (!CSongs.IsInCategory && song >= 0 && song < CSongs.Categories.Length) { - Texts[htTexts(TextSelection)].Text = CSongs.Categories[song].Name; + Texts[TextSelection].Text = CSongs.Categories[song].Name; } else - Texts[htTexts(TextSelection)].Text = String.Empty; + Texts[TextSelection].Text = String.Empty; - Texts[htTexts(TextSearchBar)].Text = _SearchText; + Texts[TextSearchBar].Text = _SearchText; if (_SearchActive) { - Texts[htTexts(TextSearchBar)].Text += '|'; + Texts[TextSearchBar].Text += '|'; - Texts[htTexts(TextSearchBar)].Visible = true; - Texts[htTexts(TextSearchBarTitle)].Visible = true; - Statics[htStatics(StaticSearchBar)].Visible = true; + Texts[TextSearchBar].Visible = true; + Texts[TextSearchBarTitle].Visible = true; + Statics[StaticSearchBar].Visible = true; } else { - Texts[htTexts(TextSearchBar)].Visible = false; - Texts[htTexts(TextSearchBarTitle)].Visible = false; - Statics[htStatics(StaticSearchBar)].Visible = false; + Texts[TextSearchBar].Visible = false; + Texts[TextSearchBarTitle].Visible = false; + Statics[StaticSearchBar].Visible = false; } UpdatePartyModeOptions(); @@ -704,12 +704,12 @@ namespace Vocaluxe.Screens { base.OnClose(); CBackgroundMusic.Disabled = false; - SongMenus[htSongMenus(SongMenu)].OnHide(); + SongMenus[SongMenu].OnHide(); } public override void ApplyVolume() { - SongMenus[htSongMenus(SongMenu)].ApplyVolume(CConfig.PreviewMusicVolume); + SongMenus[SongMenu].ApplyVolume(CConfig.PreviewMusicVolume); } private void HandlePartySongSelection(int SongNr) @@ -738,12 +738,12 @@ namespace Vocaluxe.Screens SelectNextRandomSong(); if (_sso.Selection.SongIndex != -1) - SongMenus[htSongMenus(SongMenu)].SetSelectedSong(_sso.Selection.SongIndex); + SongMenus[SongMenu].SetSelectedSong(_sso.Selection.SongIndex); } - if (SelectedSongID != SongMenus[htSongMenus(SongMenu)].GetSelectedSong() && CSongs.Category > -1) + if (SelectedSongID != SongMenus[SongMenu].GetSelectedSong() && CSongs.Category > -1) { - SelectedSongID = SongMenus[htSongMenus(SongMenu)].GetSelectedSong(); + SelectedSongID = SongMenus[SongMenu].GetSelectedSong(); CParty.OnSongChange(SelectedSongID, ref _sso); } @@ -760,55 +760,55 @@ namespace Vocaluxe.Screens ToggleSongOptions(ESongOptionsView.None); } - SongMenus[htSongMenus(SongMenu)].Update(_sso); + SongMenus[SongMenu].Update(_sso); if (_sso.Selection.RandomOnly && _sso.Selection.NumJokers != null) { - Buttons[htButtons(ButtonStart)].Visible = true; + Buttons[ButtonStart].Visible = true; - if (!SongMenus[htSongMenus(SongMenu)].IsSmallView()) - SongMenus[htSongMenus(SongMenu)].SetSmallView(true); + if (!SongMenus[SongMenu].IsSmallView()) + SongMenus[SongMenu].SetSmallView(true); for (int i = 0; i < CMain.Settings.GetMaxNumPlayer(); i++) { if (i < _sso.Selection.NumJokers.Length) { - Buttons[htButtons(ButtonsJoker[i])].Visible = true; - Buttons[htButtons(ButtonsJoker[i])].Text.Text = _sso.Selection.NumJokers[i].ToString(); - Texts[htTexts(TextsPlayer[i])].Visible = true; + Buttons[ButtonsJoker[i]].Visible = true; + Buttons[ButtonsJoker[i]].Text.Text = _sso.Selection.NumJokers[i].ToString(); + Texts[TextsPlayer[i]].Visible = true; bool NameExists = false; if (_sso.Selection.TeamNames != null) { if (_sso.Selection.TeamNames.Length > i) { - Texts[htTexts(TextsPlayer[i])].Text = _sso.Selection.TeamNames[i]; + Texts[TextsPlayer[i]].Text = _sso.Selection.TeamNames[i]; NameExists = true; } } if (!NameExists) - Texts[htTexts(TextsPlayer[i])].Text = i.ToString(); + Texts[TextsPlayer[i]].Text = i.ToString(); } else { - Buttons[htButtons(ButtonsJoker[i])].Visible = false; - Texts[htTexts(TextsPlayer[i])].Visible = false; + Buttons[ButtonsJoker[i]].Visible = false; + Texts[TextsPlayer[i]].Visible = false; } } } else { - if (_sso.Selection.PartyMode && SongMenus[htSongMenus(SongMenu)].IsSmallView()) - SongMenus[htSongMenus(SongMenu)].SetSmallView(false); + if (_sso.Selection.PartyMode && SongMenus[SongMenu].IsSmallView()) + SongMenus[SongMenu].SetSmallView(false); for (int i = 0; i < CMain.Settings.GetMaxNumPlayer(); i++) { - Buttons[htButtons(ButtonsJoker[i])].Visible = false; - Texts[htTexts(TextsPlayer[i])].Visible = false; + Buttons[ButtonsJoker[i]].Visible = false; + Texts[TextsPlayer[i]].Visible = false; } - Buttons[htButtons(ButtonStart)].Visible = false; + Buttons[ButtonStart].Visible = false; } } @@ -817,9 +817,9 @@ namespace Vocaluxe.Screens if ((CSongs.Category >= 0) && (SongNr >= 0)) { EGameMode gm; - if (_AvailableGameModes.Count >= SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection) + if (_AvailableGameModes.Count >= SelectSlides[SelectSlideOptionsMode].Selection) { - gm = _AvailableGameModes[SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection]; + gm = _AvailableGameModes[SelectSlides[SelectSlideOptionsMode].Selection]; } else { @@ -1001,7 +1001,7 @@ namespace Vocaluxe.Screens if (CSongs.IsInCategory) { ToggleSongOptions(ESongOptionsView.None); - SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); + SongMenus[SongMenu].SetSelectedSong(CSongs.GetRandomSong()); return true; } return false; @@ -1012,7 +1012,7 @@ namespace Vocaluxe.Screens if (!CSongs.IsInCategory) { ToggleSongOptions(ESongOptionsView.None); - SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + SongMenus[SongMenu].SetSelectedCategory(CSongs.GetRandomCategory()); return true; } return false; @@ -1021,7 +1021,7 @@ namespace Vocaluxe.Screens private void JumpTo(char Letter) { int start = 0; - int curSelected = SongMenus[htSongMenus(SongMenu)].GetActualSelection(); + int curSelected = SongMenus[SongMenu].GetActualSelection(); if (CSongs.IsInCategory) { //TODO: Check and use sorting method @@ -1037,7 +1037,7 @@ namespace Vocaluxe.Screens if (visibleID < 0 && start > 1) visibleID = Array.FindIndex(Songs, 0, start - 1, element => element.Artist.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); if (visibleID > -1) - SongMenus[htSongMenus(SongMenu)].SetSelectedSong(visibleID); + SongMenus[SongMenu].SetSelectedSong(visibleID); } else { @@ -1049,7 +1049,7 @@ namespace Vocaluxe.Screens if (visibleID < 0 && start > 1) visibleID = Array.FindIndex(Categories, 0, start - 1, element => element.Name.StartsWith(Letter.ToString(), StringComparison.OrdinalIgnoreCase)); if (visibleID > -1) - SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(visibleID); + SongMenus[SongMenu].SetSelectedCategory(visibleID); } } @@ -1062,7 +1062,7 @@ namespace Vocaluxe.Screens bool refresh = false; _SearchText = NewFilterString; - int SongIndex = SongMenus[htSongMenus(SongMenu)].GetSelectedSong(); + int SongIndex = SongMenus[SongMenu].GetSelectedSong(); int SongID = -1; if (SongIndex != -1 && CSongs.NumVisibleSongs > 0 && CSongs.NumVisibleSongs > SongIndex) { @@ -1087,30 +1087,30 @@ namespace Vocaluxe.Screens refresh = true; if (refresh) - SongMenus[htSongMenus(SongMenu)].OnHide(); + SongMenus[SongMenu].OnHide(); - SongMenus[htSongMenus(SongMenu)].OnShow(); + SongMenus[SongMenu].OnShow(); } private void ToggleSongOptions(ESongOptionsView view) { - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Visible = false; - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Visible = false; - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = false; - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Visible = false; - Buttons[htButtons(ButtonOptionsClose)].Visible = false; - Buttons[htButtons(ButtonOptionsSing)].Visible = false; - Buttons[htButtons(ButtonOptionsPlaylist)].Visible = false; - Buttons[htButtons(ButtonOptionsRandom)].Visible = false; - Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = false; - Buttons[htButtons(ButtonOptionsSingAll)].Visible = false; - Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = false; - Buttons[htButtons(ButtonOptionsOpenSelectedItem)].Visible = false; - Buttons[htButtons(ButtonOptionsRandomMedley)].Visible = false; - Buttons[htButtons(ButtonOptionsStartMedley)].Visible = false; - Texts[htTexts(TextOptionsTitle)].Visible = false; - Statics[htStatics(StaticOptionsBG)].Visible = false; - Buttons[htButtons(ButtonOpenOptions)].Visible = true; + SelectSlides[SelectSlideOptionsMode].Visible = false; + SelectSlides[SelectSlideOptionsPlaylistAdd].Visible = false; + SelectSlides[SelectSlideOptionsPlaylistOpen].Visible = false; + SelectSlides[SelectSlideOptionsNumMedleySongs].Visible = false; + Buttons[ButtonOptionsClose].Visible = false; + Buttons[ButtonOptionsSing].Visible = false; + Buttons[ButtonOptionsPlaylist].Visible = false; + Buttons[ButtonOptionsRandom].Visible = false; + Buttons[ButtonOptionsRandomCategory].Visible = false; + Buttons[ButtonOptionsSingAll].Visible = false; + Buttons[ButtonOptionsSingAllVisible].Visible = false; + Buttons[ButtonOptionsOpenSelectedItem].Visible = false; + Buttons[ButtonOptionsRandomMedley].Visible = false; + Buttons[ButtonOptionsStartMedley].Visible = false; + Texts[TextOptionsTitle].Visible = false; + Statics[StaticOptionsBG].Visible = false; + Buttons[ButtonOpenOptions].Visible = true; _SongOptionsActive = view != ESongOptionsView.None; @@ -1119,10 +1119,10 @@ namespace Vocaluxe.Screens //Has to be done here otherwhise changed playlist names will not appear until OnShow is called! UpdatePlaylistNames(); - Texts[htTexts(TextOptionsTitle)].Visible = true; - Buttons[htButtons(ButtonOptionsClose)].Visible = true; - Statics[htStatics(StaticOptionsBG)].Visible = true; - Buttons[htButtons(ButtonOpenOptions)].Visible = false; + Texts[TextOptionsTitle].Visible = true; + Buttons[ButtonOptionsClose].Visible = true; + Statics[StaticOptionsBG].Visible = true; + Buttons[ButtonOpenOptions].Visible = false; if (view == ESongOptionsView.Song) _ShowSongOptionsSong(); else if (view == ESongOptionsView.General) @@ -1136,92 +1136,92 @@ namespace Vocaluxe.Screens { EGameMode LastMode = EGameMode.TR_GAMEMODE_NORMAL; if (_AvailableGameModes.Count > 0) - LastMode = _AvailableGameModes[SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection]; - SetInteractionToButton(Buttons[htButtons(ButtonOptionsSing)]); + LastMode = _AvailableGameModes[SelectSlides[SelectSlideOptionsMode].Selection]; + SetInteractionToButton(Buttons[ButtonOptionsSing]); _AvailableGameModes.Clear(); - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Clear(); - if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) + SelectSlides[SelectSlideOptionsMode].Clear(); + if (CSongs.VisibleSongs[SongMenus[SongMenu].GetSelectedSong()].IsDuet) { - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_DUET)); + SelectSlides[SelectSlideOptionsMode].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_DUET)); _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_DUET); } else { - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_NORMAL)); + SelectSlides[SelectSlideOptionsMode].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_NORMAL)); _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_NORMAL); - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_SHORTSONG)); + SelectSlides[SelectSlideOptionsMode].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_SHORTSONG)); _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_SHORTSONG); } - if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].Medley.Source != EMedleySource.None) + if (CSongs.VisibleSongs[SongMenus[SongMenu].GetSelectedSong()].Medley.Source != EMedleySource.None) { - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_MEDLEY)); + SelectSlides[SelectSlideOptionsMode].AddValue(Enum.GetName(typeof(EGameMode), EGameMode.TR_GAMEMODE_MEDLEY)); _AvailableGameModes.Add(EGameMode.TR_GAMEMODE_MEDLEY); } //Set SelectSlide-Selection to last selected game-mode if possible for (int i = 0; i < _AvailableGameModes.Count; i++) { if (_AvailableGameModes[i] == LastMode) - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].SetSelectionByValueIndex(i); + SelectSlides[SelectSlideOptionsMode].SetSelectionByValueIndex(i); } - SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Visible = true; - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Visible = true; - Buttons[htButtons(ButtonOptionsSing)].Visible = true; - Buttons[htButtons(ButtonOptionsPlaylist)].Visible = true; - SetInteractionToButton(Buttons[htButtons(ButtonOptionsSing)]); + SelectSlides[SelectSlideOptionsMode].Visible = true; + SelectSlides[SelectSlideOptionsPlaylistAdd].Visible = true; + Buttons[ButtonOptionsSing].Visible = true; + Buttons[ButtonOptionsPlaylist].Visible = true; + SetInteractionToButton(Buttons[ButtonOptionsSing]); } private void _ShowSongOptionsGeneral() { if (CSongs.IsInCategory) { - Buttons[htButtons(ButtonOptionsRandom)].Visible = true; - Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = true; + Buttons[ButtonOptionsRandom].Visible = true; + Buttons[ButtonOptionsSingAllVisible].Visible = true; } else - Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = true; - Buttons[htButtons(ButtonOptionsSingAll)].Visible = true; - Buttons[htButtons(ButtonOptionsRandomMedley)].Visible = true; - Buttons[htButtons(ButtonOptionsOpenSelectedItem)].Visible = true; + Buttons[ButtonOptionsRandomCategory].Visible = true; + Buttons[ButtonOptionsSingAll].Visible = true; + Buttons[ButtonOptionsRandomMedley].Visible = true; + Buttons[ButtonOptionsOpenSelectedItem].Visible = true; - if (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].NumValues > 0) - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = true; + if (SelectSlides[SelectSlideOptionsPlaylistOpen].NumValues > 0) + SelectSlides[SelectSlideOptionsPlaylistOpen].Visible = true; - if (Buttons[htButtons(ButtonOptionsRandom)].Visible) - SetInteractionToButton(Buttons[htButtons(ButtonOptionsRandom)]); + if (Buttons[ButtonOptionsRandom].Visible) + SetInteractionToButton(Buttons[ButtonOptionsRandom]); else - SetInteractionToButton(Buttons[htButtons(ButtonOptionsRandomCategory)]); + SetInteractionToButton(Buttons[ButtonOptionsRandomCategory]); } private void _ShowSongOptionsMedley() { - Buttons[htButtons(ButtonOptionsStartMedley)].Visible = true; - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Visible = true; - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].Clear(); + Buttons[ButtonOptionsStartMedley].Visible = true; + SelectSlides[SelectSlideOptionsNumMedleySongs].Visible = true; + SelectSlides[SelectSlideOptionsNumMedleySongs].Clear(); if (CSongs.IsInCategory) { for (int i = 1; i <= CSongs.VisibleSongs.Length; i++) { - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].AddValue(i.ToString()); + SelectSlides[SelectSlideOptionsNumMedleySongs].AddValue(i.ToString()); } } else { for (int i = 1; i <= CSongs.AllSongs.Length; i++) { - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].AddValue(i.ToString()); + SelectSlides[SelectSlideOptionsNumMedleySongs].AddValue(i.ToString()); } } - if (SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].NumValues >= 5) - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].SetSelectionByValueIndex(4); + if (SelectSlides[SelectSlideOptionsNumMedleySongs].NumValues >= 5) + SelectSlides[SelectSlideOptionsNumMedleySongs].SetSelectionByValueIndex(4); else - SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].SetSelectionByValueIndex(SelectSlides[htSelectSlides(SelectSlideOptionsNumMedleySongs)].NumValues - 1); - SetInteractionToButton(Buttons[htButtons(ButtonOptionsStartMedley)]); + SelectSlides[SelectSlideOptionsNumMedleySongs].SetSelectionByValueIndex(SelectSlides[SelectSlideOptionsNumMedleySongs].NumValues - 1); + SetInteractionToButton(Buttons[ButtonOptionsStartMedley]); } #region Playlist Actions public void CheckPlaylist() { - if (Playlists[htPlaylists(Playlist)].ActivePlaylistID == -1 && _PlaylistActive) + if (Playlists[Playlist].ActivePlaylistID == -1 && _PlaylistActive) ClosePlaylist(); } @@ -1229,101 +1229,101 @@ namespace Vocaluxe.Screens { if (CPlaylists.Playlists.Length > PlaylistID && PlaylistID > -1) { - Playlists[htPlaylists(Playlist)].LoadPlaylist(PlaylistID); - SongMenus[htSongMenus(SongMenu)].SetSmallView(true); - Playlists[htPlaylists(Playlist)].Visible = true; + Playlists[Playlist].LoadPlaylist(PlaylistID); + SongMenus[SongMenu].SetSmallView(true); + Playlists[Playlist].Visible = true; } } private void ClosePlaylist() { - if (Playlists[htPlaylists(Playlist)].Visible || _PlaylistActive) + if (Playlists[Playlist].Visible || _PlaylistActive) { - SongMenus[htSongMenus(SongMenu)].SetSmallView(false); + SongMenus[SongMenu].SetSmallView(false); _PlaylistActive = false; - Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; - SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); - Playlists[htPlaylists(Playlist)].ClosePlaylist(); + Playlists[Playlist].Selected = _PlaylistActive; + SongMenus[SongMenu].SetActive(!_PlaylistActive); + Playlists[Playlist].ClosePlaylist(); } } private void UpdatePlaylistNames() { - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Clear(); - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].AddValue("TR_SCREENSONG_NEWPLAYLIST"); - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].AddValues(CPlaylists.PlaylistNames); - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Clear(); - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].AddValues(CPlaylists.PlaylistNames); + SelectSlides[SelectSlideOptionsPlaylistAdd].Clear(); + SelectSlides[SelectSlideOptionsPlaylistAdd].AddValue("TR_SCREENSONG_NEWPLAYLIST"); + SelectSlides[SelectSlideOptionsPlaylistAdd].AddValues(CPlaylists.PlaylistNames); + SelectSlides[SelectSlideOptionsPlaylistOpen].Clear(); + SelectSlides[SelectSlideOptionsPlaylistOpen].AddValues(CPlaylists.PlaylistNames); } private void OpenPlaylistAction() { //Open a playlist - if (Playlists[htPlaylists(Playlist)].ActivePlaylistID != (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Selection)) + if (Playlists[Playlist].ActivePlaylistID != (SelectSlides[SelectSlideOptionsPlaylistOpen].Selection)) { - Playlists[htPlaylists(Playlist)].ActivePlaylistID = SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Selection; + Playlists[Playlist].ActivePlaylistID = SelectSlides[SelectSlideOptionsPlaylistOpen].Selection; SetSelectSlidePlaylistToCurrentPlaylist(); //Open playlist - OpenPlaylist(Playlists[htPlaylists(Playlist)].ActivePlaylistID); + OpenPlaylist(Playlists[Playlist].ActivePlaylistID); } } private void OpenAndAddPlaylistAction() { //Open an existing playlist and add song - if (Playlists[htPlaylists(Playlist)].ActivePlaylistID != (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Selection - 1) && (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Selection - 1) != -1) + if (Playlists[Playlist].ActivePlaylistID != (SelectSlides[SelectSlideOptionsPlaylistAdd].Selection - 1) && (SelectSlides[SelectSlideOptionsPlaylistAdd].Selection - 1) != -1) { //Check selected game-mode EGameMode gm; - if (_AvailableGameModes.Count >= SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection) - gm = _AvailableGameModes[SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection]; + if (_AvailableGameModes.Count >= SelectSlides[SelectSlideOptionsMode].Selection) + gm = _AvailableGameModes[SelectSlides[SelectSlideOptionsMode].Selection]; else - if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) + if (CSongs.VisibleSongs[SongMenus[SongMenu].GetSelectedSong()].IsDuet) gm = EGameMode.TR_GAMEMODE_DUET; else gm = EGameMode.TR_GAMEMODE_NORMAL; //Check if Playlist really exists - if (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Selection - 1 >= 0) + if (SelectSlides[SelectSlideOptionsPlaylistAdd].Selection - 1 >= 0) { - Playlists[htPlaylists(Playlist)].ActivePlaylistID = SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Selection - 1; + Playlists[Playlist].ActivePlaylistID = SelectSlides[SelectSlideOptionsPlaylistAdd].Selection - 1; //Add song to playlist - CPlaylists.Playlists[Playlists[htPlaylists(Playlist)].ActivePlaylistID].AddSong(CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].ID, gm); + CPlaylists.Playlists[Playlists[Playlist].ActivePlaylistID].AddSong(CSongs.VisibleSongs[SongMenus[SongMenu].GetSelectedSong()].ID, gm); //Open playlist - OpenPlaylist(Playlists[htPlaylists(Playlist)].ActivePlaylistID); + OpenPlaylist(Playlists[Playlist].ActivePlaylistID); SetSelectSlidePlaylistToCurrentPlaylist(); - Playlists[htPlaylists(Playlist)].ScrollToBottom(); + Playlists[Playlist].ScrollToBottom(); } } //Create a new playlist and add song - else if ((SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Selection - 1) == -1) + else if ((SelectSlides[SelectSlideOptionsPlaylistAdd].Selection - 1) == -1) { //Check selected game-mode EGameMode gm; - if (_AvailableGameModes.Count >= SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection) - gm = _AvailableGameModes[SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection]; + if (_AvailableGameModes.Count >= SelectSlides[SelectSlideOptionsMode].Selection) + gm = _AvailableGameModes[SelectSlides[SelectSlideOptionsMode].Selection]; else - if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) + if (CSongs.VisibleSongs[SongMenus[SongMenu].GetSelectedSong()].IsDuet) gm = EGameMode.TR_GAMEMODE_DUET; else gm = EGameMode.TR_GAMEMODE_NORMAL; //Create new playlist - Playlists[htPlaylists(Playlist)].ActivePlaylistID = CPlaylists.NewPlaylist(); + Playlists[Playlist].ActivePlaylistID = CPlaylists.NewPlaylist(); //Add song to playlist - CPlaylists.Playlists[Playlists[htPlaylists(Playlist)].ActivePlaylistID].AddSong(CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].ID, gm); + CPlaylists.Playlists[Playlists[Playlist].ActivePlaylistID].AddSong(CSongs.VisibleSongs[SongMenus[SongMenu].GetSelectedSong()].ID, gm); //Open playlist - OpenPlaylist(Playlists[htPlaylists(Playlist)].ActivePlaylistID); + OpenPlaylist(Playlists[Playlist].ActivePlaylistID); //Add new playlist to select-slide - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].AddValue(CPlaylists.Playlists[Playlists[htPlaylists(Playlist)].ActivePlaylistID].PlaylistName); - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].AddValue(CPlaylists.Playlists[Playlists[htPlaylists(Playlist)].ActivePlaylistID].PlaylistName); + SelectSlides[SelectSlideOptionsPlaylistAdd].AddValue(CPlaylists.Playlists[Playlists[Playlist].ActivePlaylistID].PlaylistName); + SelectSlides[SelectSlideOptionsPlaylistOpen].AddValue(CPlaylists.Playlists[Playlists[Playlist].ActivePlaylistID].PlaylistName); SetSelectSlidePlaylistToCurrentPlaylist(); @@ -1333,25 +1333,25 @@ namespace Vocaluxe.Screens { //Check selected game-mode EGameMode gm; - if (_AvailableGameModes.Count >= SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection) - gm = _AvailableGameModes[SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Selection]; + if (_AvailableGameModes.Count >= SelectSlides[SelectSlideOptionsMode].Selection) + gm = _AvailableGameModes[SelectSlides[SelectSlideOptionsMode].Selection]; else - if (CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].IsDuet) + if (CSongs.VisibleSongs[SongMenus[SongMenu].GetSelectedSong()].IsDuet) gm = EGameMode.TR_GAMEMODE_DUET; else gm = EGameMode.TR_GAMEMODE_NORMAL; - CPlaylists.Playlists[Playlists[htPlaylists(Playlist)].ActivePlaylistID].AddSong(CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].ID, gm); - Playlists[htPlaylists(Playlist)].UpdatePlaylist(); - Playlists[htPlaylists(Playlist)].ScrollToBottom(); + CPlaylists.Playlists[Playlists[Playlist].ActivePlaylistID].AddSong(CSongs.VisibleSongs[SongMenus[SongMenu].GetSelectedSong()].ID, gm); + Playlists[Playlist].UpdatePlaylist(); + Playlists[Playlist].ScrollToBottom(); } } private void SetSelectSlidePlaylistToCurrentPlaylist() { - if (Playlists[htPlaylists(Playlist)].ActivePlaylistID > -1) - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Selection = Playlists[htPlaylists(Playlist)].ActivePlaylistID + 1; + if (Playlists[Playlist].ActivePlaylistID > -1) + SelectSlides[SelectSlideOptionsPlaylistAdd].Selection = Playlists[Playlist].ActivePlaylistID + 1; else - SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistAdd)].Selection = 0; + SelectSlides[SelectSlideOptionsPlaylistAdd].Selection = 0; } #endregion Playlist Actions } diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index cb2bed9e..2f32f7c7 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -19,39 +19,98 @@ namespace Vocaluxe.Menu } public abstract class CMenu : IMenu - { + { + public class COrderedDictionaryLite : IEnumerable + { + private List _Items; + private Dictionary _htIndex; + private CMenu _Parent; + + public COrderedDictionaryLite(CMenu Parent) + { + _Items = new List(); + _htIndex = new Dictionary(); + _Parent = Parent; + } + + public COrderedDictionaryLite(COrderedDictionaryLite Dict) + { + _Items = new List(Dict._Items); + _htIndex = new Dictionary(Dict._htIndex); + _Parent = Dict._Parent; + } + + public T this[int index] + { + get { return _Items[index]; } + set { _Items[index] = value; } + } + + public T this[string key] + { + get + { + try + { + return _Items[_htIndex[key]]; + } + catch (Exception) + { + CBase.Log.LogError("Can't find " + typeof(T).Name.Substring(1) + " Element \"" + key + "\" in Screen " + _Parent._ThemeName); + throw; + } + } + set + { + if (!_htIndex.ContainsKey(key)) + { + _htIndex.Add(key, _Items.Count); + _Items.Add(value); + } + else + _Items[_htIndex[key]] = value; + } + } + + public int Add(T item, String key = null) + { + if (key != null) + _htIndex.Add(key, _Items.Count); + _Items.Add(item); + return _Items.Count - 1; + } + + public IEnumerator GetEnumerator() + { + return _Items.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return (IEnumerator)GetEnumerator(); + } + } + + + private List _Interactions; private int _Selection = 0; private string _ThemePath = String.Empty; protected int _PartyModeID = -1; - - private List _Backgrounds; - private List _Buttons; - private List _Texts; - private List _Statics; - private List _SelectSlides; - private List _SongMenus; - private List _Lyrics; - private List _SingNotes; - private List _NameSelections; - private List _Equalizers; - private List _Playlists; - private List _ParticleEffects; - private List _ScreenSettings; - private Hashtable _htBackgrounds; - private Hashtable _htStatics; - private Hashtable _htTexts; - private Hashtable _htButtons; - private Hashtable _htSongMenus; - private Hashtable _htLyrics; - private Hashtable _htSelectSlides; - private Hashtable _htSingNotes; - private Hashtable _htNameSelections; - private Hashtable _htEqualizers; - private Hashtable _htPlaylists; - private Hashtable _htParticleEffects; - private Hashtable _htScreenSettings; + private COrderedDictionaryLite _Backgrounds; + private COrderedDictionaryLite _Buttons; + private COrderedDictionaryLite _Texts; + private COrderedDictionaryLite _Statics; + private COrderedDictionaryLite _SelectSlides; + private COrderedDictionaryLite _SongMenus; + private COrderedDictionaryLite _Lyrics; + private COrderedDictionaryLite _SingNotes; + private COrderedDictionaryLite _NameSelections; + private COrderedDictionaryLite _Equalizers; + private COrderedDictionaryLite _Playlists; + private COrderedDictionaryLite _ParticleEffects; + private COrderedDictionaryLite _ScreenSettings; private int _PrevMouseX; @@ -109,33 +168,19 @@ namespace Vocaluxe.Menu _Interactions = new List(); _Selection = 0; - _Backgrounds = new List(); - _Buttons = new List(); - _Texts = new List(); - _Statics = new List(); - _SelectSlides = new List(); - _SongMenus = new List(); - _Lyrics = new List(); - _SingNotes = new List(); - _NameSelections = new List(); - _Equalizers = new List(); - _Playlists = new List(); - _ParticleEffects = new List(); - _ScreenSettings = new List(); - - _htBackgrounds = new Hashtable(); - _htStatics = new Hashtable(); - _htTexts = new Hashtable(); - _htButtons = new Hashtable(); - _htSongMenus = new Hashtable(); - _htLyrics = new Hashtable(); - _htSelectSlides = new Hashtable(); - _htSingNotes = new Hashtable(); - _htNameSelections = new Hashtable(); - _htEqualizers = new Hashtable(); - _htPlaylists = new Hashtable(); - _htParticleEffects = new Hashtable(); - _htScreenSettings = new Hashtable(); + _Backgrounds = new COrderedDictionaryLite(this); + _Buttons = new COrderedDictionaryLite(this); + _Texts = new COrderedDictionaryLite(this); + _Statics = new COrderedDictionaryLite(this); + _SelectSlides = new COrderedDictionaryLite(this); + _SongMenus = new COrderedDictionaryLite(this); + _Lyrics = new COrderedDictionaryLite(this); + _SingNotes = new COrderedDictionaryLite(this); + _NameSelections = new COrderedDictionaryLite(this); + _Equalizers = new COrderedDictionaryLite(this); + _Playlists = new COrderedDictionaryLite(this); + _ParticleEffects = new COrderedDictionaryLite(this); + _ScreenSettings = new COrderedDictionaryLite(this); _PrevMouseX = 0; _PrevMouseY = 0; @@ -145,7 +190,7 @@ namespace Vocaluxe.Menu _Active = false; _ScreenArea = new SRectF(0f, 0f, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH(), 0f); - + _ThemeName = String.Empty; _ThemeBackgrounds = null; _ThemeStatics = null; @@ -168,6 +213,28 @@ namespace Vocaluxe.Menu } #region ThemeHandler + + protected delegate void DAddElement(T Element, String key); + + private void LoadThemeElement(string[] Elements, DAddElement MAddElement, CXMLReader xmlReader, int SkinIndex) where T : IMenuElement + { + if (Elements != null) + { + for (int i = 0; i < Elements.Length; i++) + { + T Element = (T)Activator.CreateInstance(typeof(T), _PartyModeID); + if (Element.LoadTheme("//root/" + _ThemeName, _ThemeBackgrounds[i], xmlReader, SkinIndex)) + { + MAddElement(Element, Elements[i]); + } + else + { + CBase.Log.LogError("Can't load " + typeof(T).Name.Substring(1) + " \"" + Elements[i] + "\" in screen " + _ThemeName); + } + } + } + } + public virtual void LoadTheme(string XmlPath) { string file = Path.Combine(XmlPath, _ThemeName + ".xml"); @@ -186,213 +253,19 @@ namespace Vocaluxe.Menu _ThemePath = XmlPath; LoadThemeBasics(xmlReader, SkinIndex); - if (_ThemeBackgrounds != null) - { - for (int i = 0; i < _ThemeBackgrounds.Length; i++) - { - CBackground background = new CBackground(_PartyModeID); - if (background.LoadTheme("//root/" + _ThemeName, _ThemeBackgrounds[i], xmlReader, SkinIndex)) - { - _htBackgrounds.Add(_ThemeBackgrounds[i], AddBackground(background)); - } - else - { - CBase.Log.LogError("Can't load Background \"" + _ThemeBackgrounds[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeStatics != null) - { - for (int i = 0; i < _ThemeStatics.Length; i++) - { - CStatic stat = new CStatic(_PartyModeID); - if (stat.LoadTheme("//root/" + _ThemeName, _ThemeStatics[i], xmlReader, SkinIndex)) - { - _htStatics.Add(_ThemeStatics[i], AddStatic(stat)); - } - else - { - CBase.Log.LogError("Can't load Static \"" + _ThemeStatics[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeTexts != null) - { - for (int i = 0; i < _ThemeTexts.Length; i++) - { - CText text = new CText(_PartyModeID); - if (text.LoadTheme("//root/" + _ThemeName, _ThemeTexts[i], xmlReader, SkinIndex)) - { - _htTexts.Add(_ThemeTexts[i], AddText(text)); - } - else - { - CBase.Log.LogError("Can't load Text \"" + _ThemeTexts[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeButtons != null) - { - for (int i = 0; i < _ThemeButtons.Length; i++) - { - CButton button = new CButton(_PartyModeID); - if (button.LoadTheme("//root/" + _ThemeName, _ThemeButtons[i], xmlReader, SkinIndex)) - { - _htButtons.Add(_ThemeButtons[i], AddButton(button)); - } - else - { - CBase.Log.LogError("Can't load Button \"" + _ThemeButtons[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeSelectSlides != null) - { - for (int i = 0; i < _ThemeSelectSlides.Length; i++) - { - CSelectSlide slide = new CSelectSlide(_PartyModeID); - if (slide.LoadTheme("//root/" + _ThemeName, _ThemeSelectSlides[i], xmlReader, SkinIndex)) - { - _htSelectSlides.Add(_ThemeSelectSlides[i], AddSelectSlide(slide)); - } - else - { - CBase.Log.LogError("Can't load SelectSlide \"" + _ThemeSelectSlides[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeSongMenus != null) - { - for (int i = 0; i < _ThemeSongMenus.Length; i++) - { - CSongMenu sm = new CSongMenu(_PartyModeID); - if (sm.LoadTheme("//root/" + _ThemeName, _ThemeSongMenus[i], xmlReader, SkinIndex)) - { - _htSongMenus.Add(_ThemeSongMenus[i], AddSongMenu(sm)); - } - else - { - CBase.Log.LogError("Can't load SongMenu \"" + _ThemeSongMenus[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeLyrics != null) - { - for (int i = 0; i < _ThemeLyrics.Length; i++) - { - CLyric lyric = new CLyric(_PartyModeID); - if (lyric.LoadTheme("//root/" + _ThemeName, _ThemeLyrics[i], xmlReader, SkinIndex)) - { - _htLyrics.Add(_ThemeLyrics[i], AddLyric(lyric)); - } - else - { - CBase.Log.LogError("Can't load Lyric \"" + _ThemeLyrics[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeSingNotes != null) - { - for (int i = 0; i < _ThemeSingNotes.Length; i++) - { - CSingNotes notes = new CSingNotesClassic(_PartyModeID); - if (notes.LoadTheme("//root/" + _ThemeName, _ThemeSingNotes[i], xmlReader, SkinIndex)) - { - _htSingNotes.Add(_ThemeSingNotes[i], AddSingNote(notes)); - } - else - { - CBase.Log.LogError("Can't load SingBar \"" + _ThemeSingNotes[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeNameSelections != null) - { - for (int i = 0; i < _ThemeNameSelections.Length; i++) - { - CNameSelection nsel = new CNameSelection(_PartyModeID); - if (nsel.LoadTheme("//root/" + _ThemeName, _ThemeNameSelections[i], xmlReader, SkinIndex)) - { - _htNameSelections.Add(_ThemeNameSelections[i], AddNameSelection(nsel)); - } - else - { - CBase.Log.LogError("Can't load NameSelection \"" + _ThemeNameSelections[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeEqualizers != null) - { - for (int i = 0; i < _ThemeEqualizers.Length; i++) - { - CEqualizer eq = new CEqualizer(_PartyModeID); - if (eq.LoadTheme("//root/" + _ThemeName, _ThemeEqualizers[i], xmlReader, SkinIndex)) - { - _htEqualizers.Add(_ThemeEqualizers[i], AddEqualizer(eq)); - } - else - { - CBase.Log.LogError("Can't load equalizer \"" + _ThemeEqualizers[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemePlaylists != null) - { - for (int i = 0; i < _ThemePlaylists.Length; i++) - { - CPlaylist pls = new CPlaylist(_PartyModeID); - if (pls.LoadTheme("//root/" + _ThemeName, _ThemePlaylists[i], xmlReader, SkinIndex)) - { - _htPlaylists.Add(_ThemePlaylists[i], AddPlaylist(pls)); - } - else - { - CBase.Log.LogError("Can't load Playlist \"" + _ThemePlaylists[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeParticleEffects != null) - { - for (int i = 0; i < _ThemeParticleEffects.Length; i++) - { - CParticleEffect pe = new CParticleEffect(_PartyModeID); - if (pe.LoadTheme("//root/" + _ThemeName, _ThemeParticleEffects[i], xmlReader, SkinIndex)) - { - _htParticleEffects.Add(_ThemeParticleEffects[i], AddParticleEffect(pe)); - } - else - { - CBase.Log.LogError("Can't load ParticleEffect \"" + _ThemeParticleEffects[i] + "\" in screen " + _ThemeName); - } - } - } - - if (_ThemeScreenSettings != null) - { - for (int i = 0; i < _ThemeScreenSettings.Length; i++) - { - CScreenSetting se = new CScreenSetting(_PartyModeID); - if (se.LoadTheme("//root/" + _ThemeName, _ThemeScreenSettings[i], xmlReader, SkinIndex)) - { - _htScreenSettings.Add(_ThemeScreenSettings[i], AddScreenSetting(se)); - } - else - { - CBase.Log.LogError("Can't load ThemeSetting \"" + _ThemeScreenSettings[i] + "\" in screen " + _ThemeName); - } - } - } + LoadThemeElement(_ThemeBackgrounds, AddBackground, xmlReader, SkinIndex); + LoadThemeElement(_ThemeStatics, AddStatic, xmlReader, SkinIndex); + LoadThemeElement(_ThemeTexts, AddText, xmlReader, SkinIndex); + LoadThemeElement(_ThemeButtons, AddButton, xmlReader, SkinIndex); + LoadThemeElement(_ThemeSelectSlides, AddSelectSlide, xmlReader, SkinIndex); + LoadThemeElement(_ThemeSongMenus, AddSongMenu, xmlReader, SkinIndex); + LoadThemeElement(_ThemeLyrics, AddLyric, xmlReader, SkinIndex); + LoadThemeElement(_ThemeSingNotes, AddSingNote, xmlReader, SkinIndex); + LoadThemeElement(_ThemeNameSelections, AddNameSelection, xmlReader, SkinIndex); + LoadThemeElement(_ThemeEqualizers, AddEqualizer, xmlReader, SkinIndex); + LoadThemeElement(_ThemePlaylists, AddPlaylist, xmlReader, SkinIndex); + LoadThemeElement(_ThemeParticleEffects, AddParticleEffect, xmlReader, SkinIndex); + LoadThemeElement(_ThemeScreenSettings, AddScreenSetting, xmlReader, SkinIndex); } } @@ -402,7 +275,7 @@ namespace Vocaluxe.Menu return; XmlWriterSettings settings = new XmlWriterSettings(); - settings.Indent = true; + settings.Indent = true; settings.Encoding = Encoding.UTF8; settings.ConformanceLevel = ConformanceLevel.Document; @@ -419,78 +292,56 @@ namespace Vocaluxe.Menu writer.WriteElementString("ScreenVersion", _ScreenVersion.ToString()); // Backgrounds - for (int i = 0; i < _Backgrounds.Count; i++) - _Backgrounds[i].SaveTheme(writer); + foreach (CBackground bg in _Backgrounds) + bg.SaveTheme(writer); // Statics - for (int i = 0; i < _Statics.Count; i++) - _Statics[i].SaveTheme(writer); + foreach (CStatic st in _Statics) + st.SaveTheme(writer); // Texts - for (int i = 0; i < _Texts.Count; i++) - { - _Texts[i].SaveTheme(writer); - } + foreach (CText txt in _Texts) + txt.SaveTheme(writer); // Buttons - for (int i = 0; i < _Buttons.Count; i++) - { - _Buttons[i].SaveTheme(writer); - } + foreach (CButton bt in _Buttons) + bt.SaveTheme(writer); // SelectSlides - for (int i = 0; i < _SelectSlides.Count; i++) - { - _SelectSlides[i].SaveTheme(writer); - } + foreach (CSelectSlide ss in _SelectSlides) + ss.SaveTheme(writer); // SongMenus - for (int i = 0; i < _SongMenus.Count; i++) - { - _SongMenus[i].SaveTheme(writer); - } + foreach (CSongMenu sm in _SongMenus) + sm.SaveTheme(writer); // Lyrics - for (int i = 0; i < _Lyrics.Count; i++) - { - _Lyrics[i].SaveTheme(writer); - } + foreach (CLyric ly in _Lyrics) + ly.SaveTheme(writer); // SingBars - for (int i = 0; i < _SingNotes.Count; i++) - { - _SingNotes[i].SaveTheme(writer); - } + foreach (CSingNotes sn in _SingNotes) + sn.SaveTheme(writer); // NameSelections - for (int i = 0; i < _NameSelections.Count; i++) - { - _NameSelections[i].SaveTheme(writer); - } + foreach (CNameSelection ns in _NameSelections) + ns.SaveTheme(writer); //Equalizers - for (int i = 0; i < _Equalizers.Count; i++) - { - _Equalizers[i].SaveTheme(writer); - } + foreach (CEqualizer eq in _Equalizers) + eq.SaveTheme(writer); //Playlists - for (int i = 0; i < _Playlists.Count; i++) - { - _Playlists[i].SaveTheme(writer); - } + foreach (CPlaylist pl in _Playlists) + pl.SaveTheme(writer); //ParticleEffects - for (int i = 0; i < _ParticleEffects.Count; i++) - { - _ParticleEffects[i].SaveTheme(writer); - } + foreach (CParticleEffect pa in _ParticleEffects) + pa.SaveTheme(writer); //ScreenSettings - for (int i = 0; i < _ScreenSettings.Count; i++) - { - _ScreenSettings[i].SaveTheme(writer); - } + foreach (CScreenSetting cs in _ScreenSettings) + cs.SaveTheme(writer); writer.WriteEndElement(); @@ -649,7 +500,7 @@ namespace Vocaluxe.Menu #endregion ThemeHandler #region GetLists - public List GetButtons() + /*public List GetButtons() { return _Buttons; } @@ -712,7 +563,7 @@ namespace Vocaluxe.Menu public List GetScreenSettings() { return _ScreenSettings; - } + }*/ #endregion GetLists #region ElementHandler @@ -809,282 +660,73 @@ namespace Vocaluxe.Menu } #endregion Create Elements - #region Get Arrays - public CButton[] Buttons + #region Get Elements + public COrderedDictionaryLite Buttons { - get - { - return _Buttons.ToArray(); - } + get { return _Buttons; } } - public CText[] Texts + public COrderedDictionaryLite Texts { - get - { - return _Texts.ToArray(); - } + get { return _Texts; } } - public CBackground[] Backgrounds + public COrderedDictionaryLite Backgrounds { - get - { - return _Backgrounds.ToArray(); - } + get { return _Backgrounds; } } - public CStatic[] Statics + public COrderedDictionaryLite Statics { - get - { - return _Statics.ToArray(); - } + get { return _Statics; } } - public CSelectSlide[] SelectSlides + public COrderedDictionaryLite SelectSlides { - get - { - return _SelectSlides.ToArray(); - } + get { return _SelectSlides; } } - public CSongMenu[] SongMenus + public COrderedDictionaryLite SongMenus { - get - { - return _SongMenus.ToArray(); - } + get { return _SongMenus; } } - public CLyric[] Lyrics + public COrderedDictionaryLite Lyrics { - get - { - return _Lyrics.ToArray(); - } + get { return _Lyrics; } } - public CSingNotes[] SingNotes + public COrderedDictionaryLite SingNotes { - get - { - return _SingNotes.ToArray(); - } + get { return _SingNotes; } } - public CNameSelection[] NameSelections + public COrderedDictionaryLite NameSelections { - get - { - return _NameSelections.ToArray(); - } + get { return _NameSelections; } } - public CEqualizer[] Equalizers + public COrderedDictionaryLite Equalizers { - get - { - return _Equalizers.ToArray(); - } + get { return _Equalizers; } } - public CPlaylist[] Playlists + + public COrderedDictionaryLite Playlists { - get - { - return _Playlists.ToArray(); - } + get { return _Playlists; } } - public CParticleEffect[] ParticleEffects + public COrderedDictionaryLite ParticleEffects { - get - { - return _ParticleEffects.ToArray(); - } + get { return _ParticleEffects; } } - public CScreenSetting[] ScreenSettings + public COrderedDictionaryLite ScreenSettings { - get - { - return _ScreenSettings.ToArray(); - } + get { return _ScreenSettings; } } #endregion Get Arrays - - #region Hashtables - public int htBackgrounds(string key) - { - try - { - return (int)_htBackgrounds[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find Background Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htStatics(string key) - { - try - { - return (int)_htStatics[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find Statics Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htTexts(string key) - { - try - { - return (int)_htTexts[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find Text Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htButtons(string key) - { - try - { - return (int)_htButtons[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find Button Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htSongMenus(string key) - { - try - { - return (int)_htSongMenus[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find SongMenu Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htLyrics(string key) - { - try - { - return (int)_htLyrics[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find Lyric Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htSelectSlides(string key) - { - try - { - return (int)_htSelectSlides[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find SelectSlide Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htSingNotes(string key) - { - try - { - return (int)_htSingNotes[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find SingBar Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htNameSelections(string key) - { - try - { - return (int)_htNameSelections[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find NameSelection Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htEqualizer(string key) - { - try - { - return (int)_htEqualizers[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find Equalizer Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htPlaylists(string key) - { - try - { - return (int)_htPlaylists[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find Playlist Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htParticleEffects(string key) - { - try - { - return (int)_htParticleEffects[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find ParticleEffect Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - - public int htScreenSettings(string key) - { - try - { - return (int)_htScreenSettings[key]; - } - catch (Exception) - { - CBase.Log.LogError("Can't find ScreenSetting Element \"" + key + "\" in Screen " + _ThemeName); - throw; - } - } - #endregion Hashtables #endregion ElementHandler #region MenuHandler @@ -1129,7 +771,7 @@ namespace Vocaluxe.Menu if (KeyEvent.Key == Keys.Right) NextElement(); } - + return true; } @@ -1157,7 +799,7 @@ namespace Vocaluxe.Menu _UnsetHighlighted(_Selection); if (KeyEvent.KeyPressed) { - + } else { @@ -1236,7 +878,7 @@ namespace Vocaluxe.Menu if (MouseEvent.X - _PrevMouseX <= -5) stepX -= 5; - + _PrevMouseX = MouseEvent.X - (_MouseDX - stepX); } @@ -1251,22 +893,22 @@ namespace Vocaluxe.Menu _PrevMouseY = MouseEvent.Y - (_MouseDY - stepY); } } - + if (MouseEvent.LBH) { //if (IsMouseOver(MouseEvent.X, _PrevMouseY)) //{ - if (MouseEvent.Mod == EModifier.None) - MoveElement(stepX, stepY); + if (MouseEvent.Mod == EModifier.None) + MoveElement(stepX, stepY); - if (MouseEvent.Mod == EModifier.Ctrl) - MoveElement(_MouseDX, _MouseDY); + if (MouseEvent.Mod == EModifier.Ctrl) + MoveElement(_MouseDX, _MouseDY); - if (MouseEvent.Mod == EModifier.Shift) - ResizeElement(stepX, stepY); + if (MouseEvent.Mod == EModifier.Shift) + ResizeElement(stepX, stepY); - if (MouseEvent.Mod == (EModifier.Shift | EModifier.Ctrl)) - ResizeElement(_MouseDX, _MouseDY); + if (MouseEvent.Mod == (EModifier.Shift | EModifier.Ctrl)) + ResizeElement(_MouseDX, _MouseDY); //} } else @@ -1322,7 +964,7 @@ namespace Vocaluxe.Menu DrawFG(); return true; } - + public void DrawBG() { foreach (CBackground bg in _Backgrounds) @@ -1335,7 +977,7 @@ namespace Vocaluxe.Menu { if (_Interactions.Count <= 0) return; - + List items = new List(); for (int i = 0; i < _Interactions.Count; i++) @@ -1361,106 +1003,82 @@ namespace Vocaluxe.Menu if (items.Count <= 0) return; - + items.Sort(delegate(ZSort s1, ZSort s2) { return (s2.z.CompareTo(s1.z)); }); for (int i = 0; i < items.Count; i++) { _DrawInteraction(items[i].ID); } - + } #endregion Drawing #region Elements - public int AddBackground(CBackground bg) + + public void AddBackground(CBackground bg, String key = null) { - _Backgrounds.Add(bg); - _AddInteraction(_Backgrounds.Count - 1, EType.TBackground); - return _Backgrounds.Count - 1; + _AddInteraction(_Backgrounds.Add(bg, key), EType.TBackground); } - public int AddButton(CButton button) + public void AddButton(CButton button, String key = null) { - _Buttons.Add(button); - _AddInteraction(_Buttons.Count - 1, EType.TButton); - return _Buttons.Count - 1; + _AddInteraction(_Buttons.Add(button, key), EType.TButton); } - public int AddSelectSlide(CSelectSlide slide) + public void AddSelectSlide(CSelectSlide slide, String key = null) { - _SelectSlides.Add(slide); - _AddInteraction(_SelectSlides.Count - 1, EType.TSelectSlide); - return _SelectSlides.Count - 1; + _AddInteraction(_SelectSlides.Add(slide, key), EType.TSelectSlide); } - public int AddStatic(CStatic stat) + public void AddStatic(CStatic stat, String key = null) { - _Statics.Add(stat); - _AddInteraction(_Statics.Count - 1, EType.TStatic); - return _Statics.Count - 1; + _AddInteraction(_Statics.Add(stat, key), EType.TStatic); } - public int AddText(CText text) + public void AddText(CText text, String key = null) { - _Texts.Add(text); - _AddInteraction(_Texts.Count - 1, EType.TText); - return _Texts.Count - 1; + _AddInteraction(_Texts.Add(text, key), EType.TText); } - public int AddSongMenu(CSongMenu songmenu) + public void AddSongMenu(CSongMenu songmenu, String key = null) { - _SongMenus.Add(songmenu); - _AddInteraction(_SongMenus.Count - 1, EType.TSongMenu); - return _SongMenus.Count - 1; + _AddInteraction(_SongMenus.Add(songmenu, key), EType.TSongMenu); } - public int AddLyric(CLyric lyric) + public void AddLyric(CLyric lyric, String key = null) { - _Lyrics.Add(lyric); - _AddInteraction(_Lyrics.Count - 1, EType.TLyric); - return _Lyrics.Count - 1; + _AddInteraction(_Lyrics.Add(lyric, key), EType.TLyric); } - public int AddSingNote(CSingNotes sn) + public void AddSingNote(CSingNotes sn, String key = null) { - _SingNotes.Add(sn); - _AddInteraction(_SingNotes.Count - 1, EType.TSingNote); - return _SingNotes.Count - 1; + _AddInteraction(_SingNotes.Add(sn, key), EType.TSingNote); } - public int AddNameSelection(CNameSelection ns) + public void AddNameSelection(CNameSelection ns, String key = null) { - _NameSelections.Add(ns); - _AddInteraction(_NameSelections.Count - 1, EType.TNameSelection); - return _NameSelections.Count - 1; + _AddInteraction(_NameSelections.Add(ns, key), EType.TNameSelection); } - public int AddEqualizer(CEqualizer eq) + public void AddEqualizer(CEqualizer eq, String key = null) { - _Equalizers.Add(eq); - _AddInteraction(_Equalizers.Count - 1, EType.TEqualizer); - return _Equalizers.Count - 1; + _AddInteraction(_Equalizers.Add(eq, key), EType.TEqualizer); } - public int AddPlaylist(CPlaylist pls) + public void AddPlaylist(CPlaylist pls, String key = null) { - _Playlists.Add(pls); - _AddInteraction(_Playlists.Count - 1, EType.TPlaylist); - return _Playlists.Count - 1; + _AddInteraction(_Playlists.Add(pls, key), EType.TPlaylist); } - public int AddParticleEffect(CParticleEffect pe) + public void AddParticleEffect(CParticleEffect pe, String key = null) { - _ParticleEffects.Add(pe); - _AddInteraction(_ParticleEffects.Count - 1, EType.TParticleEffect); - return _ParticleEffects.Count - 1; + _AddInteraction(_ParticleEffects.Add(pe, key), EType.TParticleEffect); } - public int AddScreenSetting(CScreenSetting se) + public void AddScreenSetting(CScreenSetting se, String key = null) { - _ScreenSettings.Add(se); - return _ScreenSettings.Count - 1; + _ScreenSettings.Add(se, key); } #endregion Elements @@ -1474,7 +1092,7 @@ namespace Vocaluxe.Menu public void NextInteraction() { if (_Interactions.Count > 0) - _NextInteraction(); + _NextInteraction(); } public void PrevInteraction() @@ -1484,9 +1102,9 @@ namespace Vocaluxe.Menu } /// - /// Selects the next element in a menu interaction. + /// Selects the next element in a menu Interaction. /// - /// True if the next element is selected. False if either there is no next element or the interaction does not provide such a method. + /// True if the next element is selected. False if either there is no next element or the Interaction does not provide such a method. public bool NextElement() { if (_Interactions.Count > 0) @@ -1496,9 +1114,9 @@ namespace Vocaluxe.Menu } /// - /// Selects the previous element in a menu interaction. + /// Selects the previous element in a menu Interaction. /// - /// True if the previous element is selected. False if either there is no next element or the interaction does not provide such a method. + /// True if the previous element is selected. False if either there is no next element or the Interaction does not provide such a method. public bool PrevElement() { if (_Interactions.Count > 0) @@ -1659,7 +1277,7 @@ namespace Vocaluxe.Menu if (CHelper.IsInBounds(_ParticleEffects[interact.Num].Rect, x, y)) return true; break; - } + } return false; } @@ -2381,7 +1999,7 @@ namespace Vocaluxe.Menu case EType.TParticleEffect: _ParticleEffects[_Interactions[interaction].Num].Draw(); break; - + //TODO: //case EType.TLyric: // _Lyrics[_Interactions[interaction].Num].Draw(0); @@ -2439,7 +2057,7 @@ namespace Vocaluxe.Menu break; } } - } + } private void ResizeElement(int stepW, int stepH) { @@ -2516,24 +2134,24 @@ namespace Vocaluxe.Menu string value = String.Empty; // Backgrounds - CBackground background = new CBackground( _PartyModeID); + CBackground background = new CBackground(_PartyModeID); int i = 1; while (background.LoadTheme("//root/" + _ThemeName, "Background" + i.ToString(), xmlReader, SkinIndex)) { AddBackground(background); background = new CBackground(_PartyModeID); i++; - } - + } + // Statics CStatic stat = new CStatic(_PartyModeID); i = 1; - while (stat.LoadTheme("//root/" + _ThemeName, "Static" + i.ToString(), xmlReader, SkinIndex)) + while (stat.LoadTheme("//root/" + _ThemeName, "Statics[" + i.ToString(), xmlReader, SkinIndex)) { AddStatic(stat); stat = new CStatic(_PartyModeID); i++; - } + } // Texts CText text = new CText(_PartyModeID); @@ -2546,14 +2164,14 @@ namespace Vocaluxe.Menu } // ParticleEffects - CParticleEffect partef = new CParticleEffect(_PartyModeID); + CParticleEffect partef = new CParticleEffect(_PartyModeID); i = 1; while (partef.LoadTheme("//root/" + _ThemeName, "ParticleEffect" + i.ToString(), xmlReader, SkinIndex)) { AddParticleEffect(partef); partef = new CParticleEffect(_PartyModeID); i++; - } + } } private void ReloadThemeEditMode() @@ -2569,4 +2187,4 @@ namespace Vocaluxe.Menu } #endregion Theme Handling } -} +} \ No newline at end of file From 0012a21c90f58c14093589cedaf646d34bdc732f Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 15 Mar 2013 14:52:44 +0100 Subject: [PATCH 12/31] Fixed warnings and possible bug --- .gitignore | 1 + GstreamerHelper/GstreamerVideo.cpp | 9 ++++++++- GstreamerHelper/GstreamerVideoStream.cpp | 4 ++-- GstreamerHelper/GstreamerVideoStream.h | 2 +- Output/x64/gstreamer/GstreamerHelper.dll | Bin 215040 -> 0 bytes Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs | 2 +- Vocaluxe/Vocaluxe.csproj | 7 ++++--- gstreamerhelper/VocaluxeClock.cpp | 2 +- 8 files changed, 18 insertions(+), 9 deletions(-) delete mode 100644 Output/x64/gstreamer/GstreamerHelper.dll diff --git a/.gitignore b/.gitignore index 1ea3fff8..ff6d5d67 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ Output/Songs *.ipch *.log +/Output/x64/gstreamer/GstreamerHelper.dll diff --git a/GstreamerHelper/GstreamerVideo.cpp b/GstreamerHelper/GstreamerVideo.cpp index 7834eef1..214f0709 100644 --- a/GstreamerHelper/GstreamerVideo.cpp +++ b/GstreamerHelper/GstreamerVideo.cpp @@ -65,7 +65,7 @@ DllExport bool CloseVideo(int Stream) DllExport int GetVideoNumStreams() { - return VideoStreams.size(); + return (int) VideoStreams.size(); } DllExport float GetVideoLength(int Stream) @@ -85,6 +85,13 @@ DllExport struct ApplicationFrame GetFrame(int Stream, float Time) { return it->second->GetFrame(Time); } + struct ApplicationFrame returnFrame; + returnFrame.size=0; + returnFrame.width=0; + returnFrame.height=0; + returnFrame.data=NULL; + returnFrame.videotime=0; + return returnFrame; } DllExport bool Skip(int Stream, float Start, float Gap) diff --git a/GstreamerHelper/GstreamerVideoStream.cpp b/GstreamerHelper/GstreamerVideoStream.cpp index d67f4656..93c98df0 100644 --- a/GstreamerHelper/GstreamerVideoStream.cpp +++ b/GstreamerHelper/GstreamerVideoStream.cpp @@ -180,7 +180,7 @@ struct ApplicationFrame GstreamerVideoStream::GetFrame(float Time) gst_buffer_map(Buffer, &Mapinfo, GST_MAP_READ); - Size = Mapinfo.size; + Size = (int) Mapinfo.size; gst_structure_get_int (BufferStructure, "width", &Width); gst_structure_get_int (BufferStructure, "height", &Height); VideoTime = (float) (Buffer->pts / GST_SECOND); @@ -210,7 +210,7 @@ struct ApplicationFrame GstreamerVideoStream::GetFrame(float Time) bool GstreamerVideoStream::Skip(float Start, float Gap) { - if(!gst_element_seek_simple(Element, GST_FORMAT_TIME, (GstSeekFlags)(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE), (Start + Gap) * GST_SECOND)) + if(!gst_element_seek_simple(Element, GST_FORMAT_TIME, (GstSeekFlags)(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE), (gint64)((Start + Gap) * GST_SECOND))) { LogVideoError("Seek failed"); return true; diff --git a/GstreamerHelper/GstreamerVideoStream.h b/GstreamerHelper/GstreamerVideoStream.h index 29183571..7d69e019 100644 --- a/GstreamerHelper/GstreamerVideoStream.h +++ b/GstreamerHelper/GstreamerVideoStream.h @@ -57,7 +57,7 @@ private: volatile gboolean Copying; gboolean Paused; - gboolean Finished; + bool Finished; gfloat Duration; diff --git a/Output/x64/gstreamer/GstreamerHelper.dll b/Output/x64/gstreamer/GstreamerHelper.dll deleted file mode 100644 index c647f7a171ccfbc413dae1e9590db078d2958b28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215040 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
  • Ep!FnUz!q{7@s|n# zLCvnah)_RyBvyHN7FRuHFJr>mO6YQpj+@fYNmTPsysx=2%W zLb~PFJe9VGc1|(u0==S28It!{C7{6hwA@Hc6BwwzX?bIX)T!3zf2x(P4E8YEgqmXK z^*$>NHi}I+Gmj^~r&WH>{3Ig3heU#~nL*}-&<g#}_?Dr_6QTLfCJLZt7 z-?4`@CGx~)j$(qDSvXdtoz>qQ%zXVd;E2YJy}kJRDA%gijK@a#s3*n#`S{${lY!m8 zIElLjuE+3U>LA>L!NESG1Oh5W#HLysX+mVqkCIf}R$*2uP@!xLt_4!Kdao1XtYBsx zr4r+$#duF=1?S6gk~k&*hGH>JDmxNyyKkw6B>b21cN;`pxWD_lAWpT?MQ+MJDu36Y(%wNU)jq9P`Maem zZI~*PY5Tk1DD05GJ532FaQ?Ua-G&1P*=*2|&jWO<7Z_a3#fOXcAX+XNpcj`7HK3+# zUNueGBL3>R^#;p`FJL+aLj@7uCc^kwQb4W_B#R2i=RFEjKw$1=7(>ctHfIW89d)1N z*{v`I1m+7Oe3OD)%;}^)kdB9N08znx>4UzxQNYPRV=0&+mDWt`W^H$VY+BkOGa z=(Z-~5o}eD@uzE&oh30AN=ss<+mh;M;NMn z<3DBjrqC`wMg4tYu;mqfuG%AL+mfTcR60h;4qJ1i$JkS+?IVA%^2FfB9+Ddy*`uSW z$bjh#y`$+l(qqW4^)V{0`VJqTM{R(P zUFj3<9;i%l@RI`OTaU(5VR7(dXOm~Gf@qvlpa%)$;*79$2dL##ztSE&^f2K^v{|s}6jb4Z2b*mY5Hwpkn!s20q@HK9j?M=3YSGri)!Ep!lDvGceA?lM1_V@7Cg&SEinP@_RBSh|8 zD=GE_^f=7#Vz2QN$IqZ_#tC5OFx;*v?hViSn&uz(y@_ z)D?;3oF-p4-rhl`XD+Tb*@I2Xp5Y{otxTpj2-A%u zp{m84WhzeKiG1>`V}!6=gLC9_KxHoSDUcH8XbF8|NR8nKTy#uw_M6Jt)B_{ zRI5x$A+#>0_NH~SN-I=pf=(?wT%*!H7FO!iWjRxz7_XFmp+FRyNJ7%zuk;O%Oucm| zeIqDdu1rxSHm$EB1^e+@593(1n}?xOQ)>M978YA;S`~Y@FkMkYx#=4(13KB~S_KX! zb5(4fRVOl0*qgR0E6KA?3$?p^DV|HxV@v$`GU6ZLo^HyZ=kH){o|AX`PLtV0IAm3z*v^O=^UBwHw3R#%Nt4&Rh4gD zp@p#dJ#Jg&C5mcBh-#kXccse76x1#mIbO38AEheQ?o+0dXN`_1PoDKE6^ZV)#m=!? zs8+5?rvGB(W;iEW`gTMswdGqoMMFrn?$(h`^%*zgo%5~G$bND3h@k#eM8^464M>F| zb-gUtyqMb;L?EJGM%m@4@5632GVNP0>2|%0RT3Y9*23%MWToL3LMf_Vb|Xd{OKI1O zJg19R|F+_HSBOg0%MVrK+AOG5ydyd2GO&}>bG=Rm6~lsn`LNk<%OpUQ$rSo!JzuvaVo4F_Nek^ZeU5M_LvAsora z+c^MsjE}|EX*F$An-8C9RWFX@>0(HvQSy?jOaXe2Mzk9mdLG%L{h)K%l0#KHYV&wjKEF=tKR^m9^)$nC=6b=&-} z6@9+`6F2Gu1D*L~WX_l1X~V@!@Nd2aE=YR;+{B)`KkdU|3(*z!(HUofp3c`FR5DhrYd^Pum^vT!8ZZZX(oTfvQZ}Mmym^1Zb2mG z^czJNVahJTjh-qNRKnw+~1U&1UrXKE7Z6S*M^LTcfY>##6o*CLbC7)_&;2*6X9&1j_Cf z`-Wi+w|*U}5)tBM0u5xZj-p9&+70wQEj(vW+OG&cg&>+P%vl7V3s2?2cs4Trsn~5so*qedM449Y z$^4YvFic4MIJKe~;QI+A$q;h$6a~bNyv)&bMq=#ZrdvZ&i9{0CAUcD+R?Rmw(r%a# z4c%+qxS3Co4yz5VF~2++z&=5b#>;lci|p*Ce=!VG>$y+MOAmaN_w1^l@Kr}m zSZ?^H_e}^Cx;&l=E(z5<(IRB%mSXseQr%Y5Nzrog7rES4!-p`rDy3maO#>aT-gdGW zG~_>@Xcr1L>(k#wd9tiAWGsu@jH3(flw9kOg9a?^6w`VEDL5N9tZBxf-}Gf&>1PQy z(jdNja$7HaRaTuFen$G2FrLl{g#3Gjp;j;c;A6gv!hgJd0rX|J{4L_xSp2ojQ=4Jj z{32?j7>$e#F59=DBv(*F%k}qaU}eG zqQfD$J=={ZZ=LCR|L^a3(ogHchooOleJ6c+N(+|Dq`EoOEnzvqxC0q_+BWk9SRIWv zytr-i!SI;rZJQ5-$5gg$wj41q7}O-YrFR({r4l%$XlHhT^=MfBL)%%4_#2ziP%+j- zudvvK*7K-Ppy5lib-D0;ep&ITP>PDDTCII2M9B<~BmP7{q+zXUqv314Jesqd z`U!MWFQOZRoJbY1dV=svRDm_&B;d&jf=Log5WY7FaKo;A1Ra0g^C{V0aL3>GwA-c` zZLBI(nU6Yyvv?={l9UC1hn_s?XLR8-!GdkWpf$NS5>5hL1DwhB&xm8=GthCo!CA{{ zILJ;{Z_?DRSc5$@Wd8lk{^bxSh+yI*Kh{NY*g<_08PGk+obN}@y~m;VlpWpru*4gX zC{H2b;Ja;uIPthO`smZ%A0Ko4$}E*Dr3yka+=vq+qLj1$vPp8qPj{5EOmq6>x8XpS z$o=E(d4LWd*Ue}wJaho6Rf%&OZGXpM94&}gt=l*Vg|op?+;$`?GS_N9juGk)oq4&p7qhO6aoVpaokma*=4eC7f;V#$9A&UO7_c`Tg!;}qK{;E;#9cI1 zev(vsBl_DM^tUKMe~Zb4-PvyZ2vp#k zgC0#N*p0GgSs!JC2vK7E?wD^_95$je2xG>6S&!TLBO81`K4~16;|1?x7i^rBY!6eiTE(LOQ}6?v4hH4RPmE_daineUM}vwz zm2wWV63+<@BsB0JsDUW!uker2Kk6*AHeCzn2&b9HZg{yh>l)b&UxPlDK0i-=ijG9n z+VW)?iH@n;`h^G-V(#8LxNng|GrN8d(8#ym5<>#WAU}zrE5t}G)-cbm$+-D{O%-R5 z{G;d>olvZm;pH2o&ho9}LfLg&DIz+q0u3fVyohgReuk(!@uvv53fHk-)uyL)N2=JP z*KNJ_CC0@eLAXAnck<}ULyLaF%&|WepH;Ez3ZyMg#&AXM#PwLO3;TjhkOW%mwr*b= zS`6%WS>I8=MLDVcnogdzR%s!cwM5^K3QgpO4eK2Fg(fru9_{W`BlMeB+heq54kEXr zZ?@hPD(_}X%eAgSpxuM_d+i(nFe;e&1dcjsm&vbO&FbM8>|+Ja)CEJ?9*R!bvsxM3LC(}xa zfge+TzJ~r9ni31qAWTP8OP=+?I@!!c@wPf$(7B?l13Lg``?o7COg_;b?WC~xEwGQi zo)M_|t$UM%kAfbXR8JB^kD>gr66jw~UHNj%?HOn`Ts+|)Z@pq?m^`|^mtz0-SzlO#5;c!vn;H(Q2qAf)WxO>zG?jmJCGQXNh1jHL;bfN zSWXL^fLd_O%Do=AE@sfz7gWDL-wW+h*c;$ zyyf90=&;7VkGB3xC|Q*G{biUWi`8uLx}+#4$9mu@*@(;ZOUl#g8Nri6(V=s;SjJMj zv5rTljGfNdyGd6JZ(s?pKvaK*HKT!a>{TXX4sAVPq2Q1j1(aePxdp6Vi7- z^#}hX1{=YQ{wog|;Ln>x?cPz`JWP7?4Bsd|1~V&gP7O*K!)@52#^_&SwjWwqbHDcQ z@Gq?gu-fqP_EF*X1;umNH6PVxw}Qubst(*2(tJ4{ZC{Yzd4fM}DR%%{io?I^))LHo z_-^P3{aRz}R%6?v8O>KKe^e^@yhi)!xAhI|pG4h_ko;~O48JnU*XPx*Kjri*?Dm2t z#g`~JHh`vowP-eKyfv*>HW_a)^SbYWKn!E%pdC%?(hKjiKR}zf19i!DcMN_w)|zsZ zXccAA$A-3%IUa;Q`*S@)0h5&s5cC6&|Dd)9v|fyv#kwIJ(ckT8bqbT$x<>UwC}f;o zC$9D>c9wDwk)-&?{$wvyzGhYkR!KvyRc|L%A2fUF^d_>=+qpUw%nW{)tw4S})!LkD zH0gvln81QtkJDE1gt`pVjN1Il;j&f9ngx!#4^D}Qw$89SpwZj;20NI!Nn{|tD}ZJn z62oq#Ui9(cRTj+rE^y%DN2^0a7dnL1U3u%S<^kHL!xZ9rwA)_>)fs*L7@G2p+=Inq z6s30r9sv7ULJrH<<_}ZrI~EgOnT_SnST159diu)-(XT}J#RJjH@ro5>mln;nxTAI} zt+Rf-0@`SrWcl#chI=pqDG$Dnwi?L%0s%_YiUdzv%0}Sf9r2e5qVc!o%cFkAK(UUI zg45o_=S-K3oHR>apurph}*!JsbOU9TaIfpO*Sw_Bm{QYxyw~TE9DT|@U zh7;aNUy*Vlo)9qypfL?^o8{Hw8McFODffDY?e+L~ur4s<;jJ~=>yt3s|KAJ*CryRF zXm1a}4?AQyNyQ(E2(MIO4Zozq8b-!{QKjFY`9#3$RCu9+nqG%ztN6$7lyWtw@RKU6 z;n!6BOA+y!pN3isLP?@g_l1bkeCbzKH0>2yt}`AEFr zq@>$ihQ@|{w;srEne{EcVsARLK=eac0-LsP+7r7|zJgd67q4h)mN9{LzZZ6uzyBAR zqP67j6!c+a#HS;+x^0}`q_5wOL!&3Pi~9|@hvkngtFy*j0U8_w+&U|XPfZu$>G0)z zV%*>O18R2^@`DZ>_XYCM7lBad` zuBME|z{fVQGv4LS5V!^75za=po45rt7l4%6!0Czc$nIMhPWcL0z*#mEw541^AjaHH zBerqmCC^#L*$jAQ^M$HB&bc>BE&KtL?(z83^1vXNxl-_^Gm(Q1o}QG4q7=yEtKig{*pC2&bYRy2#+O&{`WopC8-xyjF~!n!}@cjP~$GFD4a^6W^XtzKO|NDh5p4; zQ>}bTwR?W+?u?mD#`+yam_n6^c~lVuG^K3*ot{lE`_{mM+{wW`tg?SFV#S7;WY=`u zhHH)%592mmlO-NTZn)-nKJXNM41EhZ>VMXHOmydS#%x%hB_s<^y;G!KmK=NryqoTZ zLUKzlWBor5!y>cj=N$+I!CY_(u^X!7GAgsQxQMk4E#Dv`)sQ0AXFgrq4jrGCrC)Blk!b7lP=bd!RYN|^OuCYV#OhcI@pTPfUOmot-@wZA zbFZ7wQwfZrwPzKKAq@#8)P$6r-qA9U!~lF!j^UeF#3GYp8S4ishmWyxz!5mPqRr>B zqJWT#%If3wR;{wz+sw3EE^--YW;=Fdta^V(FxZsz&Q8ycCo=Y*i28P{cTv_<4A7qZ z8{Jl_2%^8SC-^cV6htcn1rC(wX%X|_+W&z4c|^)9^t%r~LI*8%S~E@vs*au?D^NVG z7IN5YUH*Ym5+nFgJS$-f7)jRrphfK2%(JG2Fm2<6ebXSZ_*EwMakx+-EZCs4QZ|`a z#7W$=eT9M9qqc7zzs4QRTy&$$=oL$4WzbxxqD50Uw}c1l0I3*rJb_PA&jZ@EJJUR3Pnr(#eWYdoM8$5=bl1Yjqb1?rbQWSQq(s&IfC2 z9OnuFi66||@=XY+Lda=Jg5w1{nm?+fdj2r6)L6oXh@STIu=pZH+&co~ z&mZKdgR@!xA3gr3t)6#6qW5L4uTyvY9|*`{xN8PqK^up{mfJa}67 z2Gb`Ro?utYc}Ygo`|vwwdS+ppn~{F~tw@))_ykmQ3G%nwKX!JF^#ta-HW!YWxUsA0 zAXRR9f=_7w(6Wwtp6_aUZ`!`}iEg6+1R0*dLJ*7%g5bYH1TDzL2;rmR(~;A(ePR83 zA9|tx_uy0Hs1JIY@Bgj!2e6{zS#m0V$wxx*RE_O=MT>MVDOg;vq+n@*n0G&h28rqQ zd&U04MKhl+^1oH&e`S99?ERiiZ~HFePy`m>CNg3^L33N9~L0ZWmWd(o0*w!|9_baKJYpEBV>yRO?2Gk4nC#Tb-SScU#q zA?95FKP=x!B8qlB+T(x5T8wa!|6oDu6TxEto@x8G@Bb%k1fv=ZZ63+QG(wU`SDt0F0VlLv;}o7Cwl-t=D6NZ~_1ig@ z#IRwOcmfxFM9Xx00ypK9K|r)Zq+!gOODIILJmc_$!O_`;@cO_^`5fe7MGE%~9*Wfe zlq^5n__O=jD5wK`47xGL3&UXm6dPqeP@K{lGaJQ`Qef5zg0b)s;~}ab-_%70Eh7{I zPvCaRjp7Tfd(sR4LQPKFXLF*P0lPP0|9DTn#f8=j$vN80BfFG0kU$4St{BD@_@63D zFMP(9z99HKCrU01uVr1bDbO(36fQh0ngT6HTUY7j7}d!uiLj_4oc-f;L4 zt6iKn5ON|J+%b2(3bKlI%qLfG%)Q1nbC{Cp~3p!gJ(3EV>wR`q%8ul794^EfwY_XJR8qq zPKp^>=&JJglPBeYPDP6Gb!bqv;lNg;sm;wsli51!OKfk~X82PY@DSYFmhwfw-VxKf z_Lsq??QPJTa@m|VGa&>5wxM(lLPQtWDemeRsNAngVCJxGXMAB;HYNq=B0 z@zK+-2OD3O#K-YN9x>mXE()L2yUm~SASmG`#%#w(&9Ji2etYNcN!f~6;=sMm`kKgL z`1MHsG8QI)Op$*AVNocK^THDM(Anh*n(o$=Tu(ei3t(7UQHG817GNH9R zO42K|wjPwNhm(BiQf;rm;qL!7lCjG0EhOPR`(|1k9XNR9qT|Q9DN{>D>W@?^EDsYc za22AVKTvZolTYqxU2rYw8_{4y!Ild=5R_;FQ;fZVYO;QFDXG~oQJQosj+Y)c?TKLK zT;|0_;W^jUl+=s4s77r}+25|R27}aK<~Svmmvm`1U7IV&uUq_Sk9>heJ8-=$8v4_; zb`kTEiYX!QW-YY(f<9n74AXle(Drr|p#JlWcW@s^$1l(L`8 z+Yu;Vz33B-;&C<26?~e`7f5m&ircCHN?61c4&z#9?S@~6Avu$RnGYh8QX5kEVNFp* zCuI6BLg^2O(wSc-@hSyTM5(h`TB7Cy9HGxKGAC zqI{TkrE-BMn0eJkm(iB;+Y6L8w2py+(m3+0@px*T)rl0W_X<~OeF$6KJ~G+pvOdOB z$Y|~L$L-kWXIO88lD=Fl`96Irv~(NFVm(J1s2q(n@m;4oizfRX4%^sjCx%P@q#ZhjpRjp20{J)``D1Ismkmuhk%MY=v z-*N1QNI2t^>rg6|A5L7BpJ9}r0Ody|?@4(acUk5~@g&QAYV9cK0B0_tQBoTiYqq7l^Ldw}x&mpv2%|`D z7D=~s=jY9&W0%x;5}r&kF57|i=|JX#AQT>BzCXFk)0X^X?~_o;dW>_e5&YOuR<2mD zD}(@9j+HCCbJ1CGsS!O6|H?}G{d>9iM|T-o9CRbs5>bK@QNs16D2c>6T@Zk|TZGZU zE$@AXoRwlsqbZv!cgr~)KrY%FTl1uC!5i7_iEP0Js#e`vu3RVF0DoQ4xTXhxMl!`Z z=O2+{$XMkYwAj5g_WYfgPb|lH8TH;U6ZJ0FBix8-nbm<7i*Jd?;J!QMMg&~e33$fR zQ~D`5fnot;UKcG-0UoL_*LW)$_fFQ?=Hkf&-ByYMT zm|3bwi^2utnBY&>3c036lj|N70dh@{J26Zw9%7g?OtDSk*l$Y?Rm9oa?Qg;KHteDf zg~!MKfDH#Y(S=6M8Ma1C7!yca@JeV+FPPa08My5a#W)51BSI`^Ch#T$FPPa9O6TDD zzp4B{=4nX73IUe{z2FKzFVMJjkiK!J#F?OR9?EGEIK=|zpuo9V;*8Qb_vJJToKppk z1sq?V^b3K^fA*j@MGwJ^`g?W&u|*8Jg3kgi19G6gzRUsf{(Q29@nb#?@5o92bZOfN zx|Q5ug65K!3O16<^Mbn~Vq0^rpL-?nML2d+%{q(|3RWR_ljJ4YwAc zPZX;O1;e^m6`Xtg#l?X!7dN#AW(QZbt}k@2@QvQKf;RK`s)9CG;pvYTv>wh%zpjkK z!@%rgJhQmukbZp$!?1TOebSuV((WM7VmG2I7>#F)qf$!MGn#VBW$GCN*py}Jxy+xk z7>~fNPJcM17>}#)Tsv)FF!Qq8*W4{^<+jFydem?d(eO$3t&)(CXEsC2&3U4!Aum#75dgV7^sxQ6x82qHB7 z1&K?L7$`|*QOm5yW&9o?gU*8QO2vAuSgj%x57%aYE9}Dh7D%Q&0gJwA2VFFBVPT+! zGu~w7-JY|R;SIZ3YKJzSdP=zdB}?TJoF`D5^CEQ91?jMA=m}hf;p$s++s1T!M56?e3{o#v;v%PME97V&P zC^-F~r|nVkDQ|)QlLG&r@m}(j^ocDsSw5DP7jBfjNgxG=??M`_GkFMSkFp6gw z8OS{RUsN)j^5(?MB zX{pE!^c)4i!j|meg9#Cr6$R$jQ@AWL9YwN-=PsMMv*{>*asA9^t{yS0c+boa8paDo z$e-++ezc!&Mf{hSdbVSz!3#^pb8tZQj`ZvIAjK0n9;K!;zP*{F6g23)Y~kNQ2>U68 z+r5)`lnxCI{&j9?kzXvgP`Za@B?w&<1Q$XyU+L*zuAg~+!*c(U(qBSI!~ffv&#pbH z-M?ezdAnf@J7zxF@Q#1U!+`=chvNJFg}akQkx|0clOP}7Q2d4wxdm;>7>v0D>tK5i zIBo1IOrQG>_9I+PQFn7P2b<_cNS7IYoz*lpctZ>D5qO4ygW>LjntS+%ElB)5CpPQW1c(zFMyT^#Nh6d9PBCk}uUG{g0 zghsR&vP|y%F+4%5^JOE1*5kM3SmibHCN zK@~|?jIJ)<5JYE^DBthSnFK~H;53S^mvtYS-~z+!Weyy@@#UqKN2#uj8o;aXhmBeE zOu|_&V2o7in4FMKg>q6ib9;BY^2F z1PJj_`?hJiRIoL0;;k)ZHdglJvnbn423z~Qif8|1I(vC zhshxSv=#EfOfonrN8n8s_gry5P26+Vl751?r;7VY;x6Nl63=C*f#9Tt;$A53=ZJf* zxF0L-W5oRvA2AP#`>W#qoVf26_if^SuejeX?q3)87IAM7_eybJD(;fc4Do!1xSt^I z8RCALxUa|IB*95_;$9~13&p)q+|LpBTyZ~E+{cLfCk;YQaer0ZpA+}p;=WDX?-lpk z#r^Bz-XiV|;$A84OU2!TyY_bpn9x8%0|^ZzG?36hLIVj6Bs7rFKtclv4J0&>&_F^1 z2@NDPkkCLv0|^ZzH1O}C0r`G~8?=|m4@>bGslV85W%1n)*3L`qFF&NbvGA?428X|G zF!)RGQlhxbdUOiTkHMGZR`xD&jC4w7Mf6M^s*NUZAkc|71J-9lB1Fg9OsvNy+j&IA zDqe0KfLuyfQBeYX#cS;z2rC1x!mN&guq^V*9YCnSa`IX{5HIfCw*E9}0O`HN`bA8v ze13WC|5gSzJ9+$pgLs){Ej&$Clox-Zq#bV(Z;>Yt_OtY;>NEQ^8Egc_~Z!`=UbEUvFu>l=lfB3v(Qn?i}wHgDTCwxnZe3) zvdurL2y@-y+me$0Fx@-Y^1-Cz)pwvcCzyHiCE|T) zqyvp6PXM;~!byYSpKCP_R-PN-68dve#f8Dl`Vh`w^ch%Eh?d_$$8jC_I$!3EJl7V^;&d zoqHf8Pn6PO3*m#<;VtucUKi#RRhUP)uOdpf99?-)Vx#2f2^3EcW;QOh?ZZhH9Ut~R zXE69-?JXKhKU~@$CfbULh7u@lwyulOYMl~?KS$%_4;*G4RrQ}A`Z8jDzF#c=CYqr< z4|1p4Y1ON`IY9Eg_~pO1)%6=i(BAD%$;k=?(L6?MxjQBnV9{0 z{5Rvor+@onmaTi6Hy@(%M|&F=;vE&mFSLBZ9CpE{u1N8Llcy3`5uy`|G|p*OCKvgd%Wjy<|oE` z*XjI{RetU(jyOM#-z$m-F&=VTfBTHB?`SIH_@)Mu_Sf7ozPTsFC9D==2cl*s$2T8j z_M4v?-#ptdmL90^prWwx%_pdc*oDz#ea1I?LS(Va)L%;U@^;bbjtrF~#333!+yD6? zL874Ofr=`2XnZpwF0yFjo2UEjr*wwV#y2;HC`08M>Qj`$V(r1rlg+Is`!`UcZP?Mp z1)hwMs-rRFNbuW3lR6qZWQ_Ur{6VzGTr2%(+djiox2 z)A3Egv?n&?^H44Mk&Z-)KfSFO{%|gS20nb8i*4(3bN$5t-PYsJgfg}H?Me9{37c}| z{LU8VDLcLO%lP_oLXp21A79Qb!Phz-)|>Uz?hr2))W-L;6{DD#mts!5Is(a|5hp%4 z&c#p2n+tJgr5Hw6)5tw@bFc!)laS};02+Q2#-T9>v&3UU0|^ZzG?36hLIVj6Bs7rF zKtclv4J0&>&_F^12@NDP@c)4ZqW}G)K-%kvuzvxwZFRr z{l<9ck5vChN*|^E?*1EemM%?mFON?icFUmZ&qw+*KN9t~jr2RW4vM~z^kZfI_mIAI z5cHz{#(_gHGkNMz>+jXKMg8-z6m|AT-`1nrPo(~I`+f#2tVUUgoqT?Gm}n3qSfB@Q zj;fG|Oro|A&3_qrZjk)Hz~>j`^B-}Bv$ZgO{zqy*M@k>5KeYd~I563o@&W88T>1Y~ z{^}u|5N}O%iR#&lzxrg2|8~^siCQ0!cO&U%9hUY^`e$+EcZBS$+F109Nq?fu{~prc zI0$;#-+@Cg^XRjNV6TGy5KghdIeAm!pg+?3K2rK9_VNQrZ+-IKr*1D1%`p*7Xdt11 zga#5CNN6CTfrJJU8c1j$p@D=35*kQoAfbVT1_snXto5JiFJk@TH@(r98LTm z|1EC(cV7Vh$A66*zmoVaD{lPbiGS}KapM;f{||4)jh{pOU%nkTelqdL#9!Wra16FJ zH-33;BL3;|%i|;d`q$%@U+~`$zdnn||MB?iYuEF@U$Q@LdG03u%mZ=b^Y0g1TVCsf zKVSn%AS5)9&_F^12@NDPkkCLv0|^ZzG?36hLIVj6Bs7rFz<-nm_;GgP`k&Q6-uR>z z?q)tXPQrEt^Ayy%AIy;HI-EB)JnW4KcSeK{Muv};^qmT7zCFjtc&~z;3g#);Jwc@_ zsOdD!I98^2WJ}niV3~p%F98!8NN6B_4Rrj{CHzGE6#vM0t+%RSMe{k+SJc#1)HYQDQKy}G_LMw^&cd&vevP->H>Fy#UsY3E zWln0GVb<2v;h}PdS>D)K)!?hCuQSUgHJ)OwDhEcTQBm$~G*6smE?81jWKN!Jf>9~s zN^2TRSJgCERhqdB+H(J^<(*=zFq(~XjOl=@jYh*~G#FJzxv>WK1{8gYP?W78qb5w- zhQSkwSaWq*} z$D76B<3H|W;pNcsnks&%^5zebUdz>@=ygA) z;}1sg)$(>n#1B^P1pa@H23k;*k@%VT@uKZ;%*@Ngk7?$B%w#IDW)w!EZ8ttvDbPAnbY>ai2v@I(}oBf&t-l2s7;CVDRZr z`cD%=ljc*nT)e=CKOD#MA`UM?Cl2+fc}MD&xF&wofg8UT z`~*KHL?WArQ&(wGeZ`eJ0GNXx>3Wt(Kjuh^>yg>G`H zYWNT?Q~3=>-@5)Pf30&uy8@qDgv}`YN(*Ye4fW0IRFbeK=9jnp$m+)(Cw;8^JL9C+ za%-q{)fFeb*4OJ1`Z|Cx`&M3>C!b48e4OUm7spd<=Vg~1nZCS=p7PK>YrB$!8)yd{ zh42Bu<$%1L^2nIjck*NX=l>>2&@Bd}yc+>cMdsuet3KS99$EQH;-rt2e^;FJsz^4_ zW$TWUzO(TaJ2l1PkStL;EzUlBf?vw@Go6fUDe>wAKOP3el07GOn>c) zUd!WoA|yZCM=io#fV>8yKiw}#%20orclnXY>sIty-<3~>RnV{GASd z9CJK}@I8viS$>^=?o;9U=OJuH!H?Dc+*cf#K1$-GkClH{ob;+lHqg50j+0*N>xBq? z^&sqyuCF!adXk28jwhI>xAe&L)eb(-9h~Sdym8Xo z8LJ1Ke~Y5m^-=qDxc&MN9%_HcJaT>)&hHF_%?KG7EM2_DQM-od59rTI%Hz|IVrc_i zzA{Cx%eOZ|o^FJPQodO78Y_=X-V8;r<@G%iuD|sN4@F+h@7)M~A0u3*w5D~&U}X7p zd+RyE@*RwmUd!9w9bW#e2%Ayl)%Zof5654OaIF5BnCth+{=6NK{dpH)H2lc^mUTe; zJXmpL^=(v2ddkoKKKEHE&t|}55#9#4RaK0$evs7frS-A=58?VKL)cW5PJX3x%GDbP znW*c#TglgNW>FF~@18j6wY=5Ohs*0l*i`&APX;x9X9WJX0q`^a7|uTn;b`@(`L{>l zZ;gQ;OMe-wj?6yHIO(;##tY%)OGP+Z`Q{ii@Mf_D?-J|rez8HkSu~A#c#l|%H;j$Y zc`n{R=Hm_IslY2ne1*Vm1pX?#jWms=h-);OKv|2>BE&Trm58fH=xqF(f_zs1YYy%; zMjhyD1x6LZ&3N)5wiZ91VNZ%xJx2rcjm5@XW1&$1coCp!6dCi8>ta035itvmB`6QE z3XK!{u;_R|*2Bi}MvDunH>rIW8h)55<1>zy@azc^Ml#BMQ1baGTc%G`FkR8d%V%{} zT~$L(h0VUH?#jCQtLx0FhK71he7C85=48oy_GL(Tz6!^iPffjihpscyVN*ui`RVlK zKa=IVL+NRw%I^_X&WDeYa`dOC#&wOpsx_LUg#T)LlW)*zhpWQ{ixK))%PZgaJ0^HB zx-H!1>QP5vuv@c zz2II0S0?av+YRt9O?I0Z$S$MXNWvb^7j3k!J-_oJ12^G9>{)8*o*Y9^x$lbs}$tOu|E$hvr5>D^lb6^uhaU}(9j}O zz5D9x&D#39(AcW7>Z+!y^A?|P_DPZXIQ!|yp5;hwfjKzsp%9iNM-M~o(VQFx?$eyu zv3oVyXARWP47Q%g)!BOM;B#y7PmXzHo@`%{S0r7ehdD2TAQHcC9fo?c2vQOJ*N!Kf zML)C#9;YF$*{1>g@bPuu@;dz&=gRSo54CQb_L>-f4Ltrj(>PPB?uZ~3_0MXo@0V;-&9xG zSW|bU5gA^D$l2g05<#!wocgBPO0%xsXI9`d17DR{Ra?b@?TM;#MLuUr>{Yept2rB5 zTVIR8ZwL}K#0ULa!#cCFsiE9C&{%I&nJPS}%!Yuh<;zp~ zVVw;=-7qSvRyM6Jt*Kj8FPZY4F|UmEQck_Dy5&X9LGJUp3E>WbDc?g@<2e_wB9X?t}ks)MThnu(UbJ0f1EC*a^TpzW$UV!hsrFm=sK*M$u6 ze$cs16yZzUjMZ1w(@z)hIrqxC1>d{*7w`YPcxLghuG+P4;~STprE$J|;R6jt-t%YQ zaQNCam5*+>hnHWQIP%p|C!Br3#=Fw~u>NZc%QgPQUw_ZK@}BlNx0fwy-(Iut3>}}| zamun^m1NJoZt43qTd(@$w>o~$f=$=%diqlL&mX+^{U_dhj-R86tF+~mv(`>{YQeWZ zytea>!aQ4^-Dy8qx3_fR{JW1ITk+EaS8UVxm+i|sG&&O+Ix0Y`E0lUhMT@~c4_fO9lz<153g8t$K~@Ld1c<% z;m0ke+Y#56hkw3({D`fdyN=zxZvLO%=GKm|>tE5|Q-J@}{{GYYo~>-dk@cTmMXy(X zbsOtZ@%p#;s+xuaW#GZ5b3pCEfI3*_=6GgI=}8A=BMecA<}EP@-~L+QO9>g z#OwT8RQyo&yLE{4TCN^NAKBhYHifriEpJ{#{9xry;PgoJi^iPCw?;0%N+P(KRd#@r8(t|++U~1BPISL(_fjQ*YbFJ zLh_G-e6!?@@%#^6UJ&Uk%Uy1%%Bg_>ucXbAiM0WJch~^kFJ`EsyWDaCz1vygZ6LDk>(3 zC2!Xe%G(_wulahoytxPuMP6P0jtGADAY2xu{KRL@Eq|5m`zAoP?_Ge=+IM98ql~P- z?ynzN{q-n%%ER`5#v4+eEr8tL`Y7O$>~CFRh3mHxVH13LMYHDv5%}*8fIoeIIREny zHU;tZGe-56P?R%4@}v^6U#17BFp9eZ!h^AKopK{;cLR8_KUXuCA%{ zRU@sss%CXH(s()FCu_bMGCd?;^!L$v{8!x@8ozLU(u}Z42DoTn%T(STm3MKuSG){u zM;c{%VXGYfEygqHyH%JkQW)N=!g&0*x;R(j)uZGa=zXtot1PD;mmPf|q&M<99^no$ z#6`VPH=N@|(;5ik)Z7R$(hC5XlkN;LzDbcZ zb*su7#C8%9m4iF&#=QN==2Llb(w7#MH`P_(i~uDN>yz`4jyUNRnGGmAuTDj;+sPSk zhqsgI2zw=}D6e`P5O6)Eyf%bJc{A`Ux#P(6RTd|`F3+}z@^m3=DzUT<7(A@Lle%K8 z{2of8w3I5;#CfQn^7*a$@Yp%E@?54m92u*1{b@jtvvM5_58e~~eCBO(wa+N|QS@{N z3t4bJ;q~Xqz#!<+n8aw#US`inDNEfUg&e@K1lO6Cd`ez+aDlCiiPHeO6-eVZX(6plK`gITGgeequ2@@v?c=qLD=Hd%r7LSIS2R}Dt|~oedTIHZ zN*oi6*cFWp6)Vbp^>tOvHNGhz?RiN0i-Ql!dhy;R!zJI7(0jLp?F#Ny@UVg|RboQt z58rWBTxpg!a08<0tFAKF;zO?Tl{kF(6hU!{d3AZCSyA86(B$=1RZdZCjKvYCrjY~G??_%*Hp7TJ{h%1z%oZ8qyCw_5UsrS z40Bz5li3L6V*lrw^2RGgtziRcLxs>G>riAV3c(PD{?H|A6}v=N*7!&R_Vel+%&O+{ zHQw5)8KyZZZDd7td4pMD&N6dr%*ke6^SpVd&K#9Cry8H~QHO#rjy8fUTCR1d<=R@Y z3AG%Gs6a81-BqZE8s9pWgh5#wRT`jPgxrfN++HlK!>n${m2V|i`J zEQuo&wz3Ly4v6DZ8nP`+5Qgzp=3NT)gITm}j3w$j<%Lbq^O`DiPIVR9#aw>1ECrF~ zYAnQe2mB_F-}Lc|%Q+Y^SD|fRiRZa!`~2>_0pEy^GSU#U1i1PeA5(Y)6CQ)#m-BnT za`6S{LhNy!1KeWp;Wvln;(Jxy&}4pR0w-FI^MK8-&6|)Xr8(J{1pX%Wkehho1WlJ~ z9!?8)_ANTTxW2LpjeUXcc2NE^7l#xu52uVbLCYsksx;5UdE|!FtL+cWx+++W{>WSV z4&*y&%GBj1U=yU^cNx=+snAL#WR-)Vs~cgFb-q;vz;RyMA61oWr=)95*$C{Zs(~J1 zSn^Xg;9w_) z*CAbmc?R9-I5)KG`V#$}HZ9w1kXg#G78gK=f=A<-?{{#u1cN+n^WawqgKB5xO0>T^ z(cg#00>xO_FTrUIv&DH4d9eFJF$N+Nrt$2Eg(|HutW}`D0Pa%UOK=K=Y%?KR(l4x9 zeG&G?f1zsK+~#F6d@(ofFU6lAsFG1cBOZp7ja5JtVSQVKGbQH1n=C^f3*oU=;HloY zT8v_t-vWgAb|Tu@7(DeNbT-B!_%r>b@e0Su7>hv76fbzNr1Fv{a#SLo-%1yPkDS5j z(nab_%Nr}cq;NL%fMVC6zpUbMu!^G`-*EOe3_q^rI4?bibH;rd&+a5?H=hQt1doIU z5*kQo;NM9D3l|kGI=X9d{XbX!YW9P7xVm24H{me*$(Vmn1}A}dn|$Ga&1J;}@^l{k zM{%ZjD_5#Q9uLT0pAQyPdICrdQ0Jj*n9=V zG7#TP8fK*aJc(;-n!FDrz6l(Cv z{|g%MMzq6EJN$n^hlw%{UIVUEl8o`=(!H+HE@LznuWWb%{;tQu;a*p6l5zCHj1bg# znb;RUF3IZ}?lOjxPQ#OvjP$9az1cGXZy4?EdBA13mnIn(D$zKGG5_0T6kwAApT}*M z37-LEm?2ljFe79381Lv3nU;MfWVvCux1$rhWR#J8KKSpG{5zK=8DCWKUDthG|jDsqzuJeo*RK zso#jEe=V;w|GY~=`5#374fx|(%Y>>9r1sQIW+1Yv7d8&A26)GeFN7;;jv`hY7816ZgH2lg9lyq z_e9S4EB+pefAknx-r!x5X2$nqn6$ix0hdol0WybT6}||N*HwU&VT%fjNZhg=?Su8s zGV_WRFX{?5Vz*_jQ?~sEw0)mUhoL9aH{y4O(KD)}q~AMGp1e;o2VDakl$ z>ZnkiX}WZmkxsrktRd+rrN8*oi8KWqlrdRy4 zbKvuCND_X?Lw%n$%s9$5!59JD4%9;j;zawOn&izsZJ03(mF{3YY) z`m$#XGsYs0`Pp&PhZ$pB#~LXru8VkQCmCZ7rHH%{ZDfBo$;db~G8B$Xj||Vk-@HCF zHiSP=_;X3dxI?2u_>o~D<2YMJQI=?N4mtQ@(^-zF;mCZ19*?*6_yTz7`o&{hm#F7) zsBdj28tVGj?Lo(Dd(cp)YkVEAp{9!$YPv|M>@M5k(=#rWZJR#K4WAnAVl02eB&@~X z&f?`3cX_J-Ep3)p&9TxC-P|O@_X3jc=PLX#AoC*)ueE^W_|1s?Bm2fk|D$Es_2uka zmJ80X2S?wo<;(tjsGZQKcU+cav?_ec#YYWQv;dS=lplYqikDm5>3J2>ZZ$( zx2JCzS{!9KN0s5k4oR5vU0DX=@VZfz;n)3?LCa&8LEED)gSK~;h5kHNx{lX6&``Gr zrZ2=;<#VCFn*El!LY9$w=zPaz{Bpc3L-0?sOl^OaVTK}YZ7gi$c=*UnI79L(aq#Lo zBz5oxAfLv7H*=Z;$g5rH?%o%ry*vlV^wVFGeg1kthVK9*#Rq`AM!YQLnGDGI9e})^ zQSma=SJp_`2MjBHW*1RkC)s109+VL-LR{2Yk1EfwcV#(e08(xrAg{;N`0MZcMbJ3z zEh+cQfW-Smg-`EQ&AuHq->3VUtTaE{vde?YU9pkJ>K3YB!TON*V)gMC>=Zd8MoHEmQ(vX(!)>nDX%kr9Q+u@yQ3bI zKHXg!lJ_9mohM7mH|cGe$#lSe<-GyIAC!l5 z*@dyjCN+OLUTra&0T@$m@>{6nC5*ITov((<_Uv*vZPmdidk*B=Cw)vOfm`<1Z)vQdTx)qWQ`bgE_3Q0rFf(kbIqN8PA&r>tcw!)0xOthcKE zAngVz>*oObmDQPtmPtb`8|Up)L-Y2r7{4ELNY-a3WZ=a-TF{ouRol3a6Bt}i0S=UZ z_Egz6I^dJtf(pJ>*R7TX?J;ZW(IMN^deZ3%-)U=Q6(QMrAlnYrMrs>mCT)QI%65aQ zM`xSR`Re-8P|Kmyby)jD9oFTFz#BVtn2~wiSZ_v|9P6|@WG{j2f69=uE>(+Q-v*2+ zyUtVRHB=e3%&h+gRsRiYPL1{~Y@D|3EDOV=>n}dij|>#n<%ob{4t0ZE7wdB9i?yqD zBWqgTT>$*uvrpQETSkk!_pQ*};g3q!RmBqFAwcpY4zE@~KHaLqjEkH*XnC?P<`{N` z7{hX&Q&O2^yezX1ld((jd_(aZ(<|47&Qfp*U<&fNMuoo%$bBw*RQPScXk{J=oKg5u z-i~McmV5jGmwo2S4^`XU!cC#LW?m}k8Uaapy9(b6$m@MTj(MhDCih5Q3drzlfRy#P z6^1xhr4W$eg@8;i1LU<%g}-~b+_Uo{U@GF1u8`pjK;oYO$ZLiQZvkYvey+khRr+L< zg=L)s80+dYo^Y(Qk>-CpUD(Y^xehMoIIs_1PCwS6;#j{Ku#fxH9O}IJ0@YX!sO!Fu z{JPEPwyeX>Hak_dS;AQ9I$rZ}!UoXMM{sRd-;0zzK+*;%J+;t zNAedss**ZlncdLGKU91Dozll^{piEVr^UgiXTQt%FKpB%&jlAqy;cA+%ur0dYB@*C zcPpaa;3Fw#r-OeNY_d(Yuas4ie*s`j{)(Udt|l_<^vP4! zU(;%t{{w(A^VjvD_}cZ#de`-hF@ZC`_En*JG0|uJM2+qKS}pTCv8JE=v>r92UGUwL zf?_sj04dqkv50~+gD%YKmmDl}%G0PR%7wWKvdd#E4+Rn8;bUY#CvDc5C@f=f~ zmSjwrI<7Co`f|q9F_lWR*H8#SYBkzp~m9fx-$vpKiT5_4PjGuAap z#)H789!%)yv#Kr*q)Ht0T9qZ;o=bs(qI(+1M_z>2&wH~zWx*fPiMZCAr z_Nt+7KN@Pg)po4oBkfhEYy8M`O&2eWq}O33zjOV&XLG1M9~3)+`&t{VmOo+=*5a&9 zUT$%hxA7l@#&EYCD{X(z`O@BB0_4+QRrpOnwhhwonhZ#e1u85eadWm0#zl_vwCsA0 z>1@Z#6%%K>((BWa>)+n54RZbazxtNn_%Kxdm(*P6{rcaRNtxeWF3Uh1 zUahJO_xDo2FUo0fV{pB_^FnUcIBKS(_T1k zBD}$2XF6Wnmxe0dx&B?YC4Bw62X>#V)}}75l;wC6P?saJP9oR8JHd|^@iUY?O;h%? zRE0HcQge>;t7SgbfPA_EkX-Hqq<;UR(%%Bqav-{oZAZ%1C(QEG*J!BQt7>O`+UY>! z4XsxVHD3)?ymQ{wP?xcf{7yOH7wrB#R{pwQ*Xi0XMeuR1 z|9J!9>wg`P@ix^S0!32BhXMPQu>rDC2ii6lM%ZSoI+zMNr;H41*%frkYJNRj)^5m} zs`{w^S|DW|anS&>I`h!=rlGbE&WmEKReB)M}>h>-kz_yw(}%sq2C4HZooFQ_#5v*5N3hE~hB4q_s- z_yWKYNMEhO0YF`Ult*79@u1hh?#7wAyxih0Z$AT_9;>~k{M;E+WI12XljR(Lw)Au7 z0W#%6KwdWkQpSCN{7(2o6>gm>W&I@}&lY}Ng%1G|-fdY)jP}9H>5E%b9P76e^V#=Q z+dVKzmNRv7sP6lePq$SKbsN%cF|v*6c#WslTAXV~oep_=AkT|xTz4(x;B{j^@;LeQ zIQX=H&$DVRqb^7CX$90a-KShyKJ9B1bgs!{v`bx*M;Uxxnc}}GU-I7p7?Z!&Lxx;i z(!S5h-|gVv4*u0@-1(1lCI7Q$^uu4ve|(ZLa%xIwUZH)ehO8gw8iBLE7_a$gJ!m=| zuloiaKM>S(8c*8|!{g8goHWcB{ptws@G?==a(={qGDq!c*6|a8cb5Zi4EFbVN0+%Y zB>r8DQG9fMk&yB)93|gLFO+Lw9b1z`y>+W`@cV$<)L8I`o1~9=5RlhyK-RI-e!`wv zz6Vvm5B{Pb2h5(GY-GDmF~)hvinS3F?Cf=|7&?tyhkD_b&^pwKpSX-?lz(0M4Jq5A z_9(I`Jv-;kZj?jI#WMAGiE#iNArZdE+83*>u# zuFV;DBpF{)1z^2&KraPq-1gM1QZGG#Oe31Ju0+^r|5IWAx}9oymHa}k2gCPy>oJ;h zKSnp?;l=#CkY%2d<(^xlEYAYQltt$m2{YBYzt)wOQHOOIC@XDlj0x&Pm(h)~2)f~7Z%m1x1D-2=xRJg%)kvQ{ zf^&?r6H}6m6d!u&`(4Iy_;vg(2`A6ta)ezYh8ZJf5A!DF8ODiYl8rI%CL1Z>(GHxO z@q3Om<$_#IZfBg5oj(;#anUmGr-`)RQ#=*>G_8Fkjq$w-!3JCGdz;@0~vIE-1#$?@i2Y|Q6GdZRUeUf z|3q3QcxK=){19rq>@SWszF7GO6zzG}n1iEwQoDzDL8=ng1?6f#3gtR#IQO9+Ozj!o zo!pgFaw6;4H^vxMIoe2>KFTP2*k$4 z+l9k|!ugMkz}pO*U*gvZJVHBv)h=B3k2dc2O)$PY{TTT1EF-OFboa=v5oNAGEDWbAbr>+rk#@6Z+NyRt-t??Bu(9k=)*gW(!JHVx99 ze6uH}7-`d=g^m5r-YZ{*CMfODFY46|yR>z6l*>2@IvdHd-4)VRO1H~s!mkH9AhdNr z8@vwmqmqqL(}&CNZ=BCe2fxIX&_F^12@U-Jrh!XeIpt!?ocw|On?aND%-`nslMM4P z&Mm?3D!lW(8gqi-nDhDYTY)+1qgZpB0O&^iXYji&!!Z7VwVp#5m*0lxF9PotzAHwY z3A{V-`xt4dh&v1LD9rD+BklXZ{T||$V651HbG;Wrb%?;veH zej~u^DTK2i^9lH!g5Np#72r1yzeV_!;#ZB|RrpKICg3*_zti!XiQk3zEyZsYe(UfH;CCy2cj9+9em}+!y#>~? zhhZHj1#31Vunsd4Ybm4gcLvjpql|Q%xjohxXN)(FHZqL~#xeLCP}%r9O~>KPq0bm6 z7!wT>z2Hg4$wrPb$%s6q2!|gU;xIjV#|e`5!&3gagGLz?&&Is+$|`XysH-gD(XKkM z$XD+*=HVpV#_Fm{ut+Tfefrc4>VrBJrmkd`0!E=irdll{izFLAyA3 zmV$;*o#Ep0W}*wW5iC?3vR-s$4Q^E85-*SZQ$Wgs`cGU54J0&hq#Ee>t~}pW^O^Gb zf~EKyBlQiX6=-v-aZ0nh(O2nq>vRpH(Uo3MRae#U|JpnM_$I4+kDvY!D?`mjH+vm= zGwnvN7bHNh>$FIK0>u@KSfFFoBs6IoP1}bgg`()9qV_6qqi|=Zz)~nQK!Mzi%}x;m zg6n3%h@Ez>xTu|Wu3&WC>{aIO`4CC2#PJBe5tYS2(kI_KX=NB}+>dPc|>IE^xV%@mn-ys`*?>9=&Py zjK$|JELp@9^P=2OD|zm@$7iUA=XU4nw^jQ4C!>9?e6n}1ReoKEX)$H%FDHKIUzIv` zi}6Hx#~=S#+mNhJz77AW2L3K}?iP)t{v#p~8_)On9R7y&48QLP3()?gT2EF<8^GK@l!~3Su4txOKc|D)0#lxv)rA&A;tU(2me~wabpy-R# zHCL%>wCNS{!>wq{OQ|Xhzfj0;Pm#w2XQD9a7PtW-;b;s0Jrr+(k0J*?3_o)db3obv=b|yR(*n03A9*4$Yq3&A zq??xT?4^}FJkwyX^V}uslJem?R8KhpxEZab??Lzm>cy*NvbHgtyk8oUen=%XL5LlLP9Zbk*92jRQu44#dw)eYzf=i1;dE2poO8Qkk4c9V!AjId9zR@%O34$DG}KL=7|g1s4b)|V(@>xE7uKPTRC9B(hOX44y(Acz_*Ht(Pq*ROFo0$UG>cShm!~ylaK-=I+)PIb+;FUhEU%Uz4g)Gm~7x+3d;n_4@%|-1$ zCJyj0%05b);bkj0_j%5R9@Ijf06d1q(asngzmm1_II)FZ6u|r8GpLn3QFuumF_Co% zmZ4m{2A@TBmA;x1iN{8>~X(I9G$Oqo~AZHSZ&66Y;me|3syf6NYc2 z5V2Kv@i!I}mG?F1LD`3i6+D58@NqcjZpN29HuwPQ#0TIB%yWyZ?{ttgXnG#Elnv?l^jBL{I)Ym}Od za%i&|E=O&&(+~HeeEJ)Kr;!7%?k6@VmvIcj<7gx4G58@mLafvStof*ccpBkE6qK=m zRY=h`KYRvd)8;6=@IlsRyb;zQKY0RhQ9bdJae=%4op_Q*J;dLsP&akiU>uF34aSFg zuS8?W6M)a7B76)^T1VUHV*nmR-S{YcVLff5F2jE)bv-H|zXg6NKs-se!IDRa9X<$` zKgzh1Ck)?0#rQZpzJYvF&PLvs|C9F%@!#edHx!aGq4hD=AJW4xwShRwbp+k0h4%Yl zJ1UTP!U^Bu7~TxmqD}Z9>=j9zALrSJ?_~K1)9;zpX7U)9bWPO88C`fxEun)PZ%kUG%9YsmE!8cG7*OB3;#2jTw%wYpM zK>jf7LEU)u0`WoniKhkDqXyoOg79akpK*!9FSpZQ@|$5T>cR)$QAy|A82tP(`og&; zSa6(rxuycJ7vLMm#_cc$P_HuP^$KxAYb9>59%W11;3cn;PCL!;0n|?WgRmPNpkJz!>jibwUmJWG zb&)3y3w}=dcpDtuMLXIUYuNlN;z0h`J3MFIBXgQ^e$DR!BNJYOU+yLT#3Tmioua?g zrNKrNW^RPx)2M~=Bk;J!&CO5FSTOCZ7%&c0Ttl=@apqZR1w|`Poq-Flfgai$c?waQ9NVd!yDiaP%AzHFXG;-HoVP{ zqMky|dgP+YI=6Ew)f})gfgRK+rJ_z4K*?7ZDt~+#q_5@%Q?Z?O9)w5_DbIbzoLoN6K+>F-9+=F}2YJ3>}4wZ7Q zp@6YK1*99{0Jyc->mn81T5LOY}I6I4pS40Fhj z#*uD;-$I#`6MzSigSw(HWiE9|emEbsNE_g06y@A7JcZm6t3uX2G=X#tK0J^6(C{&M z%?-?TsS7@U`td>d#MfD)BoDlZ=aS-hBYYo~;!X3JBMVqJ@EV+PBXf?r{P6oo;UjR1 zg=H@q44A_Mu2rL2>;5Ffk+PP>)4%2@beE9xXY3O_;nNjF$i z)R#~f<(r^}iiooxejgR!BXEa}@uIF6JcYW+ABR`iX|uEku31L>B@eu&j6TpW3*3Rm zNFU)#C{yAC-$!RCM>$AyQZMJ);BwR}{e_R9K70_KK)F&r{9HNL3*HEQ6|@r{g@34I zj^ZsY+JlN|e-L({7=4e!?Ay4O>AM;F&=HxdLewd3gPFH;jIlGpc_^233v{7z^hJYB z$Sv`Kxo$k|w81)5D(#2+kpmxv8CAT-8{s0f5wF3gP#0~8LU%Roi_vEICOSYKRg?IC@jmhj$WB(oJ`#s9*UR3n}Lwp5wWfv5;87Z=yc(XmATU zLYZNB7;VBw;U}mGZ@7=^6!j7Z3$%-ubKw@0_Z!ZIuOl-)4liFrd+;W>{C@5U#{1z( zR3drcXX?2&@kUtp@61cd1KUvqAA{$wW1Yks;KQg3AB5x9(|5cHdQmUl51&JQ_$a(T zKpgM^7)9n@%7pcg&^CMk=4_xnc;jQl6Z!EGnAX5tJxw|+L*wv%*nu+fak%(9Tqmc9 z1AHAd;nm|QYBGvYjv1DsbnkI^9zR^OgEru!aBMU2#G9ZU1@Ri(hWz+2d;^8> zaX2Hywagr_!2M_fJ_6rBxiXjF%$=-bk_WCv1^58Gco*v-p5Mk%HOPkN_c_!CRDut~ zNA?gqd=QrIWgPJ~xB*q-hu?=U_vil}mAuEjY4Bs@#t(m{K%O;Nj>4QPyaye@55M<+ z_;UfnpBa#62{OWr3uOu~L`HmqcoW_THy|@!?vsBFt-;4&=YP?E@$kX#vDQf*_$+F` z^BeJM<@cFmct1RZRGe{v|Gc01gCBm+zdQ?Y_y?>TZb1$BFg%Ky@Ur(++Pkc|^53W6 zRJ2A?{=cT6Z9R*K6RTq7&|C?)wSS-vR~Z+yioS6YsU*^-?}cmQ1-6t z#S3Nsx-)p8>|r;CdWEtt-8j5(A)0`fJ+$6Ix%{^|+0W{dQ_L&8>@_tPW%Hd>_DWod zw3mnp+=jBE^cTL2irVQfOgqiFq|0w;Ohxtb_ZBGop|>ARO)!Y>!plCTZ=u5D)Cc#`2e3lrFhxnwGRc3F}@$jyr9iLWqv~0vpDkw?w^ISUvV~G_#Kpsm%XxOpX}~7 z#tX_`*?oAS?3bPXlhg$7z-QuRpYB&s9(iQ{Y1w=F2w7HW~dKR_>9%NWUXuG>(_uc-^ZjQo6OjKQ?ua}AO%&za9d{d`Z9=fdTg z@ZdYC3CeTfVZ2bD4Ugc3@_cv{FZ|+%Tx)otJSQH<3*}jHMO{L9Ufh5e$}`|byzm2L z!prlr529AuBhR)ziL!XFiNLqe5k9BMenql}P&=Pdg%;E$pI6}q)b}Q97kmyi@R?Tj zJ@_pu;9S{@X8~&EbF%Dda}cfO^Il?KkB=GOH;4n2JvlNdM=1MoWaEXaP_C2@WgnPs zK9>q*FPJ{O@X9lcFP}?=OHn3X_M!P9$|H~Luksc;Lb_1)SLwhDWsj9^yl_40!^`ug z@~mkC@7+Rqrn3nzEI_$@evoGfH=-_iuZPbe3tpbb`wa^49w*O&$#Y&t)@q?VTUCe` z%5zn5yzmaxkC$hmT9Ab`FbrQpb$EI1=Q5S5Rn8O+TaG% zfDgi#Q3xM{qyLHHjHwacfGY7e_^^1cksy2lmEdFW{7X5GH^A$VMeB&}R4{ z%EPOF<=FsKh&RC{D8{(h;Dc!O3ycwb67~I@ISk)H>9ju%FPT99@kTfon#!9qlopgUe)l9=FqGCoTJQ$;!x(mMKWQ=2g65%ocUaPtMp-$thSCH9zOUu03T{*caqPEF@&odr7cbmr(Br*n+X zPl}V}#dSt?hIKxwQ`5OXXRgjsIwLnH%h{x}PG_;sYjs|(bD>`UKQfk5_wj|vb~os} zL+3|2U(@-n&U$_PH|pG>^M^Xyb-toArt@8$XLNp!>qY+M=*-tys?(vfTIXt=59!>h zvqk4Yo$Web)A_c}k93aG`;n>hDxC#7OLZn1_rK`>*58v?ir8d=YiGi78wPtJ$GcRk;kR^jzo zJ^NZ6?Cf};ew!k>*%N_WHL2pOcwwzscAK-zXRWRFILp*$673Fk?^&sm z*Xy(Uc=A~es(a3P)Tx@zN|!#!Sx&Ve*=AR@gwHBZ*YeE6U|O|vr8=EBv!ascqooR~ zq&;+2X>M2b?R2DimD+q(y4UHv-RgB!X>O-_?5rcpYn}968`yzDefu0o9km|1#r_oh zR%;^4v{7P^s7S3(jK^7n$M0SwN29#l=^>lO9mB&@YO51zA0%c7Gp4r8SL<;m`t4%h zi&qnQ%j}w0x;W78!$YabQ0u30S9-D>yL2y6$g*0gShfCXx)iC#rAynq$%n+t+%;vl z4+VTwN<|{_*0M?`>8@&qrn=0@Q}ABq>N-_1Fi9CU?gk!uot(7l;=%LXb}v&=!p_`f znki)-IF`Ij2uyOeFjI!gks(#j@VdI8SP1o{dt4098RKG zvr1hsm_ph7u>9y@uemJLsKM7xH?iPixF8W#yQUFl=8jCqM3lySI=#wX$HgF#^>Wws zr;j^4RB`^<=~}JZZS^Kbh8tb0aJvg!9ximQxh3pCGkf8J*+o;QTrJzJsLAP8 zjhRr!ZX#;Anm&Ds`5QAVvuBi8ziwX2Q*5M6C8b1?NHC-^LM!ZUmt2mrtqRw-QePWY z<*X{xR`KN1D5BzaGHWV8pH7jS=l{vNK zOn)%ND#?l6S_9D3xL0y$T1lDao0C}5)VNfuy~o{GhlTv zXJ{>Lt+u>Z`SgVE zO8s1G)x+wkW-56HD^jYQd1tZ~F^Dc-a%Tjo$y_LNay!Q+fBG2n;wWt|kl4}E#JgDX z)Wr0iXCr=qx2jv74HT>l~V^XKH?S@Y)cX_-%v-Qtq zo+%d-|6638M-c52PQAt{W@>tfQf~BUjI5Oj^yiC7M)`Gemn`FLC^6XvJ4ZQh$PunP zwl_+yV1oxOvu74a)ZUaFHMKr#O}W)$udZ-@D#r?mjLTu>DzUru!-=RTmV%?4&o&>) z9Y%OB88}_amtlF0<4Yu>vW3Yxj$bm$$_4MR-d5vcb@;sg%DKGO?p9;sUoiquj~mdj`*M4nNAV_tNIq zx_z#ht9;JlnkDSUHLKF@VRQy;an0ay^)M~e*P!vp+(-Q?)oSyO;4vXPdRQvM=(IaXR3A%fa-W-GJ`T)a z-!HdQ++X{`J92y^0s|3{|3>oIq0kt^2tA3$#(GRcX%TP;`9HO+%rYrk^k%vB!5rCbdK~3(&f7$pSbO5 z>Mm~A8u|B^BalD6uF7p(!8a+sR!bXF~MuQF0VwRhV1T2J-0UcRkX*}W61TxFgbZ%w&xVp&bqwRUgS z)hi~CH}WRqD(Cwl8@dhEMo~s%KHt2(zIlAK)=RtMuaq|Rio|)G>2>n)$mLt5zb3`Q zrzdK0IxHU73f_$>oZi8M!w=7{<5c;MRpeaZbQ|6B|I^0Xz4NM9)ZFg$j5pT0W|YYn zhiT)>?QXAgym8WCIr)?Rd@cEt&T3Qsq`}T{dj6z=xbfmI56#HYkqG?%i-0*b@msZq z#;itTV@_jUV_{=SV`XDqV|`I9mG3?3NQ@JO!C$gt=PuAX&z1rUTy={9l_8Ir(?W^0@ zx-Yt~XCGm&6EmRrOLUkcO zH3veSp;)LV6c6=>)Xt2Ze5p~{l%Kb&j<$qoOWy9n-L1Q0yR%wyTJl1z1+PO7rn`v9&w)$;t+hW`Lx8*g}H3gbNi8h(Hmu%13S-CT`vu9_{ zuF74NyF-*%(vm|wC6+yVbM~nK_gPYI4{gaHXLM)AuB=@-yP}Lpo<0H+eYH1ZZz9e? z?iEeMqT#I3j5bOyO`*JyInk%Q-DC=LA0`Mi2b;r0CQ4MYcIPB|SF*d39BGNq2P&8s ZtP8dV6|=#(l@mt(jYME10{v2.0 512 false + Vocaluxe.MainProgram + Vocaluxe.ico + publish\ true Disk @@ -27,9 +30,6 @@ 1.0.0.%2a false true - Vocaluxe.MainProgram - Vocaluxe.ico - x86 @@ -63,6 +63,7 @@ prompt 4 Off + ExtendedCorrectnessRules.ruleset x64 diff --git a/gstreamerhelper/VocaluxeClock.cpp b/gstreamerhelper/VocaluxeClock.cpp index cfe7e677..ba84cfd0 100644 --- a/gstreamerhelper/VocaluxeClock.cpp +++ b/gstreamerhelper/VocaluxeClock.cpp @@ -70,7 +70,7 @@ vocaluxe_clock_get_internal_time (GstClock * clock) _vocaluxeclock = GST_VOCALUXE_CLOCK_CAST (clock); - result = _vocaluxeclock->time * GST_SECOND; + result = (GstClockTime) _vocaluxeclock->time * GST_SECOND; return result; } From c3cac56e1a2974f394e87c8a51f23bea09ecd114 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 15 Mar 2013 16:15:34 +0100 Subject: [PATCH 13/31] Codestyle fixes (Codeanalysis) --- GstreamerHelper/GstreamerHelper.vcxproj | 1 + .../PartyModeChallenge/GlobalSuppressions.cs | Bin 0 -> 1466 bytes .../PartyModeChallenge/PartyModeChallenge.cs | 1 + .../PartyModeChallenge.csproj | 2 + .../GlobalSuppressions.cs | Bin 0 -> 1466 bytes .../PartyModeChallenge.cs | 1 + .../PartyModeChallengeMedley.csproj | 2 + .../PartyModeTicTacToe/GlobalSuppressions.cs | Bin 0 -> 1466 bytes .../PartyModeTicTacToe/PartyModeTicTacToe.cs | 1 + .../PartyModeTicTacToe.csproj | 2 + Vocaluxe/Base/CConfig.cs | 531 +++++++++--------- Vocaluxe/Base/CSongs.cs | 1 - Vocaluxe/GlobalSuppressions.cs | 13 + Vocaluxe/Lib/Input/CHIDAPI.cs | 2 +- Vocaluxe/Lib/Sound/CGstreamerAudio.cs | 3 +- Vocaluxe/Lib/Sound/COpenALPlay.cs | 16 +- Vocaluxe/Lib/Sound/CPortAudioPlay.cs | 17 +- .../Lib/Sound/Decoder/CAudioDecoderFFmpeg.cs | 8 +- .../Sound/Gstreamer/CGstreamerAudioWrapper.cs | 10 +- Vocaluxe/Lib/Sound/Portaudio/PortAudio.cs | 2 +- Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs | 2 +- Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs | 8 +- Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs | 3 +- .../Video/Gstreamer/CGstreamerVideoWrapper.cs | 10 +- Vocaluxe/Lib/Webcam/CAForgeNet.cs | 9 +- VocaluxeLib/GlobalSuppressions.cs | 21 + VocaluxeLib/Menu/CXMLReader.cs | 6 +- VocaluxeLib/Menu/SingNotes/ISingNotes.cs | 2 +- 28 files changed, 385 insertions(+), 289 deletions(-) create mode 100644 PartyModes/PartyModeChallenge/GlobalSuppressions.cs create mode 100644 PartyModes/PartyModeChallengeMedley/GlobalSuppressions.cs create mode 100644 PartyModes/PartyModeTicTacToe/GlobalSuppressions.cs diff --git a/GstreamerHelper/GstreamerHelper.vcxproj b/GstreamerHelper/GstreamerHelper.vcxproj index 6ade9eb8..8e692fe5 100644 --- a/GstreamerHelper/GstreamerHelper.vcxproj +++ b/GstreamerHelper/GstreamerHelper.vcxproj @@ -77,6 +77,7 @@ ..\Output\x64\gstreamer\ $(MSBuildProjectDirectory)\x64\lib\glib-2.0\include;$(MSBuildProjectDirectory)\x64\include\gstreamer-1.0;$(MSBuildProjectDirectory)\x64\include\glib-2.0;$(MSBuildProjectDirectory)\x64\include;$(IncludePath) $(MSBuildProjectDirectory)\x64\lib;$(LibraryPath) + ..\CheckingRules.ruleset false diff --git a/PartyModes/PartyModeChallenge/GlobalSuppressions.cs b/PartyModes/PartyModeChallenge/GlobalSuppressions.cs new file mode 100644 index 0000000000000000000000000000000000000000..6ac755b1eda579925b0a414de4487f191d7daa51 GIT binary patch literal 1466 zcmaKsPjAye5XI+QiSJ}F3HBYDm0e;bOv0h~_k0_V z-`Q*TF8moW*S6U1l}})Ij>WD0Vz28q)Gl4Ix?*+g3|>&dRlinEYDe7mUqzDFjLZY*2Yv>8GpriVV~V!& zp8H=_P$uKPipZt2pIz}LUer+wcvr=gb#1>Li)zw1_9dJMpO}Z{C!a7!hH!YRYqJy%o|qKHm8I*^>6+pt~&1j zE|jm_8IV-BbRQGR?|?VAPuLvdKj1M9;wv#L(tU;kLk z=XxM^pK|%`l@qJ#S52Y!_?-GQ5?eL6HQO{@8g7+pEi8faRIv$?G{ID(6YLMosF!el z=3X>a0`CH^ilaNHnx?Ac#F*Gyd&Bzprompt 4 Off + ..\..\CheckingRules.ruleset AnyCPU @@ -110,6 +111,7 @@ Always + Always diff --git a/PartyModes/PartyModeChallengeMedley/GlobalSuppressions.cs b/PartyModes/PartyModeChallengeMedley/GlobalSuppressions.cs new file mode 100644 index 0000000000000000000000000000000000000000..6ac755b1eda579925b0a414de4487f191d7daa51 GIT binary patch literal 1466 zcmaKsPjAye5XI+QiSJ}F3HBYDm0e;bOv0h~_k0_V z-`Q*TF8moW*S6U1l}})Ij>WD0Vz28q)Gl4Ix?*+g3|>&dRlinEYDe7mUqzDFjLZY*2Yv>8GpriVV~V!& zp8H=_P$uKPipZt2pIz}LUer+wcvr=gb#1>Li)zw1_9dJMpO}Z{C!a7!hH!YRYqJy%o|qKHm8I*^>6+pt~&1j zE|jm_8IV-BbRQGR?|?VAPuLvdKj1M9;wv#L(tU;kLk z=XxM^pK|%`l@qJ#S52Y!_?-GQ5?eL6HQO{@8g7+pEi8faRIv$?G{ID(6YLMosF!el z=3X>a0`CH^ilaNHnx?Ac#F*Gyd&Bzprompt 4 Off + ..\..\CheckingRules.ruleset AnyCPU @@ -110,6 +111,7 @@ Always + Always diff --git a/PartyModes/PartyModeTicTacToe/GlobalSuppressions.cs b/PartyModes/PartyModeTicTacToe/GlobalSuppressions.cs new file mode 100644 index 0000000000000000000000000000000000000000..6ac755b1eda579925b0a414de4487f191d7daa51 GIT binary patch literal 1466 zcmaKsPjAye5XI+QiSJ}F3HBYDm0e;bOv0h~_k0_V z-`Q*TF8moW*S6U1l}})Ij>WD0Vz28q)Gl4Ix?*+g3|>&dRlinEYDe7mUqzDFjLZY*2Yv>8GpriVV~V!& zp8H=_P$uKPipZt2pIz}LUer+wcvr=gb#1>Li)zw1_9dJMpO}Z{C!a7!hH!YRYqJy%o|qKHm8I*^>6+pt~&1j zE|jm_8IV-BbRQGR?|?VAPuLvdKj1M9;wv#L(tU;kLk z=XxM^pK|%`l@qJ#S52Y!_?-GQ5?eL6HQO{@8g7+pEi8faRIv$?G{ID(6YLMosF!el z=3X>a0`CH^ilaNHnx?Ac#F*Gyd&Bzprompt 4 Off + ..\..\CheckingRules.ruleset AnyCPU @@ -107,6 +108,7 @@ + Always diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index bfeaa405..d3ce7901 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -279,276 +279,275 @@ namespace Vocaluxe.Base XmlWriter writer = null; try { - using (writer = XmlWriter.Create(CSettings.sFileConfig, _settings)) + writer = XmlWriter.Create(CSettings.sFileConfig, _settings); + writer.WriteStartDocument(); + writer.WriteStartElement("root"); + + #region Info + writer.WriteStartElement("Info"); + + writer.WriteElementString("Version", CSettings.GetFullVersionText()); + writer.WriteElementString("Time", System.DateTime.Now.ToString()); + writer.WriteElementString("Platform", System.Environment.OSVersion.Platform.ToString()); + writer.WriteElementString("OSVersion", System.Environment.OSVersion.ToString()); + writer.WriteElementString("ProcessorCount", System.Environment.ProcessorCount.ToString()); + + writer.WriteElementString("Screens", Screen.AllScreens.Length.ToString()); + writer.WriteElementString("PrimaryScreenResolution", Screen.PrimaryScreen.Bounds.Size.ToString()); + + writer.WriteElementString("Directory", System.Environment.CurrentDirectory.ToString()); + + writer.WriteEndElement(); + #endregion Info + + #region Debug + writer.WriteStartElement("Debug"); + + writer.WriteComment("DebugLevel: " + CHelper.ListStrings(Enum.GetNames(typeof(EDebugLevel)))); + writer.WriteElementString("DebugLevel", Enum.GetName(typeof(EDebugLevel), DebugLevel)); + + writer.WriteEndElement(); + #endregion Debug + + #region Graphics + writer.WriteStartElement("Graphics"); + + writer.WriteComment("Renderer: " + CHelper.ListStrings(Enum.GetNames(typeof(ERenderer)))); + writer.WriteElementString("Renderer", Enum.GetName(typeof(ERenderer), Renderer)); + + writer.WriteComment("TextureQuality: " + CHelper.ListStrings(Enum.GetNames(typeof(ETextureQuality)))); + writer.WriteElementString("TextureQuality", Enum.GetName(typeof(ETextureQuality), TextureQuality)); + + writer.WriteComment("CoverSize (pixels): 32, 64, 128, 256, 512, 1024 (default: 128)"); + writer.WriteElementString("CoverSize", CoverSize.ToString()); + + writer.WriteComment("Screen width and height (pixels)"); + writer.WriteElementString("ScreenW", ScreenW.ToString()); + writer.WriteElementString("ScreenH", ScreenH.ToString()); + + writer.WriteComment("AAMode: " + CHelper.ListStrings(Enum.GetNames(typeof(EAntiAliasingModes)))); + writer.WriteElementString("AAMode", Enum.GetName(typeof(EAntiAliasingModes), AAMode)); + + writer.WriteComment("Colors: " + CHelper.ListStrings(Enum.GetNames(typeof(EColorDeep)))); + writer.WriteElementString("Colors", Enum.GetName(typeof(EColorDeep), Colors)); + + writer.WriteComment("MaxFPS should be between 1..200"); + writer.WriteElementString("MaxFPS", MaxFPS.ToString("#")); + + writer.WriteComment("VSync: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VSync", Enum.GetName(typeof(EOffOn), VSync)); + + writer.WriteComment("FullScreen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("FullScreen", Enum.GetName(typeof(EOffOn), FullScreen)); + + writer.WriteComment("FadeTime should be between 0..3 Seconds"); + writer.WriteElementString("FadeTime", FadeTime.ToString("#0.00")); + + writer.WriteEndElement(); + #endregion Graphics + + #region Theme + writer.WriteStartElement("Theme"); + + writer.WriteComment("Theme name"); + writer.WriteElementString("Name", Theme); + + writer.WriteComment("Skin name"); + writer.WriteElementString("Skin", Skin); + + writer.WriteComment("Name of cover-theme"); + writer.WriteElementString("Cover", CoverTheme); + + writer.WriteComment("Draw note-lines:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("DrawNoteLines", Enum.GetName(typeof(EOffOn), DrawNoteLines)); + + writer.WriteComment("Draw tone-helper:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("DrawToneHelper", Enum.GetName(typeof(EOffOn), DrawToneHelper)); + + writer.WriteComment("Look of timer:" + CHelper.ListStrings(Enum.GetNames(typeof(ETimerLook)))); + writer.WriteElementString("TimerLook", Enum.GetName(typeof(ETimerLook), TimerLook)); + + writer.WriteComment("Information about players on SingScreen:" + CHelper.ListStrings(Enum.GetNames(typeof(EPlayerInfo)))); + writer.WriteElementString("PlayerInfo", Enum.GetName(typeof(EPlayerInfo), PlayerInfo)); + + writer.WriteComment("Fade player-information with lyrics and notebars:" + CHelper.ListStrings(Enum.GetNames(typeof(EFadePlayerInfo)))); + writer.WriteElementString("FadePlayerInfo", Enum.GetName(typeof(EFadePlayerInfo), FadePlayerInfo)); + + writer.WriteComment("Cover Loading:" + CHelper.ListStrings(Enum.GetNames(typeof(ECoverLoading)))); + writer.WriteElementString("CoverLoading", Enum.GetName(typeof(ECoverLoading), CoverLoading)); + + writer.WriteComment("Lyric Style:" + CHelper.ListStrings(Enum.GetNames(typeof(ELyricStyle)))); + writer.WriteElementString("LyricStyle", Enum.GetName(typeof(ELyricStyle), LyricStyle)); + + writer.WriteEndElement(); + #endregion Theme + + #region Sound + writer.WriteStartElement("Sound"); + + writer.WriteComment("PlayBackLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EPlaybackLib)))); + writer.WriteElementString("PlayBackLib", Enum.GetName(typeof(EPlaybackLib), PlayBackLib)); + + writer.WriteComment("RecordLib: " + CHelper.ListStrings(Enum.GetNames(typeof(ERecordLib)))); + writer.WriteElementString("RecordLib", Enum.GetName(typeof(ERecordLib), RecordLib)); + + writer.WriteComment("AudioBufferSize: " + CHelper.ListStrings(Enum.GetNames(typeof(EBufferSize)))); + writer.WriteElementString("AudioBufferSize", Enum.GetName(typeof(EBufferSize), AudioBufferSize)); + + writer.WriteComment("AudioLatency from -500 to 500 ms"); + writer.WriteElementString("AudioLatency", AudioLatency.ToString()); + + writer.WriteComment("Background Music"); + writer.WriteElementString("BackgroundMusic", Enum.GetName(typeof(EOffOn), BackgroundMusic)); + + writer.WriteComment("Background Music Volume from 0 to 100"); + writer.WriteElementString("BackgroundMusicVolume", BackgroundMusicVolume.ToString()); + + writer.WriteComment("Background Music Source"); + writer.WriteElementString("BackgroundMusicSource", Enum.GetName(typeof(EBackgroundMusicSource), BackgroundMusicSource)); + writer.WriteComment("Background Music use start-tag of songs"); + writer.WriteElementString("BackgroundMusicUseStart", Enum.GetName(typeof(EOffOn), BackgroundMusicUseStart)); + + writer.WriteComment("Preview Volume from 0 to 100"); + writer.WriteElementString("PreviewMusicVolume", PreviewMusicVolume.ToString()); + + writer.WriteComment("Preview Volume from 0 to 100"); + writer.WriteElementString("PreviewMusicVolume", PreviewMusicVolume.ToString()); + + writer.WriteComment("Game Volume from 0 to 100"); + writer.WriteElementString("GameMusicVolume", GameMusicVolume.ToString()); + + writer.WriteEndElement(); + #endregion Sound + + #region Game + writer.WriteStartElement("Game"); + + writer.WriteComment("Game-Language:"); + writer.WriteElementString("Language", Language); + + // SongFolder + // Check, if program was started with songfolder-parameters + if (SongFolderOld.Count > 0) { - writer.WriteStartDocument(); - writer.WriteStartElement("root"); - - #region Info - writer.WriteStartElement("Info"); - - writer.WriteElementString("Version", CSettings.GetFullVersionText()); - writer.WriteElementString("Time", System.DateTime.Now.ToString()); - writer.WriteElementString("Platform", System.Environment.OSVersion.Platform.ToString()); - writer.WriteElementString("OSVersion", System.Environment.OSVersion.ToString()); - writer.WriteElementString("ProcessorCount", System.Environment.ProcessorCount.ToString()); - - writer.WriteElementString("Screens", Screen.AllScreens.Length.ToString()); - writer.WriteElementString("PrimaryScreenResolution", Screen.PrimaryScreen.Bounds.Size.ToString()); - - writer.WriteElementString("Directory", System.Environment.CurrentDirectory.ToString()); - - writer.WriteEndElement(); - #endregion Info - - #region Debug - writer.WriteStartElement("Debug"); - - writer.WriteComment("DebugLevel: " + CHelper.ListStrings(Enum.GetNames(typeof(EDebugLevel)))); - writer.WriteElementString("DebugLevel", Enum.GetName(typeof(EDebugLevel), DebugLevel)); - - writer.WriteEndElement(); - #endregion Debug - - #region Graphics - writer.WriteStartElement("Graphics"); - - writer.WriteComment("Renderer: " + CHelper.ListStrings(Enum.GetNames(typeof(ERenderer)))); - writer.WriteElementString("Renderer", Enum.GetName(typeof(ERenderer), Renderer)); - - writer.WriteComment("TextureQuality: " + CHelper.ListStrings(Enum.GetNames(typeof(ETextureQuality)))); - writer.WriteElementString("TextureQuality", Enum.GetName(typeof(ETextureQuality), TextureQuality)); - - writer.WriteComment("CoverSize (pixels): 32, 64, 128, 256, 512, 1024 (default: 128)"); - writer.WriteElementString("CoverSize", CoverSize.ToString()); - - writer.WriteComment("Screen width and height (pixels)"); - writer.WriteElementString("ScreenW", ScreenW.ToString()); - writer.WriteElementString("ScreenH", ScreenH.ToString()); - - writer.WriteComment("AAMode: " + CHelper.ListStrings(Enum.GetNames(typeof(EAntiAliasingModes)))); - writer.WriteElementString("AAMode", Enum.GetName(typeof(EAntiAliasingModes), AAMode)); - - writer.WriteComment("Colors: " + CHelper.ListStrings(Enum.GetNames(typeof(EColorDeep)))); - writer.WriteElementString("Colors", Enum.GetName(typeof(EColorDeep), Colors)); - - writer.WriteComment("MaxFPS should be between 1..200"); - writer.WriteElementString("MaxFPS", MaxFPS.ToString("#")); - - writer.WriteComment("VSync: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VSync", Enum.GetName(typeof(EOffOn), VSync)); - - writer.WriteComment("FullScreen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("FullScreen", Enum.GetName(typeof(EOffOn), FullScreen)); - - writer.WriteComment("FadeTime should be between 0..3 Seconds"); - writer.WriteElementString("FadeTime", FadeTime.ToString("#0.00")); - - writer.WriteEndElement(); - #endregion Graphics - - #region Theme - writer.WriteStartElement("Theme"); - - writer.WriteComment("Theme name"); - writer.WriteElementString("Name", Theme); - - writer.WriteComment("Skin name"); - writer.WriteElementString("Skin", Skin); - - writer.WriteComment("Name of cover-theme"); - writer.WriteElementString("Cover", CoverTheme); - - writer.WriteComment("Draw note-lines:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("DrawNoteLines", Enum.GetName(typeof(EOffOn), DrawNoteLines)); - - writer.WriteComment("Draw tone-helper:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("DrawToneHelper", Enum.GetName(typeof(EOffOn), DrawToneHelper)); - - writer.WriteComment("Look of timer:" + CHelper.ListStrings(Enum.GetNames(typeof(ETimerLook)))); - writer.WriteElementString("TimerLook", Enum.GetName(typeof(ETimerLook), TimerLook)); - - writer.WriteComment("Information about players on SingScreen:" + CHelper.ListStrings(Enum.GetNames(typeof(EPlayerInfo)))); - writer.WriteElementString("PlayerInfo", Enum.GetName(typeof(EPlayerInfo), PlayerInfo)); - - writer.WriteComment("Fade player-information with lyrics and notebars:" + CHelper.ListStrings(Enum.GetNames(typeof(EFadePlayerInfo)))); - writer.WriteElementString("FadePlayerInfo", Enum.GetName(typeof(EFadePlayerInfo), FadePlayerInfo)); - - writer.WriteComment("Cover Loading:" + CHelper.ListStrings(Enum.GetNames(typeof(ECoverLoading)))); - writer.WriteElementString("CoverLoading", Enum.GetName(typeof(ECoverLoading), CoverLoading)); - - writer.WriteComment("Lyric Style:" + CHelper.ListStrings(Enum.GetNames(typeof(ELyricStyle)))); - writer.WriteElementString("LyricStyle", Enum.GetName(typeof(ELyricStyle), LyricStyle)); - - writer.WriteEndElement(); - #endregion Theme - - #region Sound - writer.WriteStartElement("Sound"); - - writer.WriteComment("PlayBackLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EPlaybackLib)))); - writer.WriteElementString("PlayBackLib", Enum.GetName(typeof(EPlaybackLib), PlayBackLib)); - - writer.WriteComment("RecordLib: " + CHelper.ListStrings(Enum.GetNames(typeof(ERecordLib)))); - writer.WriteElementString("RecordLib", Enum.GetName(typeof(ERecordLib), RecordLib)); - - writer.WriteComment("AudioBufferSize: " + CHelper.ListStrings(Enum.GetNames(typeof(EBufferSize)))); - writer.WriteElementString("AudioBufferSize", Enum.GetName(typeof(EBufferSize), AudioBufferSize)); - - writer.WriteComment("AudioLatency from -500 to 500 ms"); - writer.WriteElementString("AudioLatency", AudioLatency.ToString()); - - writer.WriteComment("Background Music"); - writer.WriteElementString("BackgroundMusic", Enum.GetName(typeof(EOffOn), BackgroundMusic)); - - writer.WriteComment("Background Music Volume from 0 to 100"); - writer.WriteElementString("BackgroundMusicVolume", BackgroundMusicVolume.ToString()); - - writer.WriteComment("Background Music Source"); - writer.WriteElementString("BackgroundMusicSource", Enum.GetName(typeof(EBackgroundMusicSource), BackgroundMusicSource)); - writer.WriteComment("Background Music use start-tag of songs"); - writer.WriteElementString("BackgroundMusicUseStart", Enum.GetName(typeof(EOffOn), BackgroundMusicUseStart)); - - writer.WriteComment("Preview Volume from 0 to 100"); - writer.WriteElementString("PreviewMusicVolume", PreviewMusicVolume.ToString()); - - writer.WriteComment("Preview Volume from 0 to 100"); - writer.WriteElementString("PreviewMusicVolume", PreviewMusicVolume.ToString()); - - writer.WriteComment("Game Volume from 0 to 100"); - writer.WriteElementString("GameMusicVolume", GameMusicVolume.ToString()); - - writer.WriteEndElement(); - #endregion Sound - - #region Game - writer.WriteStartElement("Game"); - - writer.WriteComment("Game-Language:"); - writer.WriteElementString("Language", Language); - - // SongFolder - // Check, if program was started with songfolder-parameters - if (SongFolderOld.Count > 0) + //Write "old" song-folders to config. + writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); + for (int i = 0; i < SongFolderOld.Count; i++) { - //Write "old" song-folders to config. - writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); - for (int i = 0; i < SongFolderOld.Count; i++) - { - writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolderOld[i]); - } + writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolderOld[i]); } - else - { - //Write "normal" song-folders to config. - writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); - for (int i = 0; i < SongFolder.Count; i++) - { - writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolder[i]); - } - } - - writer.WriteComment("SongMenu: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongMenu)))); - writer.WriteElementString("SongMenu", Enum.GetName(typeof(ESongMenu), SongMenu)); - - writer.WriteComment("SongSorting: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongSorting)))); - writer.WriteElementString("SongSorting", Enum.GetName(typeof(ESongSorting), SongSorting)); - - writer.WriteComment("Ignore articles on song-sorting: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("IgnoreArticles", Enum.GetName(typeof(EOffOn), IgnoreArticles)); - - writer.WriteComment("ScoreAnimationTime: Values >= 1 or 0 for no animation. Time is in seconds."); - writer.WriteElementString("ScoreAnimationTime", ScoreAnimationTime.ToString()); - - writer.WriteComment("TimerMode: " + CHelper.ListStrings(Enum.GetNames(typeof(ETimerMode)))); - writer.WriteElementString("TimerMode", Enum.GetName(typeof(ETimerMode), TimerMode)); - - writer.WriteComment("NumPlayer: 1.." + CSettings.MaxNumPlayer.ToString()); - writer.WriteElementString("NumPlayer", NumPlayer.ToString()); - - writer.WriteComment("Order songs in tabs: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("Tabs", Enum.GetName(typeof(EOffOn), Tabs)); - - writer.WriteComment("Lyrics also on Top of screen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("LyricsOnTop", Enum.GetName(typeof(EOffOn), LyricsOnTop)); - - writer.WriteComment("MinLineBreakTime: Value >= 0 in s. Minimum time the text is shown before it is to be sung"); - writer.WriteElementString("MinLineBreakTime", MinLineBreakTime.ToString()); - - writer.WriteComment("Default profile for players 1..." + CSettings.MaxNumPlayer.ToString() + ":"); - writer.WriteStartElement("Players"); - for (int i = 1; i <= CSettings.MaxNumPlayer; i++) - { - writer.WriteElementString("Player" + i.ToString(), Path.GetFileName(Players[i - 1])); - } - writer.WriteEndElement(); - - writer.WriteEndElement(); - #endregion Game - - #region Video - writer.WriteStartElement("Video"); - - writer.WriteComment("VideoDecoder: " + CHelper.ListStrings(Enum.GetNames(typeof(EVideoDecoder)))); - writer.WriteElementString("VideoDecoder", Enum.GetName(typeof(EVideoDecoder), VideoDecoder)); - - writer.WriteComment("VideoBackgrounds: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideoBackgrounds", Enum.GetName(typeof(EOffOn), VideoBackgrounds)); - - writer.WriteComment("VideoPreview: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideoPreview", Enum.GetName(typeof(EOffOn), VideoPreview)); - - writer.WriteComment("Show Videos while singing: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideosInSongs", Enum.GetName(typeof(EOffOn), VideosInSongs)); - - writer.WriteComment("Show backgroundmusic videos as background: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); - writer.WriteElementString("VideosToBackground", Enum.GetName(typeof(EOffOn), VideosToBackground)); - - writer.WriteComment("WebcamLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EWebcamLib)))); - writer.WriteElementString("WebcamLib", Enum.GetName(typeof(EWebcamLib), WebcamLib)); - - writer.WriteStartElement("WebcamConfig"); - - writer.WriteElementString("MonikerString", WebcamConfig.MonikerString); - writer.WriteElementString("Framerate", WebcamConfig.Framerate.ToString()); - writer.WriteElementString("Width", WebcamConfig.Width.ToString()); - writer.WriteElementString("Height", WebcamConfig.Height.ToString()); - - writer.WriteEndElement(); - - writer.WriteEndElement(); - #endregion Video - - #region Record - writer.WriteStartElement("Record"); - - for (int p = 1; p <= CSettings.MaxNumPlayer; p++) - { - if (MicConfig[p - 1].DeviceName.Length > 0 && MicConfig[p - 1].InputName.Length > 0 && MicConfig[p - 1].Channel > 0) - { - writer.WriteStartElement("MicConfig" + p.ToString()); - - writer.WriteElementString("DeviceName", MicConfig[p - 1].DeviceName); - writer.WriteElementString("DeviceDriver", MicConfig[p - 1].DeviceDriver); - writer.WriteElementString("InputName", MicConfig[p - 1].InputName); - writer.WriteElementString("Channel", MicConfig[p - 1].Channel.ToString()); - - writer.WriteEndElement(); - } - } - - writer.WriteComment("Mic delay in ms. 0, 20, 40, 60 ... 500"); - writer.WriteElementString("MicDelay", MicDelay.ToString()); - - writer.WriteEndElement(); - #endregion Record - - // End of File - writer.WriteEndElement(); //end of root - writer.WriteEndDocument(); - writer.Flush(); - writer.Close(); } + else + { + //Write "normal" song-folders to config. + writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); + for (int i = 0; i < SongFolder.Count; i++) + { + writer.WriteElementString("SongFolder" + (i + 1).ToString(), SongFolder[i]); + } + } + + writer.WriteComment("SongMenu: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongMenu)))); + writer.WriteElementString("SongMenu", Enum.GetName(typeof(ESongMenu), SongMenu)); + + writer.WriteComment("SongSorting: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongSorting)))); + writer.WriteElementString("SongSorting", Enum.GetName(typeof(ESongSorting), SongSorting)); + + writer.WriteComment("Ignore articles on song-sorting: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("IgnoreArticles", Enum.GetName(typeof(EOffOn), IgnoreArticles)); + + writer.WriteComment("ScoreAnimationTime: Values >= 1 or 0 for no animation. Time is in seconds."); + writer.WriteElementString("ScoreAnimationTime", ScoreAnimationTime.ToString()); + + writer.WriteComment("TimerMode: " + CHelper.ListStrings(Enum.GetNames(typeof(ETimerMode)))); + writer.WriteElementString("TimerMode", Enum.GetName(typeof(ETimerMode), TimerMode)); + + writer.WriteComment("NumPlayer: 1.." + CSettings.MaxNumPlayer.ToString()); + writer.WriteElementString("NumPlayer", NumPlayer.ToString()); + + writer.WriteComment("Order songs in tabs: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("Tabs", Enum.GetName(typeof(EOffOn), Tabs)); + + writer.WriteComment("Lyrics also on Top of screen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("LyricsOnTop", Enum.GetName(typeof(EOffOn), LyricsOnTop)); + + writer.WriteComment("MinLineBreakTime: Value >= 0 in s. Minimum time the text is shown before it is to be sung"); + writer.WriteElementString("MinLineBreakTime", MinLineBreakTime.ToString()); + + writer.WriteComment("Default profile for players 1..." + CSettings.MaxNumPlayer.ToString() + ":"); + writer.WriteStartElement("Players"); + for (int i = 1; i <= CSettings.MaxNumPlayer; i++) + { + writer.WriteElementString("Player" + i.ToString(), Path.GetFileName(Players[i - 1])); + } + writer.WriteEndElement(); + + writer.WriteEndElement(); + #endregion Game + + #region Video + writer.WriteStartElement("Video"); + + writer.WriteComment("VideoDecoder: " + CHelper.ListStrings(Enum.GetNames(typeof(EVideoDecoder)))); + writer.WriteElementString("VideoDecoder", Enum.GetName(typeof(EVideoDecoder), VideoDecoder)); + + writer.WriteComment("VideoBackgrounds: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideoBackgrounds", Enum.GetName(typeof(EOffOn), VideoBackgrounds)); + + writer.WriteComment("VideoPreview: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideoPreview", Enum.GetName(typeof(EOffOn), VideoPreview)); + + writer.WriteComment("Show Videos while singing: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideosInSongs", Enum.GetName(typeof(EOffOn), VideosInSongs)); + + writer.WriteComment("Show backgroundmusic videos as background: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideosToBackground", Enum.GetName(typeof(EOffOn), VideosToBackground)); + + writer.WriteComment("WebcamLib: " + CHelper.ListStrings(Enum.GetNames(typeof(EWebcamLib)))); + writer.WriteElementString("WebcamLib", Enum.GetName(typeof(EWebcamLib), WebcamLib)); + + writer.WriteStartElement("WebcamConfig"); + + writer.WriteElementString("MonikerString", WebcamConfig.MonikerString); + writer.WriteElementString("Framerate", WebcamConfig.Framerate.ToString()); + writer.WriteElementString("Width", WebcamConfig.Width.ToString()); + writer.WriteElementString("Height", WebcamConfig.Height.ToString()); + + writer.WriteEndElement(); + + writer.WriteEndElement(); + #endregion Video + + #region Record + writer.WriteStartElement("Record"); + + for (int p = 1; p <= CSettings.MaxNumPlayer; p++) + { + if (MicConfig[p - 1].DeviceName.Length > 0 && MicConfig[p - 1].InputName.Length > 0 && MicConfig[p - 1].Channel > 0) + { + writer.WriteStartElement("MicConfig" + p.ToString()); + + writer.WriteElementString("DeviceName", MicConfig[p - 1].DeviceName); + writer.WriteElementString("DeviceDriver", MicConfig[p - 1].DeviceDriver); + writer.WriteElementString("InputName", MicConfig[p - 1].InputName); + writer.WriteElementString("Channel", MicConfig[p - 1].Channel.ToString()); + + writer.WriteEndElement(); + } + } + + writer.WriteComment("Mic delay in ms. 0, 20, 40, 60 ... 500"); + writer.WriteElementString("MicDelay", MicDelay.ToString()); + + writer.WriteEndElement(); + #endregion Record + + // End of File + writer.WriteEndElement(); //end of root + writer.WriteEndDocument(); + writer.Flush(); + writer.Close(); + writer = null; } catch (Exception) { diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index c268f82e..013abf91 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -38,7 +38,6 @@ namespace Vocaluxe.Base private static bool _CoverLoaded = false; private static int _CoverLoadIndex = 0; private static int _CatIndex = -1; - private static bool _Init = false; private static List _CategoriesForRandom = new List(); private static Stopwatch _CoverLoadTimer = new Stopwatch(); diff --git a/Vocaluxe/GlobalSuppressions.cs b/Vocaluxe/GlobalSuppressions.cs index 05266267..f07fdadf 100644 --- a/Vocaluxe/GlobalSuppressions.cs +++ b/Vocaluxe/GlobalSuppressions.cs @@ -15,3 +15,16 @@ [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDirect3D.#AddTexture(System.Drawing.Bitmap,System.String)")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDirect3D.#AddTexture(System.Int32,System.Int32,System.Byte[]&)")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDirect3D.#CopyScreen()")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "type", Target = "Vocaluxe.Lib.Input.WiiMote.InputReport")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "type", Target = "PortAudioSharp.PortAudio+PaDeviceIndex")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "type", Target = "PortAudioSharp.PortAudio+PaSampleFormat")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "type", Target = "PortAudioSharp.PortAudio+PaStreamCallbackFlags")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Vocaluxe.Lib.Video.Gstreamer.CGstreamerVideoWrapper.#GetFrame(System.Int32,System.Single)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Vocaluxe.Lib.Input.CHIDAPI.#ReadTimeout(System.IntPtr,System.Byte[]&,System.Int32,System.Int32)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Vocaluxe.Lib.Input.CHIDAPI.#Read(System.IntPtr,System.Byte[]&,System.Int32)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "PortAudioSharp.PortAudio.#Pa_GetVersionText()")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "PortAudioSharp.PortAudio.#Pa_GetErrorText(PortAudioSharp.PortAudio+PaError)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "PortAudioSharp.PortAudio.#Pa_GetHostApiInfo(System.Int32)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "PortAudioSharp.PortAudio.#Pa_GetLastHostErrorInfo()")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "PortAudioSharp.PortAudio.#Pa_GetDeviceInfo(System.Int32)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "PortAudioSharp.PortAudio.#Pa_GetStreamInfo(System.IntPtr)")] diff --git a/Vocaluxe/Lib/Input/CHIDAPI.cs b/Vocaluxe/Lib/Input/CHIDAPI.cs index f7157205..509c2d33 100644 --- a/Vocaluxe/Lib/Input/CHIDAPI.cs +++ b/Vocaluxe/Lib/Input/CHIDAPI.cs @@ -22,7 +22,7 @@ namespace Vocaluxe.Lib.Input public ushort UsagePage; public ushort Usage; public int InterfaceNumber; - public IntPtr Next; + internal IntPtr Next; } public static class CHIDAPI { diff --git a/Vocaluxe/Lib/Sound/CGstreamerAudio.cs b/Vocaluxe/Lib/Sound/CGstreamerAudio.cs index 14b49b58..e8ee5aac 100644 --- a/Vocaluxe/Lib/Sound/CGstreamerAudio.cs +++ b/Vocaluxe/Lib/Sound/CGstreamerAudio.cs @@ -23,7 +23,8 @@ namespace Vocaluxe.Lib.Sound { Init(); Log = new CGstreamerAudioWrapper.LogCallback(LogHandler); - GC.SuppressFinalize(Log); + //Is this really needed? CodaAnalyzer complains about it... + //GC.SuppressFinalize(Log); CGstreamerAudioWrapper.SetLogCallback(Log); } diff --git a/Vocaluxe/Lib/Sound/COpenALPlay.cs b/Vocaluxe/Lib/Sound/COpenALPlay.cs index e79163ce..3b6310b7 100644 --- a/Vocaluxe/Lib/Sound/COpenALPlay.cs +++ b/Vocaluxe/Lib/Sound/COpenALPlay.cs @@ -13,7 +13,7 @@ using Vocaluxe.Lib.Sound.Decoder; namespace Vocaluxe.Lib.Sound { - class COpenALPlay : IPlayback + class COpenALPlay : IPlayback, IDisposable { private bool _Initialized = false; private List _Decoder = new List(); @@ -397,9 +397,15 @@ namespace Vocaluxe.Lib.Sound } } + + public void Dispose() + { + AC.Dispose(); + AC = null; + } } - class OpenAlStream + class OpenAlStream: IDisposable { const int buffer_size = 2048; const int buffer_count = 5; @@ -913,6 +919,12 @@ namespace Vocaluxe.Lib.Sound _Timer.Reset(); _Timer.Start(); } + + public void Dispose() + { + EventDecode.Close(); + EventDecode = null; + } } } diff --git a/Vocaluxe/Lib/Sound/CPortAudioPlay.cs b/Vocaluxe/Lib/Sound/CPortAudioPlay.cs index 9eb62509..6256ad4e 100644 --- a/Vocaluxe/Lib/Sound/CPortAudioPlay.cs +++ b/Vocaluxe/Lib/Sound/CPortAudioPlay.cs @@ -382,7 +382,7 @@ namespace Vocaluxe.Lib.Sound } } - class PortAudioStream + class PortAudioStream: IDisposable { const long BUFSIZE = 1000000L; const long BEGINREFILL = 800000L; @@ -452,6 +452,11 @@ namespace Vocaluxe.Lib.Sound _DecoderThread = new Thread(Execute); } + ~PortAudioStream() + { + Dispose(); + } + public void Free(CLOSEPROC close_proc, int StreamID) { _Closeproc = close_proc; @@ -981,5 +986,15 @@ namespace Vocaluxe.Lib.Sound } } } + + public void Dispose() + { + if (EventDecode != null) + { + EventDecode.Close(); + EventDecode = null; + GC.SuppressFinalize(this); + } + } } } diff --git a/Vocaluxe/Lib/Sound/Decoder/CAudioDecoderFFmpeg.cs b/Vocaluxe/Lib/Sound/Decoder/CAudioDecoderFFmpeg.cs index e7315aa4..0c8ed426 100644 --- a/Vocaluxe/Lib/Sound/Decoder/CAudioDecoderFFmpeg.cs +++ b/Vocaluxe/Lib/Sound/Decoder/CAudioDecoderFFmpeg.cs @@ -9,7 +9,7 @@ using Vocaluxe.Lib.Video.Acinerella; namespace Vocaluxe.Lib.Sound.Decoder { - class CAudioDecoderFFmpeg: CAudioDecoder + class CAudioDecoderFFmpeg: CAudioDecoder, IDisposable { private TAc_read_callback _rc; private TAc_seek_callback _sc; @@ -219,5 +219,11 @@ namespace Vocaluxe.Lib.Sound.Decoder return (Int64)_fs.Seek((long)pos, (SeekOrigin)whence); } #endregion Callbacks + + public void Dispose() + { + _fs.Dispose(); + _fs = null; + } } } diff --git a/Vocaluxe/Lib/Sound/Gstreamer/CGstreamerAudioWrapper.cs b/Vocaluxe/Lib/Sound/Gstreamer/CGstreamerAudioWrapper.cs index c0fcaece..672b94a8 100644 --- a/Vocaluxe/Lib/Sound/Gstreamer/CGstreamerAudioWrapper.cs +++ b/Vocaluxe/Lib/Sound/Gstreamer/CGstreamerAudioWrapper.cs @@ -26,6 +26,7 @@ namespace Vocaluxe.Lib.Sound.Gstreamer public static extern void SetLogCallback(LogCallback c); [DllImport(Dll)] + [return: MarshalAs(UnmanagedType.U1)] public static extern bool Init(); [DllImport(Dll)] @@ -41,7 +42,8 @@ namespace Vocaluxe.Lib.Sound.Gstreamer public static extern int Load(string Media); [DllImport(Dll, EntryPoint="LoadPrescan")] - public static extern int Load(string Media, bool Prescan); + public static extern int Load(string Media, + [MarshalAs(UnmanagedType.U1)] bool Prescan); [DllImport(Dll)] public static extern void Close(int Stream); @@ -50,7 +52,8 @@ namespace Vocaluxe.Lib.Sound.Gstreamer public static extern void Play(int Stream); [DllImport(Dll, EntryPoint="PlayLoop")] - public static extern void Play(int Stream, bool Loop); + public static extern void Play(int Stream, + [MarshalAs(UnmanagedType.U1)] bool Loop); [DllImport(Dll)] public static extern void Pause(int Stream); @@ -80,12 +83,15 @@ namespace Vocaluxe.Lib.Sound.Gstreamer public static extern float GetPosition(int Stream); [DllImport(Dll)] + [return: MarshalAs(UnmanagedType.U1)] public static extern bool IsPlaying(int Stream); [DllImport(Dll)] + [return: MarshalAs(UnmanagedType.U1)] public static extern bool IsPaused(int Stream); [DllImport(Dll)] + [return: MarshalAs(UnmanagedType.U1)] public static extern bool IsFinished(int Stream); [DllImport(Dll)] diff --git a/Vocaluxe/Lib/Sound/Portaudio/PortAudio.cs b/Vocaluxe/Lib/Sound/Portaudio/PortAudio.cs index 930993df..0039333e 100644 --- a/Vocaluxe/Lib/Sound/Portaudio/PortAudio.cs +++ b/Vocaluxe/Lib/Sound/Portaudio/PortAudio.cs @@ -159,7 +159,7 @@ namespace PortAudioSharp { public int channelCount; public PaSampleFormat sampleFormat; public double suggestedLatency; - public IntPtr hostApiSpecificStreamInfo; + internal IntPtr hostApiSpecificStreamInfo; public override string ToString() { return "[" + this.GetType().Name + "]" + "\n" diff --git a/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs b/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs index ed486447..22e50d25 100644 --- a/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs +++ b/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs @@ -119,7 +119,7 @@ namespace Vocaluxe.Lib.Video.Acinerella public Int32 stream_index; //Pointer to the buffer which contains the data. - public IntPtr buffer; + internal IntPtr buffer; //Size of the data in the buffer. public Int32 buffer_size; } diff --git a/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs b/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs index 9b0f7828..6efc2aea 100644 --- a/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs +++ b/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs @@ -213,7 +213,7 @@ namespace Vocaluxe.Lib.Video public bool displayed; } - class Decoder + class Decoder: IDisposable { private IntPtr _instance = IntPtr.Zero; // acinerella instance private IntPtr _videodecoder = IntPtr.Zero; // acinerella video decoder instance @@ -804,5 +804,11 @@ namespace Vocaluxe.Lib.Video return (Int64)_fs.Seek((long)pos, (SeekOrigin)whence); } #endregion Callbacks + + public void Dispose() + { + _fs.Dispose(); + _fs = null; + } } } diff --git a/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs b/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs index 13f5b04f..3e675569 100644 --- a/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs +++ b/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs @@ -23,7 +23,8 @@ namespace Vocaluxe.Lib.Video { bool retval = CGstreamerVideoWrapper.InitVideo(); Log = new CGstreamerVideoWrapper.LogCallback(LogHandler); - GC.SuppressFinalize(Log); + //Really needed? CodeAnalysis complains + //GC.SuppressFinalize(Log); CGstreamerVideoWrapper.SetVideoLogCallback(Log); return retval; } diff --git a/Vocaluxe/Lib/Video/Gstreamer/CGstreamerVideoWrapper.cs b/Vocaluxe/Lib/Video/Gstreamer/CGstreamerVideoWrapper.cs index 17368cf5..ae6b3fbc 100644 --- a/Vocaluxe/Lib/Video/Gstreamer/CGstreamerVideoWrapper.cs +++ b/Vocaluxe/Lib/Video/Gstreamer/CGstreamerVideoWrapper.cs @@ -6,7 +6,7 @@ using System.Text; namespace Vocaluxe.Lib.Video.Gstreamer { public struct NativeFrame { - public IntPtr buffer; + internal IntPtr buffer; public int Size; public int Width; public int Height; @@ -43,6 +43,7 @@ namespace Vocaluxe.Lib.Video.Gstreamer public static extern void SetVideoLogCallback(LogCallback c); [DllImport(Dll)] + [return: MarshalAs(UnmanagedType.U1)] public static extern bool InitVideo(); [DllImport(Dll)] @@ -52,6 +53,7 @@ namespace Vocaluxe.Lib.Video.Gstreamer public static extern int LoadVideo(string VideoFileName); [DllImport(Dll)] + [return: MarshalAs(UnmanagedType.U1)] public static extern bool CloseVideo(int StreamID); [DllImport(Dll)] @@ -86,10 +88,12 @@ namespace Vocaluxe.Lib.Video.Gstreamer } [DllImport(Dll)] + [return: MarshalAs(UnmanagedType.U1)] public static extern bool Skip(int StreamID, float Start, float Gap); [DllImport(Dll)] - public static extern void SetVideoLoop(int StreamID, bool Loop); + public static extern void SetVideoLoop(int StreamID, + [MarshalAs(UnmanagedType.U1)] bool Loop); [DllImport(Dll)] public static extern void PauseVideo(int StreamID); @@ -98,9 +102,11 @@ namespace Vocaluxe.Lib.Video.Gstreamer public static extern void ResumeVideo(int StreamID); [DllImport(Dll)] + [return: MarshalAs(UnmanagedType.U1)] public static extern bool Finished(int StreamID); [DllImport(Dll)] + [return: MarshalAs(UnmanagedType.U1)] public static extern bool UpdateVideo(); } diff --git a/Vocaluxe/Lib/Webcam/CAForgeNet.cs b/Vocaluxe/Lib/Webcam/CAForgeNet.cs index 9b1a333c..a301ff24 100644 --- a/Vocaluxe/Lib/Webcam/CAForgeNet.cs +++ b/Vocaluxe/Lib/Webcam/CAForgeNet.cs @@ -21,7 +21,8 @@ namespace Vocaluxe.Lib.Webcam private VideoCaptureDevice _Webcam; private FilterInfoCollection _WebcamDevices; private SWebcamConfig _Config; - byte[] data = new byte[1]; + private byte[] data = new byte[1]; + private static object _mutexData = new object(); int _Width, _Height; public void Close() @@ -39,7 +40,7 @@ namespace Vocaluxe.Lib.Webcam { if (_Webcam != null && _Width > 0 && _Height > 0 && data.Length == _Width * _Height * 4) { - lock (data) + lock (_mutexData) { if (Frame.index == -1 || _Width != Frame.width || _Height != Frame.height) { @@ -59,7 +60,7 @@ namespace Vocaluxe.Lib.Webcam { if (_Webcam != null && _Width > 0 && _Height > 0 && data.Length == _Height * _Width * 4) { - lock (data) + lock (_mutexData) { Bitmap bmp = new Bitmap(_Width, _Height); BitmapData bitmapdata = bmp.LockBits(new Rectangle(0, 0, _Width, _Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); @@ -106,7 +107,7 @@ namespace Vocaluxe.Lib.Webcam { if (!_Paused) { - lock (data) + lock (_mutexData) { if (_Width != e.Frame.Width || _Height != e.Frame.Height || data.Length != e.Frame.Width * e.Frame.Height * 4) data = new byte[4 * e.Frame.Width * e.Frame.Height]; diff --git a/VocaluxeLib/GlobalSuppressions.cs b/VocaluxeLib/GlobalSuppressions.cs index c04a0e50..88d94626 100644 --- a/VocaluxeLib/GlobalSuppressions.cs +++ b/VocaluxeLib/GlobalSuppressions.cs @@ -10,3 +10,24 @@ [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "Vocaluxe.Menu.CHelper.TryParse(System.String,System.Single@)", Scope = "member", Target = "Vocaluxe.Menu.SongMenu.CSong.#ReadHeader(System.String)")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "System.Int32.TryParse(System.String,System.Int32@)", Scope = "member", Target = "Vocaluxe.Menu.SongMenu.CSong.#ReadNotes(System.String,System.Boolean)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Config")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Settings")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Theme")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Helper")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Log")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#BackgroundMusic")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Drawing")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Graphics")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Fonts")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Language")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Game")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Profiles")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Record")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Songs")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Video")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Sound")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Cover")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#DataBase")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Input")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Scope = "member", Target = "Vocaluxe.Menu.CBase.#Playlist")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "type", Target = "Vocaluxe.Menu.EColorDeep")] diff --git a/VocaluxeLib/Menu/CXMLReader.cs b/VocaluxeLib/Menu/CXMLReader.cs index 2bf58133..947877c0 100644 --- a/VocaluxeLib/Menu/CXMLReader.cs +++ b/VocaluxeLib/Menu/CXMLReader.cs @@ -21,15 +21,15 @@ namespace Vocaluxe.Menu get { return _Navigator; } } - public static CXMLReader OpenFile(string sUri) + public static CXMLReader OpenFile(string sFile) { try { - return new CXMLReader(sUri); + return new CXMLReader(sFile); } catch (Exception e) { - CBase.Log.LogError("Can't open XML file: " + sUri + ": " + e.Message); + CBase.Log.LogError("Can't open XML file: " + sFile + ": " + e.Message); return null; } } diff --git a/VocaluxeLib/Menu/SingNotes/ISingNotes.cs b/VocaluxeLib/Menu/SingNotes/ISingNotes.cs index a3abb720..5584927d 100644 --- a/VocaluxeLib/Menu/SingNotes/ISingNotes.cs +++ b/VocaluxeLib/Menu/SingNotes/ISingNotes.cs @@ -4,7 +4,7 @@ using System.Text; namespace Vocaluxe.Menu.SingNotes { - interface ISingNotes + public interface ISingNotes { void Reset(); int AddPlayer(SRectF Rect, SColorF Color, int PlayerNr); From 1eef829479c92c84903035495d4dbd512c2dd867 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 16 Mar 2013 21:57:24 +0100 Subject: [PATCH 14/31] Bugfix More duplicate Code removed --- Vocaluxe/Base/CConfig.cs | 35 +++-------- Vocaluxe/Base/CFont.cs | 108 ++++++++++++++++----------------- Vocaluxe/Base/CSettings.cs | 3 +- Vocaluxe/Lib/Draw/CDirect3D.cs | 81 +++++++++---------------- VocaluxeLib/Menu/CMenu.cs | 51 +++------------- VocaluxeLib/Menu/CText.cs | 7 +-- VocaluxeLib/Menu/IMenu.cs | 3 - 7 files changed, 101 insertions(+), 187 deletions(-) diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index d3ce7901..1d5c114f 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -664,7 +664,6 @@ namespace Vocaluxe.Base //Check if there are inputs. if (Devices[dev].Inputs.Count >= 1) { - bool micfound = false; //Check if there is one or more channels if (Devices[dev].Inputs[0].Channels >= 1) { @@ -674,21 +673,16 @@ namespace Vocaluxe.Base MicConfig[0].InputName = Devices[dev].Inputs[0].Name; MicConfig[0].Channel = 1; - micfound = true; - } - if (Devices[dev].Inputs[0].Channels >= 2) - { - //Set this device to player 2 - MicConfig[1].DeviceName = Devices[dev].Name; - MicConfig[1].DeviceDriver = Devices[dev].Driver; - MicConfig[1].InputName = Devices[dev].Inputs[0].Name; - MicConfig[1].Channel = 2; + if (Devices[dev].Inputs[0].Channels >= 2) + { + //Set this device to player 2 + MicConfig[1].DeviceName = Devices[dev].Name; + MicConfig[1].DeviceDriver = Devices[dev].Driver; + MicConfig[1].InputName = Devices[dev].Inputs[0].Name; + MicConfig[1].Channel = 2; - micfound = true; - } - if (micfound) - { - return true; + return true; + } } } } @@ -820,17 +814,6 @@ namespace Vocaluxe.Base switch (param) { case "songfolder": - //Check if SongFolders from config.xml are saved - if (SongFolderOld.Count == 0) - { - SongFolderOld.Clear(); - SongFolderOld.AddRange(SongFolder); - SongFolder.Clear(); - } - //Add parameter-value to SongFolder - SongFolder.Add(value); - break; - case "songpath": //Check if SongFolders from config.xml are saved if (SongFolderOld.Count == 0) diff --git a/Vocaluxe/Base/CFont.cs b/Vocaluxe/Base/CFont.cs index d07ca4d1..73b50330 100644 --- a/Vocaluxe/Base/CFont.cs +++ b/Vocaluxe/Base/CFont.cs @@ -155,40 +155,18 @@ namespace Vocaluxe.Base class CFont:IDisposable { - private List _Glyphs; - private Hashtable _htGlyphs; + private Dictionary _Glyphs; private PrivateFontCollection fonts = null; private FontFamily family; private float SIZEh; public string FilePath; - - - public Font GetFont() - { - if (fonts == null) - { - fonts = new PrivateFontCollection(); - try - { - fonts.AddFontFile(FilePath); - family = fonts.Families[0]; - } - catch (Exception e) - { - CLog.LogError("Error opening font file " + FilePath + ": " + e.Message); - } - } - - return new Font(family, CFonts.Height, CFonts.GetFontStyle(), GraphicsUnit.Pixel); - } - + public CFont(string File) { FilePath = File; - - _Glyphs = new List(); - _htGlyphs = new Hashtable(); + + _Glyphs = new Dictionary(); switch (CConfig.TextureQuality) { @@ -213,74 +191,95 @@ namespace Vocaluxe.Base } } - public void DrawGlyph(char chr, float x, float y, float h, float z, SColorF color) + public Font GetFont() { - AddGlyph(chr); + if (fonts == null) + { + fonts = new PrivateFontCollection(); + try + { + fonts.AddFontFile(FilePath); + family = fonts.Families[0]; + } + catch (Exception e) + { + CLog.LogError("Error opening font file " + FilePath + ": " + e.Message); + } + } - CFonts.Height = h; - CGlyph glyph = _Glyphs[(int)_htGlyphs[chr]]; - float factor = h / glyph.Texture.height; - float d = glyph.SIZEh / 5f * factor; - CDraw.DrawTexture(glyph.Texture, new SRectF(x - d, y, glyph.Texture.width * factor, h, z), color); + return new Font(family, CFonts.Height, CFonts.GetFontStyle(), GraphicsUnit.Pixel); } - public void DrawGlyphReflection(char chr, float x, float y, float h, float z, SColorF color, float rspace, float rheight) + public void DrawGlyph(char chr, float x, float y, float h, float z, SColorF color) { - AddGlyph(chr); - - CFonts.Height = h; - CGlyph glyph = _Glyphs[(int)_htGlyphs[chr]]; - float factor = h / glyph.Texture.height; - float d = glyph.SIZEh / 5f * factor; - SRectF rect = new SRectF(x - d, y, glyph.Texture.width * factor, h, z); - CDraw.DrawTextureReflection(glyph.Texture, rect, color, rect, rspace, rheight); + STexture texture; + SRectF rect; + _GetGlyphTextureAndRect(chr, x, y, z, h, out texture, out rect); + CDraw.DrawTexture(texture, rect, color); } public void DrawGlyph(char chr, float x, float y, float h, float z, SColorF color, float begin, float end) + { + STexture texture; + SRectF rect; + _GetGlyphTextureAndRect(chr, x, y, z, h, out texture, out rect); + CDraw.DrawTexture(texture, rect, color, begin, end); + } + + public void DrawGlyphReflection(char chr, float x, float y, float h, float z, SColorF color, float rspace, float rheight) + { + STexture texture; + SRectF rect; + _GetGlyphTextureAndRect(chr, x, y, z, h, out texture, out rect); + CDraw.DrawTextureReflection(texture, rect, color, rect, rspace, rheight); + } + + private void _GetGlyphTextureAndRect(char chr, float x, float y, float z, float h, out STexture texture, out SRectF rect) { AddGlyph(chr); CFonts.Height = h; - CGlyph glyph = _Glyphs[(int)_htGlyphs[chr]]; - float factor = h / glyph.Texture.height; - float width = glyph.Texture.width * factor; + CGlyph glyph = _Glyphs[chr]; + texture = glyph.Texture; + float factor = h / texture.height; + float width = texture.width * factor; float d = glyph.SIZEh / 5f * factor; - - CDraw.DrawTexture(glyph.Texture, new SRectF(x - d, y, width, h, z), color, begin, end); + rect = new SRectF(x - d, y, width, h, z); } public float GetWidth(char chr) { AddGlyph(chr); - CGlyph glyph = _Glyphs[(int)_htGlyphs[chr]]; + CGlyph glyph = _Glyphs[chr]; float factor = CFonts.Height / glyph.Texture.height; return glyph.width * factor; } public float GetHeight(char chr) { + return CFonts.Height; + /*WTF??? AddGlyph(chr); - CGlyph glyph = _Glyphs[(int)_htGlyphs[chr]]; + CGlyph glyph = _Glyphs[chr]; float factor = CFonts.Height / glyph.Texture.height; - return glyph.Texture.height * factor; + return glyph.Texture.height * factor;*/ } public void AddGlyph(char chr) { - if (_htGlyphs.ContainsKey(chr)) + if (_Glyphs.ContainsKey(chr)) return; float h = CFonts.Height; - _Glyphs.Add(new CGlyph(chr, SIZEh)); - _htGlyphs.Add(chr, _Glyphs.Count - 1); + _Glyphs.Add(chr, new CGlyph(chr, SIZEh)); CFonts.Height = h; } public void UnloadAllGlyphs() { - foreach (CGlyph glyph in _Glyphs) + foreach (CGlyph glyph in _Glyphs.Values) { glyph.UnloadTexture(); } @@ -293,6 +292,7 @@ namespace Vocaluxe.Base { fonts.Dispose(); fonts = null; + UnloadAllGlyphs(); } GC.SuppressFinalize(this); } diff --git a/Vocaluxe/Base/CSettings.cs b/Vocaluxe/Base/CSettings.cs index c13bd022..03a759de 100644 --- a/Vocaluxe/Base/CSettings.cs +++ b/Vocaluxe/Base/CSettings.cs @@ -192,8 +192,7 @@ namespace Vocaluxe.Base foreach (string folder in Folders) { string path = Path.Combine(Environment.CurrentDirectory, folder); - if (!Directory.Exists(path)) - Directory.CreateDirectory(path); + CreateFolder(path); } } diff --git a/Vocaluxe/Lib/Draw/CDirect3D.cs b/Vocaluxe/Lib/Draw/CDirect3D.cs index a89d3a62..6e668219 100644 --- a/Vocaluxe/Lib/Draw/CDirect3D.cs +++ b/Vocaluxe/Lib/Draw/CDirect3D.cs @@ -27,7 +27,7 @@ namespace Vocaluxe.Lib.Draw private bool _Run; private Direct3D _D3D; - private Device _Device; + private Device _Device = null; private PresentParameters _PresentParameters; private bool _fullscreen = false; @@ -123,52 +123,37 @@ namespace Vocaluxe.Lib.Draw //Apply antialiasing and check if antialiasing mode is supported #region Antialiasing - int quality = 0; - if (CConfig.AAMode == EAntiAliasingModes.x0) + int quality = 1; + MultisampleType msType; + switch (CConfig.AAMode) { - _PresentParameters.Multisample = MultisampleType.None; - _PresentParameters.MultisampleQuality = quality; + case EAntiAliasingModes.x2: + msType = MultisampleType.TwoSamples; + break; + case EAntiAliasingModes.x4: + msType = MultisampleType.FourSamples; + break; + case EAntiAliasingModes.x8: + msType = MultisampleType.EightSamples; + break; + case EAntiAliasingModes.x16: + case EAntiAliasingModes.x32://x32 is not supported, fallback to x16 + msType = MultisampleType.SixteenSamples; + break; + default: + msType = MultisampleType.None; + break; } - else if (CConfig.AAMode == EAntiAliasingModes.x2) + + if (!_D3D.CheckDeviceMultisampleType(_D3D.Adapters.DefaultAdapter.Adapter, DeviceType.Hardware, _D3D.Adapters.DefaultAdapter.CurrentDisplayMode.Format, false, msType, out quality)) { - if (_D3D.CheckDeviceMultisampleType(_D3D.Adapters.DefaultAdapter.Adapter, DeviceType.Hardware, _D3D.Adapters.DefaultAdapter.CurrentDisplayMode.Format, false, MultisampleType.TwoSamples, out quality)) - { - _PresentParameters.Multisample = MultisampleType.TwoSamples; - _PresentParameters.MultisampleQuality = quality - 1; - } - else - CLog.LogError("[Direct3D] This AAMode is not supported by this device or driver, fallback to no AA"); - } - else if (CConfig.AAMode == EAntiAliasingModes.x4) - { - if (_D3D.CheckDeviceMultisampleType(_D3D.Adapters.DefaultAdapter.Adapter, DeviceType.Hardware, _D3D.Adapters.DefaultAdapter.CurrentDisplayMode.Format, false, MultisampleType.FourSamples, out quality)) - { - _PresentParameters.Multisample = MultisampleType.FourSamples; - _PresentParameters.MultisampleQuality = quality - 1; - } - else - CLog.LogError("[Direct3D] This AAMode is not supported by this device or driver, fallback to no AA"); - } - else if (CConfig.AAMode == EAntiAliasingModes.x8) - { - if (_D3D.CheckDeviceMultisampleType(_D3D.Adapters.DefaultAdapter.Adapter, DeviceType.Hardware, _D3D.Adapters.DefaultAdapter.CurrentDisplayMode.Format, false, MultisampleType.EightSamples, out quality)) - { - _PresentParameters.Multisample = MultisampleType.EightSamples; - _PresentParameters.MultisampleQuality = quality - 1; - } - else - CLog.LogError("[Direct3D] This AAMode is not supported by this device or driver, fallback to no AA"); - } - else if (CConfig.AAMode == EAntiAliasingModes.x16 || CConfig.AAMode == EAntiAliasingModes.x32) //x32 is not supported, fallback to x16 - { - if (_D3D.CheckDeviceMultisampleType(_D3D.Adapters.DefaultAdapter.Adapter, DeviceType.Hardware, _D3D.Adapters.DefaultAdapter.CurrentDisplayMode.Format, false, MultisampleType.SixteenSamples, out quality)) - { - _PresentParameters.Multisample = MultisampleType.SixteenSamples; - _PresentParameters.MultisampleQuality = quality - 1; - } - else - CLog.LogError("[Direct3D] This AAMode is not supported by this device or driver, fallback to no AA"); - } + CLog.LogError("[Direct3D] This AAMode is not supported by this device or driver, fallback to no AA"); + msType = MultisampleType.None; + quality = 1; + } + + _PresentParameters.Multisample = msType; + _PresentParameters.MultisampleQuality = quality - 1; #endregion Antialiasing //Apply the VSync configuration @@ -195,14 +180,6 @@ namespace Vocaluxe.Lib.Draw { _Device = new Device(_D3D, _D3D.Adapters.DefaultAdapter.Adapter, DeviceType.Hardware, Handle, flags, _PresentParameters); } - catch (Exception e) - { - MessageBox.Show("Something went wrong during device creating, please check if your DirectX redistributables " + - "and graphic card drivers are up to date. You can download the DirectX runtimes at http://www.microsoft.com/download/en/details.aspx?id=8109", - CSettings.sProgramName, MessageBoxButtons.OK, MessageBoxIcon.Error); - CLog.LogError(e.Message + " - Something went wrong during device creating, please check if your DirectX redistributables and grafic card drivers are up to date. You can download the DirectX runtimes at http://www.microsoft.com/download/en/details.aspx?id=8109"); - Environment.Exit(Environment.ExitCode); - } finally { if (_Device == null || _Device.Disposed) diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index 2f32f7c7..fb5bd244 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -220,16 +220,16 @@ namespace Vocaluxe.Menu { if (Elements != null) { - for (int i = 0; i < Elements.Length; i++) + foreach (string elName in Elements) { T Element = (T)Activator.CreateInstance(typeof(T), _PartyModeID); - if (Element.LoadTheme("//root/" + _ThemeName, _ThemeBackgrounds[i], xmlReader, SkinIndex)) + if (Element.LoadTheme("//root/" + _ThemeName, elName, xmlReader, SkinIndex)) { - MAddElement(Element, Elements[i]); + MAddElement(Element, elName); } else { - CBase.Log.LogError("Can't load " + typeof(T).Name.Substring(1) + " \"" + Elements[i] + "\" in screen " + _ThemeName); + CBase.Log.LogError("Can't load " + typeof(T).Name.Substring(1) + " \"" + elName + "\" in screen " + _ThemeName); } } } @@ -797,11 +797,7 @@ namespace Vocaluxe.Menu public virtual bool HandleInputThemeEditor(KeyEvent KeyEvent) { _UnsetHighlighted(_Selection); - if (KeyEvent.KeyPressed) - { - - } - else + if (!KeyEvent.KeyPressed) { switch (KeyEvent.Key) { @@ -1311,40 +1307,7 @@ namespace Vocaluxe.Menu private float _GetZValue(int interaction) { - switch (_Interactions[interaction].Type) - { - case EType.TButton: - return _Buttons[_Interactions[interaction].Num].Rect.Z; - - case EType.TSelectSlide: - return _SelectSlides[_Interactions[interaction].Num].Rect.Z; - - case EType.TStatic: - return _Statics[_Interactions[interaction].Num].Rect.Z; - - case EType.TText: - return _Texts[_Interactions[interaction].Num].Z; - - case EType.TSongMenu: - return _SongMenus[_Interactions[interaction].Num].Rect.Z; - - case EType.TLyric: - return _Lyrics[_Interactions[interaction].Num].Rect.Z; - - case EType.TNameSelection: - return _NameSelections[_Interactions[interaction].Num].Rect.Z; - - case EType.TEqualizer: - return _Equalizers[_Interactions[interaction].Num].Rect.Z; - - case EType.TPlaylist: - return _Playlists[_Interactions[interaction].Num].Rect.Z; - - case EType.TParticleEffect: - return _ParticleEffects[_Interactions[interaction].Num].Rect.Z; - } - - return CBase.Settings.GetZFar(); + return _GetZValue(_Interactions[interaction]); } private void _NextInteraction() @@ -2146,7 +2109,7 @@ namespace Vocaluxe.Menu // Statics CStatic stat = new CStatic(_PartyModeID); i = 1; - while (stat.LoadTheme("//root/" + _ThemeName, "Statics[" + i.ToString(), xmlReader, SkinIndex)) + while (stat.LoadTheme("//root/" + _ThemeName, "Static" + i.ToString(), xmlReader, SkinIndex)) { AddStatic(stat); stat = new CStatic(_PartyModeID); diff --git a/VocaluxeLib/Menu/CText.cs b/VocaluxeLib/Menu/CText.cs index 4e5f1e0a..ca81bd1b 100644 --- a/VocaluxeLib/Menu/CText.cs +++ b/VocaluxeLib/Menu/CText.cs @@ -642,17 +642,12 @@ namespace Vocaluxe.Menu return false; } - public void Draw() - { - Draw(false); - } - public void ForceDraw() { Draw(true); } - public void Draw(bool ForceDraw) + public void Draw(bool ForceDraw = false) { if (!ForceDraw && !Visible && CBase.Settings.GetGameState() != EGameState.EditTheme) return; diff --git a/VocaluxeLib/Menu/IMenu.cs b/VocaluxeLib/Menu/IMenu.cs index 331dd1f3..cb64b806 100644 --- a/VocaluxeLib/Menu/IMenu.cs +++ b/VocaluxeLib/Menu/IMenu.cs @@ -317,9 +317,6 @@ namespace Vocaluxe.Menu CPlaylistSong GetPlaylistSong(int PlaylistID, int SongIndex); } - public interface IPlaylists - { - } [Flags] public enum EModifier From c3b447ccf68da638fa650894aff80ce8be7b0411 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 18 Mar 2013 17:52:42 +0100 Subject: [PATCH 15/31] Duplicate Code in CMenu. CFont, CLanguage removed --- Output/Fonts/Fonts.xml | 54 +-- Output/PartyModes/Challenge/Fonts/Fonts.xml | 29 -- .../Challenge/Fonts/FreeSans/FreeSans.ttf | Bin 264072 -> 0 bytes .../Challenge/Fonts/FreeSans/FreeSansBold.ttf | Bin 91432 -> 0 bytes .../Fonts/FreeSans/FreeSansBoldOblique.ttf | Bin 95508 -> 0 bytes .../Fonts/FreeSans/FreeSansOblique.ttf | Bin 110740 -> 0 bytes .../Challenge/Fonts/FreeSans/readme.txt | 40 -- .../ChallengeMedley/Fonts/Fonts.xml | 29 -- .../Fonts/FreeSans/FreeSans.ttf | Bin 264072 -> 0 bytes .../Fonts/FreeSans/FreeSansBold.ttf | Bin 91432 -> 0 bytes .../Fonts/FreeSans/FreeSansBoldOblique.ttf | Bin 95508 -> 0 bytes .../Fonts/FreeSans/FreeSansOblique.ttf | Bin 110740 -> 0 bytes .../ChallengeMedley/Fonts/FreeSans/readme.txt | 40 -- Output/PartyModes/TicTacToe/Fonts/Fonts.xml | 29 -- .../TicTacToe/Fonts/FreeSans/FreeSans.ttf | Bin 264072 -> 0 bytes .../TicTacToe/Fonts/FreeSans/FreeSansBold.ttf | Bin 91432 -> 0 bytes .../Fonts/FreeSans/FreeSansBoldOblique.ttf | Bin 95508 -> 0 bytes .../Fonts/FreeSans/FreeSansOblique.ttf | Bin 110740 -> 0 bytes .../TicTacToe/Fonts/FreeSans/readme.txt | 40 -- Vocaluxe/Base/CConfig.cs | 16 +- Vocaluxe/Base/CFont.cs | 398 ++++-------------- Vocaluxe/Base/CLanguage.cs | 206 +++------ Vocaluxe/Base/CParty.cs | 4 +- Vocaluxe/Lib/Draw/CDirect3D.cs | 2 +- Vocaluxe/Lib/Draw/CDrawWinForm.cs | 2 +- Vocaluxe/Lib/Draw/COpenGL.cs | 2 +- Vocaluxe/Screens/CScreenOptionsGame.cs | 27 +- VocaluxeLib/Menu/CMenu.cs | 91 +++- VocaluxeLib/Menu/CText.cs | 38 +- VocaluxeLib/Menu/CXMLReader.cs | 8 +- VocaluxeLib/PartyModes/CScreenPartyDummy.cs | 2 +- 31 files changed, 302 insertions(+), 755 deletions(-) delete mode 100644 Output/PartyModes/Challenge/Fonts/Fonts.xml delete mode 100644 Output/PartyModes/Challenge/Fonts/FreeSans/FreeSans.ttf delete mode 100644 Output/PartyModes/Challenge/Fonts/FreeSans/FreeSansBold.ttf delete mode 100644 Output/PartyModes/Challenge/Fonts/FreeSans/FreeSansBoldOblique.ttf delete mode 100644 Output/PartyModes/Challenge/Fonts/FreeSans/FreeSansOblique.ttf delete mode 100644 Output/PartyModes/Challenge/Fonts/FreeSans/readme.txt delete mode 100644 Output/PartyModes/ChallengeMedley/Fonts/Fonts.xml delete mode 100644 Output/PartyModes/ChallengeMedley/Fonts/FreeSans/FreeSans.ttf delete mode 100644 Output/PartyModes/ChallengeMedley/Fonts/FreeSans/FreeSansBold.ttf delete mode 100644 Output/PartyModes/ChallengeMedley/Fonts/FreeSans/FreeSansBoldOblique.ttf delete mode 100644 Output/PartyModes/ChallengeMedley/Fonts/FreeSans/FreeSansOblique.ttf delete mode 100644 Output/PartyModes/ChallengeMedley/Fonts/FreeSans/readme.txt delete mode 100644 Output/PartyModes/TicTacToe/Fonts/Fonts.xml delete mode 100644 Output/PartyModes/TicTacToe/Fonts/FreeSans/FreeSans.ttf delete mode 100644 Output/PartyModes/TicTacToe/Fonts/FreeSans/FreeSansBold.ttf delete mode 100644 Output/PartyModes/TicTacToe/Fonts/FreeSans/FreeSansBoldOblique.ttf delete mode 100644 Output/PartyModes/TicTacToe/Fonts/FreeSans/FreeSansOblique.ttf delete mode 100644 Output/PartyModes/TicTacToe/Fonts/FreeSans/readme.txt diff --git a/Output/Fonts/Fonts.xml b/Output/Fonts/Fonts.xml index 70524adf..2bbf61c3 100644 --- a/Output/Fonts/Fonts.xml +++ b/Output/Fonts/Fonts.xml @@ -1,29 +1,31 @@  - - Normal - 0,00 - 0,00 - 0,00 - 0,00 - 1,00 - FreeSans - FreeSans.ttf - FreeSansBold.ttf - FreeSansOblique.ttf - FreeSansBoldOblique.ttf - - - Outline - 0,10 - 0,00 - 0,00 - 0,00 - 1,00 - FreeSans - FreeSans.ttf - FreeSansBold.ttf - FreeSansOblique.ttf - FreeSansBoldOblique.ttf - + + + Normal + 0,00 + 0,00 + 0,00 + 0,00 + 1,00 + FreeSans + FreeSans.ttf + FreeSansBold.ttf + FreeSansOblique.ttf + FreeSansBoldOblique.ttf + + + Outline + 0,10 + 0,00 + 0,00 + 0,00 + 1,00 + FreeSans + FreeSans.ttf + FreeSansBold.ttf + FreeSansOblique.ttf + FreeSansBoldOblique.ttf + + \ No newline at end of file diff --git a/Output/PartyModes/Challenge/Fonts/Fonts.xml b/Output/PartyModes/Challenge/Fonts/Fonts.xml deleted file mode 100644 index 70524adf..00000000 --- a/Output/PartyModes/Challenge/Fonts/Fonts.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - Normal - 0,00 - 0,00 - 0,00 - 0,00 - 1,00 - FreeSans - FreeSans.ttf - FreeSansBold.ttf - FreeSansOblique.ttf - FreeSansBoldOblique.ttf - - - Outline - 0,10 - 0,00 - 0,00 - 0,00 - 1,00 - FreeSans - FreeSans.ttf - FreeSansBold.ttf - FreeSansOblique.ttf - FreeSansBoldOblique.ttf - - \ No newline at end of file diff --git a/Output/PartyModes/Challenge/Fonts/FreeSans/FreeSans.ttf b/Output/PartyModes/Challenge/Fonts/FreeSans/FreeSans.ttf deleted file mode 100644 index 6de62ebf6718daed7c4eacc2ce45b9db67673b68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264072 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 Mb9-ZLZEcSIAA)mzIsgCw diff --git a/Output/PartyModes/Challenge/Fonts/FreeSans/FreeSansBold.ttf b/Output/PartyModes/Challenge/Fonts/FreeSans/FreeSansBold.ttf deleted file mode 100644 index e75685be37c70786b9d13bf0cec28be06044bf0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91432 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%0DuI~XD&CI8mFDv7_cQD)v(~) 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 z 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 VgX2HeSxt3xg+1(N+x#)@zW}(y8Djtd diff --git a/Output/PartyModes/Challenge/Fonts/FreeSans/FreeSansOblique.ttf b/Output/PartyModes/Challenge/Fonts/FreeSans/FreeSansOblique.ttf deleted file mode 100644 index 733f8829d8eb965234d73ac7802eac9781c2e460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110740 zcmdSC2Yi%O_CNgG=b7GHW|B;jnaL!X^fpN*y*EMvA%!HA&_eGBtk^*W>KA442RS~<>QX=v}PzD9ZfA&#^5A#cg} z_N?5EPc-Ckob4@?pEzsrjAg2S)W>mLL^{U_2WG8a>E=BA8jg!H;dj~G8D}jEh0qfh zWy7;-?xHnw*4=k?FP>vK(o#Kd_Kd!N?tH$TBXg$X_kwxIQ1P-&c)k(O3G)`OJp0R! zF8vLj|HyIX|1MfOYsL}ztyLU3`?qNByTvokUM72mI5@KQ7L<1{nX!2GwPROg;2Gr= zo0ly;Yo+Y=J?C&_6Yxo{<|ytuq-G?Z(*Uxg$orc622bCT+c-jQCwFiHxs(5eBYZ#K z&+&XvR?87toop<}%bI0pzymT)R$5d7mg1!uq~eKLvP{C4!cfYq^c1zat+fIFMJjr%RPlY5;QNFJF) zR+5{^z2tH79C?F$M84!>_*A}-6J+ktUuE9V-(|I-t(=-m2z|o^LOZ#l(BHV?(0{qo z(Cyqhb#CRTUebJQ0F|N@0Ig0ul?BOowxMzm!{N(k-d8bbf!+CuxePQWxVbcpLh z?Viwg+$6Lx1%IzYnM;s1AZ-lY8-@xLDgvd8IXn6YjezR+tkiQ{05mMZ-^E-6N(E8s zIkfd0+IkLcJqh>{@Jk@{FyMV0816%R&p#CeU z{}Sj`8v0gN5qcH$5})42(|dS&ll}HRp5DaMi|nZ%Pfz3NUiS1Oo<73U?*^XU#nUUC z7Sy=})VYL<4Lu+$4(*qfgg!<;cgo5_|CE)7-a@@^WtE{1QThc|_b24Mji!FZdts{D@%~2$%R=~kqBLq{+J|A^W2oGdl;chEE;bPy2Gx$zo${Wp4j z2^@8hyBKLb(j`b6kT#rrkq(hW#kk!}hFi8b^sI6fitHkSriGDDxEwJ*`a+o<_A zYQBw{Z=u$gsPQGIN6A;YjL_G>_9gWBGWy)lm4IhT!Ru@B+d8C+k=7$!g0ulC7IeEB zbo(51yBaM#iWZ(nKLyR!+T90%I(gvihD6<{) z?nc^ybPs5?6K(89{u4-hLI;Qq&pPyU6maeZoO>CZrI?*-k+%-%Vx;v*mmqCG+6X$x zP-7o*_915QNH>k81(Cr0e zhXC0jK=wJHdIwOw!#x%H2(*5UbE3tS;3O4VeFd%VMXP^9s|Nw;HQ=8&0PU54b{8mm z5n4WsmjB4DL-|XPHXv=pY~F-A*CTC4x&dhm(pIEfQU9sXVerUY@W@iE5k_#C87TqO zO~Q97aLom-wP?8!-)-RLZlrbi{Su@NNE^Yen^0~ue&33;9cAxE+JSTr#(pRAcB9S{ zNP93No(g?0@lXI9Q3MJVL;jWkztYeiv^cIf7ok2G(DLwiMIPfazgidKmQk4847Z-abQbpP{$I=uLE(2I^1&ma7 zZiN({$Hh@TfQ(2252Qk}W`s5a?pMJJA7OprvA!s|QuI(8x&iXz4#0ggWXE>Qm2WUt zz5x!mVy@hV_3bv`avNmG7RZpBfYWu5A?v{DHv)T)!?*QK$LDB8N?=4v>Rtr6#{s0hv1W4cHT0xBoz`7md-ihyZ$h#P6 zJ<=se8;~|)^r@WO4qV?t&F#Q-H*kFnE$jlWuL9Rsf#(~*^DWFICGgt=+@1k$F9Nrt z!0Rt){cphO72t9ZxZDd|cA>Xj=xrBz+lAhCp|@S=?E&EO25@-;xV!;e-T*Fd0GAJe z%b$SDi@@Un2GO&C=nFvfEFgLo5IqZsUIIi10MP+J^a&usSYme7qJ>8AS`+YYhSty) zdLIzI4~X6eL|*}-KLa8vXI}zDF9D*L0MSc;=p{h(EFk&>5PbrOJ^@6Z0HRL-(NRG3 z4j}pn5Iu)+H345b_H@kifNw3NcO$;r(7V{vQ*2x)H7`f$djR|8fc_4HkyD(mVMvG5?LtY2$7XkL00sGB>{bs;^Ghn|N zu-^>WHv{%(0Q)n5{Taai3?O(0u>TdX-wD|70qpC+n>`pix>m`-iQnPr6L8)U9?YFd_=S!i&y5ZJ$c=+OrNGQMGEjOlI7_VYIcEjjp9AjCxG|91l;$m%L*p5j ze+dr%f$M?>u^naZM%saN55{39%J0Ui^aRqL&=JhY&(Z%6Y|e<%Z9L=D?~g0JctEfp zb-nX)Y`s);M*qvy5JJMZ9cO&gUx(9vTi*z58 zmxsCg@x2S}?M8YG=?SDgqRa#)KY==3p|9}Qf6-nn^qe@%tOC@jMgLSs8jJE&N7|0( zyODMv-2+&5;>HqaR4|R;C_pAH_{HId+_^xD8CcwexzM^-i`DG(jFw*(~IbdYJe{e>FE>n zMET@%^z^mV(_zLdcY<%WBi)7cTco>@b|BpY$nHb=ok;g1?E+N0k)A*TrNAR1{0GqL z`+)mj7@LDA{XT=?VZiWT!0<3&co*2di_-4{hJz^m0pr#2jDq_C!y#b%K45qsFuV^K z-Ukft1BUkj!+yX(*V7LG!v}z2KVaAo81@5(18mpu3wk*DE^bTax zJCIH9LAvc@9A5}cV6=Ap6W~4!PW=k79|G)DJN_Kl9s!RW0tbGMxiCyS#+d(6mI_%$ zcQvODU$`{Y65f_z+XvX*m0){o7;Ir|=tzgLp}PLbu%Ws>#pbAl$xuE2i(_IU>hiBM zE&2b+?t;-Tyn`TEN#26Q4r^{yW0NEA?SUMs%hBB7Wrjat&pV<x{~dcksy`?( zUdPua#4@TOW!}Qx>4#BT2VGqT)*H6goZiz{kij3Fw4Nw^r$CRO{S7`5CY|N%Gn_BU zXh=2e$2cD>Eh$_o_ zZnR|;@{**PnceAVk zCC1C@@!2e^!{-=Qk6O-JkQAH_HE4-Od^WS+(ou$%C0L^fgG@%PXjr?baDi}{aD{NE z@TzQ@>^a#>vR7o^%6^njl=sRv$}f}ekv}K@RQ`=C!WHYPbG5j-Ts^MIuBoo`UAtY+ zx!!dB({G87@U;eJ@yFY#R zm+#*HS@Cnh&!s2ZM8&D{xT|3*F}2goOY_8am8{{sK6zzGUL!=SYa zD;c!w0qs@7T{2E~h3rMyUfJuiALKdmN%9%;OXUyC{~&)|e#FJOB3*7*qpMYdcAD!V z*W<1iT<^F(a2<7h=eD{d-7#)AgSKcGv}OivAD}Igpyhs!{kag(R{mV`bA2cj`Zn}& z=+B{tLaRb6Ln}hdLQ6smL-T`A2OkPv8N4ERd2my3V{k*z7xV_*L1!>J7!{1{|4;uP z`uFrd(Z9R@(f)J$&+cE{zpB5re|&#!f5pMPgSiK@4`v=rKbUqf^(p7WUuCG%)oJQfiDN+C|9|{P6qq>IK0<-LjR@TBPm3JSaTlC_&V?(_n!5zg zf=sSZs?-{-PH!-p%oeLH!tRKSigw1t#<|>{cyB^tk}o+WH7z|OGb=kM*PoYP5GX7v zE-5W5uc)l5uE7aIL*tmHvCS>x#9Xs#-n#wH zyYBw&j(d0BcmD$q{_dfNAKks{u_qq?!|(t26t{d<-#qR&cPw4Nt(wnmyop=EadTEP z`Yt?|yJycuGZ)i`Mdxwc+VxvlK0co0o(cbXHvYKy@^x2Sdezm}T)FuM?)q)F+>ESc zNNdD0?7V^_m=`?$c|emT{LPr>YM~UvT@IZ<5~rtLDz7XA_T**U5|g^QfW4>5Jb;ycL9g243!s3?!2$*eCz| z(hVDyBGDQJq0jkC`8}{v+bN=1YX+18{iLZ1upPY9rhlI99{%+JFw zWNV3bg-6XR#uJifj>zwE7m`A~v2KOE#C}DjLN%TU`PSItE{80`uhmy9sP>m9C(H89 z6@}-zHF@a@fiFfV_6T&Eceh8#QY&xH#?e*wE+FV_7UiY@V4a~<{w zVCao!$Q3x^MfCi+A_>Sze&@fh?tia()0mXVhKljcN%p$R@}d-HnkAw*B__*EZamHp z{PX=j{!al<>conoVoyq2MM-r|yw7h}=f)=mY|7xf$Nh<}UhSbn{CeQxgAJmV;z6nJ z@cQr-#v>3O9lwNt(ox`(#wOlK*brK21v-`#Sw4TfrCyk&@#=%myjWLfiD+`Ds&H&ZxZh!JB(S+5 z&WykdgR_DDzC4sh{)E}4r?~QFo5L%zVgcD02n7Q5N^(sx=G%+GhiQKwbaSpG=N;%pOex{?H9XJpz1OgR0esSH~#70sQytiGk^p5DL=bk$c{oRL? zxPPFgf%c~iIFt^hPw5Nz0uEA99=k-nJij=7Le`Xdaee&0Wl81E$%)gaC3m|@l2La` z=v#g~*+*wN!HgAWs$a>EH@=o$pZ*&AB>KkJUvGTn6^dIRw1|6$n@jtmQ;UwEH-Pa7 zco)x)w$)o~yr9amYLq2&f72JGNXl@e&{{LNBV-!E2_fqxK&BZF8%befBmJ!lV(@LW zh~EO}|84s``&=r6Na&l;=j2h~MQefg$+>~xngGAA-wJ6n6FfB$V_<_W%~7s*5jOFa z(!>a`sWHeebly`LLAI|>GYX_6GPe7i7JqJOWK8?=DaDyqdATK`Dn#;2=d_$Vdvm(CH(EJYqn)-nD`93NUB0;2@o^MzQ2Id(v44KS zOP1cQU*wICm&uB^c9S0~jCOmCQq^CA8u1X8i%c=EY=IdhsAm0uc&q``f31`y3kh{pbL}`Nl1+9M`E*q=_tueQK)2*cyBz3H|Z41QsT>OQC(R! zLw8h4^99SY99`ZjjZmyojl2AoIHkOs7s{ht^YT5-DN0o&sT-S>SXORTR65J1XLr_l z(w9`)Jp~5ylxDSh;_|52$RvHFu{u)Ilv!SFRbWgjK$$W?tD!R|(GwtkfvzH0tO!{U zeA`CusGhmNyda@FzbbfO=M?gE&_8bH4Psr){Y-99 z9uV=j@~bStx9aQbm*zxQ^Q8Oo-r}5Y*_s(esS|8bCF!>4){Xr0T`#0Hrv#RD5q@P( zN~cD5c1v+QWUbcsyXzV0l)GvIJeyJ~TU{rj#0o4v>x-(HYf6vgX!fy8>vykJ^h zJ*{JGN?=llT(P)4qkQ9ym8my0C1jg+*2Sgfj&U0sikfO;b>N0eLEqZ}Ej$nir3>S= zfG5D;Zr*;`gru3>H#98^uC?;dPq^db4GUlU^NjPmF!!2(;}q0#W3O7paaOFeY#kkt z)Cy&`a>$}YM&c%nSfdW9oA;RBydjKW@sR3_Ho6P>@y~5#1R`FNobf#lRCoqRQKvoIhpq;y`}$+*{Vy zX|>gKK*;{O!iJ7WWnDpib-ab@OiM5l^}G&LR*KTk3U2=#67X433X;1;ZERd<5!MD; z4%Hy11DF^?WiP2i`JUkdnAgpn8=O2;3U`IR=g%eYVZX>#kVK`PD7%b&ggH2g%rL)D z_uBa1-bHuPP25s`2AL(ogqakOBk?ng!B_)%+7OH}l39(74~Vim8!dK-EfS?XkU;`` zhq3=NGuaWm-AuFtZ9WNPSM&ddCga1*4$Db4UBbdBmyUy|yg_~Ap`4yINvDmCZ0t13 z3mkECd>UnE=Ie4rYg#~<5#g+}Xq0jGN%j{5xvr?9+JMDYVAsrujz6e~ f-ZMFI1 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 - - - Normal - 0,00 - 0,00 - 0,00 - 0,00 - 1,00 - FreeSans - FreeSans.ttf - FreeSansBold.ttf - FreeSansOblique.ttf - FreeSansBoldOblique.ttf - - - Outline - 0,10 - 0,00 - 0,00 - 0,00 - 1,00 - FreeSans - FreeSans.ttf - FreeSansBold.ttf - FreeSansOblique.ttf - FreeSansBoldOblique.ttf - - \ No newline at end of file diff --git a/Output/PartyModes/ChallengeMedley/Fonts/FreeSans/FreeSans.ttf b/Output/PartyModes/ChallengeMedley/Fonts/FreeSans/FreeSans.ttf deleted file mode 100644 index 6de62ebf6718daed7c4eacc2ce45b9db67673b68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264072 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 Mb9-ZLZEcSIAA)mzIsgCw diff --git a/Output/PartyModes/ChallengeMedley/Fonts/FreeSans/FreeSansBold.ttf b/Output/PartyModes/ChallengeMedley/Fonts/FreeSans/FreeSansBold.ttf deleted file mode 100644 index e75685be37c70786b9d13bf0cec28be06044bf0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91432 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%0DuI~XD&CI8mFDv7_cQD)v(~) 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 z zyb*80oADOB6>r1a@eaHb@4`Rh-FOe)i}&IE_y9hL58=c32tJCB;a~7^{3||zPvYP3 zDf~M=jnCk-_#9n*{Rh5)FXBu1GQNVZ;%oRizJYJzTlhAdQXML(I>mM3dhthka?(BG58?)K zuQ-C9Yxr|M zZl#Rnl8d!f<)+#IWwxrnT(7A9!b%sbh1E?}ccoiuaQ1paUvV9RC0E?4PQ|5D`@du;t(l6G9dc{hr|}tLJyYAb)bp>^sb&j>Y@w2^ z54TX}PhrWHD{d2I-7DR(nL#5f;EdpZ$p>KVc&**lh?sFIEuQ2dwRlLiLNVtycMLn( zO1aeR7#irvR46(D$0N-hV73>tK*5A=HhWTFPi7lW3MO>3+2(?wa`qfq z7;K$0s<(A;lyBR6j3I49{~=Hhq_IFFq>v5Fb+YxE8z_3DZSL6fierSpToa(8N7P*M zUKQzIV4kU8GWF+;snS*&BLwD|`Xv+Kk~31S)+%KhYM3hJ(Jkeh=d<%=c7DEbzU+|+ z^9Smsyi=(U7oB=-LV2tdSZHjZzDcgMEgS>eRv9A%78)BWhAc9*svc=wG#a{A8Z~;z z=sww8FBL*oG|V&-SZpfSJfarshOFs^Tw)rsZW?k4`%-6LmKa~^9%))qp*g9kuK!P1 zGS-s`^|4a(5^nIip{@Im+SR&h41d5Fe$6N!SY|w2>yegaevfTg>$6QXP35b`yH1;F zJJTrB7}Ge@1k(>aZ-`MOw)RKj~LVxYfZ7%6l+bf))Z?^u~%ufKFwOwY<-&bq!TS2x@Aq! z9iMIPNO?ugj_c9Z`QC(W`0^<4SrrZ$?ctEo9uApUghM74;gGR195PmhL&oQD$oNb* zwTvE%>swskinT2oGbGw*L7+vC=dQ(Lh1wXw(-n!C_KCzy`$S^KhDa>cR4bRt)d{(R zTXCy}swcH{6h{Uej~(xnXw@#d1*a`FQY}!I^NPo%YJ7Y)&GlYU+k9FuX@)n#k})T@ z%pZ31=A0@sE{9aaIsTwW=vc#P{2<5TTm^uX*~_!HsBK)a*N};+2)S1cN`gD zoG&z-+qiCyH>!Gvo4ooeL#H?8wKGjQw^(zUSr?@q+DJ zvQw7oa&@7(Z2ZE?Ksi9k(XeARc?4_Z8{^{$`IV(VGN-Am!`i0RHq6@K2WGahPSYlQ z&=Xp`${y>PVTVHFo&G|>qU(>52G?%+T-fJEkJ^4&yU#^^F6MJ_pG!2jsE-ykW6}X5%Do1K1RgHuzd{M$FO}2+sCkdjM2E*K8EdM*gl5sV?=$cqJE92UnA<* zi25~RzEv^bmY8o#%(o@xYmWJvW4`8?uQ}#xj{BP9zQ1uFBkp6weT=w|5%)3TK1STf zi2E1`A0y#oBz%m7kCE^(5?(oEBa{3PQi89&MRNybkyekbF1GJYrHcQQU_Z+0i+buwNj>+fX!oQ2t4tf!0h za295Fu^*g;*_?&hoQ2t4jh+>^*+b65Y|g`M&cp03_Js2>oAWU{#h#?t0?yCu6nm0l z3sM}(6yv1WGtSs-&e&|u*lf<&Y|hwh&e-e}M>55cOfx=bayDmjHfM5nn(@<&&zYT_ zHlwvY7E3g^IFHu$Se!?&=FGU&=b3SZz|*YUULoHIL{JVU&DfEyXg<@oefK((NV5pQ* zw0$I-^AI|p^AO@V`_Nn?o_5&7v(h22=Mwcs4pDFH67@z7QLpC`^?EK*Z{!ed)c5=$ z*|V3ZHwO{*<_MzR96{6@xkSB@L)05NR@!2Gi}B5;3@T@Qi}5YSH}Rq4jAt>P#dsFu zS&SEE{bAN0X8*#hKg{~WtUt{DHR2Oy|H6zHX1p-tg&8m0z+?Zy>|ccOBa9zm{0QSm z7(c@J5yp>jd?Sn>Vf+Z=M;JfC_z}jBFn)ybZN|45-)4N9@omPp8Q*3+oAGSMvl-83 zJe%>_S${k0Z)g4V&UU)aVWrzye>>}MXaCySzjnrHXZ`IBy=;G!^_zU$N}KB@L|K27 z^+#EMl=Vkhf0X@+GES8Ji85Z4{fRPel;am={21fM*uNP27h`<$3D!!RPq0K8KgRem z#*Z<+`Gia7F@B8kV~ihXyg1{<886OwarQUP{>B+E&UkUgi!)xF{f#r8$;+&?$;*hc zzj5|A!T1TrH#wP=HaQtl#y2?`$&7DuGLjiT!T2U8qjJVKIT^|9ugS?sW_**AS!t7# z5oP~PPDV20o1Bbf#y2?`$&7DuGLqSUlarCm@isXb$?U($$*i==$%wN5CMP4A<8N{@ zk{Q?JVk9%J$;C)!T$78D%(x~OBbjkcE@q`oE=H7bO)f?<$?@)F zT$7{GamMZBcy}^xC&%05ZdTglZbUiWCU+y5@l38pGUJ&mW+XG7$<#<@9Fw7u%s3`P zv(hF*Bg!}?LnE2n)nsTSGp@AbvYs}>R=XEAn&mt*h; z8&B5t7ix67OQTR9H?@;iij9bwWj>uW%O+8;I}-Jpi>MbqqF!?m^`;@BUKojbVI=A` z7tuzF67|#7sF^zGnDHTLmQIq54@t9h(unh>BBE@ASvpB(8~EY|B~=Zp%;HIBFgiys z$$)`8Vu^^Lv0xVv zS=R!H4OiE;uDY%-x~^c^Rcu(+RlrJS{@;6_nG{Gc;`{zSfA~BzndiCXoO91T=iGD8 zJ&!;HK`;pG1W{O2S6x$U{!>IT?wr9@U)S0);;#I=*9!uv76ju*bt6Vq&VTXhZv?@V zh}g9E z`Tgigh+ySav*%qhYtH(QOY!@lKvA^#%WP(CJ)$8QEx+(q-3 zt;!!aqZ7ZU0_bh?7S5P9Y@KSnK&t*L2+CLHPg}J}mQTzAX*`VbF$<>6pQ(#|?FfFq zCkToU7A;)5>>K0M`vua5=doi1hPxJ5IW8)w0NJ;=_nmMOzfOre1R~xbb_!IyNqi80 zKO{bizYmEY;qT+(agwi`l;{QM>^nWW9`=1cjRf|5FQd-OsPnS0*?)wWI*3x=qSP6oP>`e4S15H5r4FLhL6mw5 zJZ12|Dj5BL0~`+vb^ecpHo!3oB}e-|5ytpW3*&H&M++1EKcM!*sQoZ%KaARsgEn#a z^rA!|`YT3X>+yRdu1&Z$11p9fEAf*s1T-uZG${4mIi(aroS;OhM*!;qVDt(~-381| zy#8x=vK>zz!IKy8* z`T(49zyDwO>#yB)zQM0|`7b}7oy4!>fYRW<8&tVRi1I%n?(&}&cl&=rA5V(+`9Bu- zqM!TG(mwz9DE%d?%iH}Hzy8fz`WY>qz^{+Mw+7JG=>NNTum3Hy^fFp{HPF)QXz2}< zd>k$PkN5{%5Bhh3N@k2os9+Ses$I2Dbx`$^>fb6~h$IikT`bzb88m(r9W|uZxTdiH9{a80% zH&wSlw^6rUcbD!--LtxvbRX-!&};QJeWE^JU#)M`Pt`BbU#h=azYXJQz}T^QVia^j zg8w}s*?&yP2BmZTM=_qeg#!FN#D555`WHUh)!?EU|MxHc>l-X$A1d*{BHY4cC4CZ!puI#!P!cyx#v7 z;D|$wZ2y1I>k;(&5qkYIIO(6l23%L*+K6ituFZJ19p!f5x&c=wuABYekTA>uHCp*V zNP)CS$DGLapF#^Cpymgt`2lL4K&?}#aSB++`QH)JP|6D~90G_6flU$a75kqP*5P|S zt_`@Zz_k(ACR|bAmj^&M8F=PFv~UxrKdbHbwS=J0Xw1FO@{O^M%|3+(v z(b{3Ob{MT4Mr()B+F`))xo|h??ZUMi*B<|;0_KHq0Cf-HdffjxG5P-sE{#KrUQl%i z@Gta#1{j|~tKXp2Z_w&DX!RSk`VCtB23YoodvnN2xaa9t(&kV$^rwc_*%2c(xnY9$W|T{1C3g{`W!azX?{f_!U}w zA1%Iv7LTIE?*Qe^;GOpY>8*hD5kR_y^Tk9+o6W$4@xykM-GS={TsPwC#C03$9OgW+ z7(6i_a^C=%W8^aITlC^bFFy3*6RH7oJx00>b8##%T@Q+H#I*_6W<1}5vODnIiR*5Z z-Gys6E;bkMN4*26cL>+x;Qqt7$9U##!2NH){0?CL99-}ZPT}>qzY*6aT$?e@7L5Ka z!1^bQ{!Y|-0;B&L==UAycM|mb0`bLDJqVMEh?7*7pL|cR7kH9k@0q>76>)!*e`$5Tvf!|ka6Afjk6Up}^b-?vKJ14IJWte*$cn+3EQ~#9 z_i_KbfapbVPAFPTz+BA+WpjbABsu;C{2A^{a=d|>?{L`vfYN^j><<9;J%IgQz`h%` zUjXb({yY!Zp=n^VRb#Hy`~L*k9|P=+OAcbZUPX(40f)Q?*lz;ty8-)dz`h%>?*{C< z0sC&i{t#e)9FLfdk`$X3VJ; z&JF(shkq}O!Tr1Od>5|Wxc1<>AJ+j$^h3BF_x~3&@-*mL4eqRmL~22gqwx1GT)T1Y z!K{RxjT%3q#*ctY>it{%#bgA-#0Wm=0GzClarv(M|gT16#5!%j^Pw$^sEJJV{v5w+GhdnJAn4j;Eeac8SesWKT7-zyW$tn zfr6q2VDJ-0f$39*=ShslkD$*f%;+C6qrV4sKLMtnV0-vLv+sfF8BpB7u^opwIv$jn z09iB#Uu0yyU_n*Qj`NS=t z48!OL;C2fAL_rfrW6tJ-FZlQYcE&Yrpzhtkv}X)|0kxSt{ub?hi`rdS`D_6e&~V`J zP&_kYrbz9vIrSxI@fk+(KYSD!&eBMJ1{}Ub+g}2QFNJ$??ZUMi*B)GZQT~2h`*7{Y zs0K&(as17CItD2LeF}<8R6mBEPNSz&=;;^qbQ0A4kwZTkklux7cjLMT*S)x4W22|j z=;;)Ck}%qb@BJtnzzmf74!ly0xl#*msOPrfM;M!z92Rlz;+CH7=o+Oui|EkCJ!_W2HG&G{?}sf?;m znHq5U*_KC8!*HF`t#1bR>r3#_PvD~yyq=_sn4V&7_WdPEVMt*9tmhZOSe^uh`jOR; zYFK*-9{5p`gk(s$G)QTMkR{|`T=RqyX732Kuzl-=CLux?28kLatP?f~slpcg&la`| zohW;=aGOvd+y#rf1Qz!mp$rmrpHM067Y?HSA^fl7o*L%ksTJl4BKPr_FPb@hi4em* zJ*ns${~(u{H>bb9;q&6p#P)e}W(($v*ryF2(}bA76ZTvxB?Govta=>4jkT=8lf=OH zu)z1h!1oJ*@3&AU0e!1cj|ej6wGv`+DFm%}BZEo2f!~qfi$$5~sHq24YK2x-170r* z`UQKA6%xe*fM=-CBJStkP2wXc(IP&K&nEF9d=BOHn6IoE7whQ&zFB#c;LlP~hLt6- zIS9u?#(ZedcFgZJy3hTC!TY4F&wcpW=(VgoU5_i29tMnp@G|~OpVD_0fgg@)lrlwVhO?F!Lll%$!3-T}Ir<@jNl(WX!>>T49=bYf2@0QzU_S9`L*-=7*k9{j3Xw7LpKD_)%AkT z$f0WobVCBr3BN@BQUK`6f2sPV*6;V9_8<5E+5fEnL4T6(a^FHuA^Bu1mXCcdhDL-nI11(`OE!dF0Fk$L~IV=keQ*?>v6X@tcp| zbiDKUjmLK!-+ui1n~pC&zTo)$;u3g0S||OD`bMvNRadd%2y z<0nj&B9_qn6;eK^WxRQp2shrKA-)Vw?+`wU2!A7kB`TMXM%sO#2*{3 zUVqJ%*KWP8W5*4`_FH$}f?Er5t&+;{eFTAk&nf=9K$8XZR?JeRkp2h}GK%*rWy06l zk0|8t74H`*{uCY&*=;$yyDxzquadkYU5B@CXTJYO;C-*6M^QtA z8V2I_cwPLHjB(Ty=p1AP|Ds1XtY5!@T?}^rzv&J133yMOf?#!f-QFC2w z1@2!xXGF7QTIr1N6?Jp#XX6@UnOi!;vU22{5wj9!m(GfLt^MZqKjI(0Uc=v@NRfX7 zT}FSwe#8*$903Kl;PHJi&?2qDgd81!IO}e>&;PE%vLY^E8m-6MslPwaxV%g z*&`)x=jGCc>%>fTN^@dSjm=d!JiOX^eUw7AfmEdL9vTsySFfqo4)bLDjwQqyljLMZ z@(6=SzH?~v4D_!N(P?$l8lu9SA#>&!F0$HfE|b1d_mAYwldG%-hcZ83=}H}DnenJn z>&TYNv+sYwRHf4ugPQB%6WKyv1U4pU!CdHJf#eXkDO*Cq9n0a*x5jcf!*jA3pcy2A zoVS1{fu3saI@+{-R7zxh^{C;gwz}%F>=?5rG%P2^oM=^$JNkbTN?+{q(ElloOCMKV zRuZ2vrn-E3s@<6srcAX*Cxt_2}>mpb_FnD1h%?8_zGeojY19w z-$3vbq?ZSVfurXYfuSeCEn!TjEY??tg-yOIeqy2By)oT9H@+&bp>otTk1 zr#@e9iISvPB9m%DwDwkyT$yH&N08+cMp}$_6<2EI;}de0)!Uqn8Ka85MK)JWu{<{I zs)SNiYLq)WBqYzFOH-&wX>w_-f+T2lVJQHd@jDsA`8~kx;PYCq&LJ^4D>2evKwd!! zLjX^(QMlF3d5p|zpOn2QRiSEcz9*9&y?orOFD<&sYJ24R&rZ}}W`BvA?NUvvn{%Eg z!IQ(8wxxY~#^R(9O?&Hx;+Hp$eC4J29Z~Lwcf9%9MD%z)xruy$dV1_jdc0Q5A+J?w zReF@3?`Ou(jHr)Xu3VN;l`$rZ#>CacEn5~>>zwG$r9ObhY6Hl6SIZ8S* z@-fd!&!Nae_#| zq0?kukr|N@YOKA|Msnj~V#3n(p{21pZDI(?)X}#lrj;za-J5W?nNCP6TYh_f{7rWG zq9HkZr+bS{@)}3d*3|}WsZkCbu!~ELn59a<;`U~Hb3`{8z0dr3@uZtN$cagpcNO7* z5RFpH0CR#M#4BBZM*1J*W+fYIiSe0iVl<^Tn=jf~nmT$@tU{h&s54B6l8KugTkQ9F^8Y8%%4AgNeCJ0$u&iW$x;pS>WtDB4ap36M8)+&78lqJWchlQ6VMWq{QT)v97s5P$Yf{~uo*%L!lQ+0GiM)`(YtCQ|( ziLylKUn$Kf9AXVA&nPOiC_$quK;ip9BSv3|!x+zj%Je?#oIC4nmaWZ~*39o4%~p%E~pG zk?S{m?M1QGMRGD?*qkN#(Z%Mi6>+9aqq!;}JUdEJR+ntcu-Ka7!}E+}Ly|YtGO$s;5y%@C7$f8aCLcnMzK+Wal-x{ zox#TmoF?gfPJK|Im*5D_z~GRPSWt=yZ)w(e66&{*G=r($BZ?+NS)SfFH^n?|)XF7! z&WbS0guNGK*-1r($Dqs78*5UX`NrLHWxP&Sr%e%??@-TTtW@)8`!3mp@te`9k1M(yuvw+)P2@s5*O2Uz>fPlo>(%;6*shPy@ zC516{yxV#tF_E)cL2*n~s7v6F{hqEM$FP>eY|#;AyqB)9`yL>14qvH_99zG5;T4B2 zK_4YTE?q#_Dv-%G$Zk0?quW{cFO)tg38G{H_r`rdPp z=WOck7WaY&@1mc>Qvt~x&-srF!aib9l1EmvWT-JI&Wts3$7)rJHM&qQ%8ePO$Pw`& z@+)oGln%eVJ+DxnDifne7wEMN-M@~hHCqxba#fVm8?GL2wJj;6bWCbmvqCYvOfE~x zb%%$|kSy1s{*^KnJs}JiW&nvCv3sn+7SI-+SS}<1L4XIWT*Y{DC1bH$a7rB1NBuBP zvhrybWFOun{m=L-O?HJMufm|KCS@%fwc6J<84VMZWZH-|BiCscT=nFPaf*47QP;kl zk@4*8s%76Gyu5YB)$`WqNbS(lnB;LY74nPB zvJACWq=v?!l?7pPi06?NS#oy=Wr+CqR=g}i6p7w6w>`8g|zJ?H5cb5 zEw7N1BDHq-wo$uEBIR;Nsn)P-=Kh)}x!gKoKRue4QaZOer^49MpwkQ^kA=$=&cr+w z@wr^kWS$zvhZiF!J6v|MX+wXLeD+i^*OMs;0sN6UynznESElYZG8s$DA$%Zf5C=3XP6^*S9>ll9e2+rr|s6ZyaotS=J63k6}P$Uy>LY@ z=*J@=%1})q%{xidfjs*(rE2KKId$_kPsuTcrfJ2iw$P*V^2hGGL8G2&)2%HqIfgBZ z3}<#xOMs4SJq3N{GU391l9))Yv3LDzCk?gxHoM6r8!3ExEj_w+H{>)C;OU{C03Nn( zgW?R-aaVQjq=Mbo=_ciNQs{fByF8;+4rrCm%lDRpfhoug0ykv4Gz+>J+3gkWBgZR8 zPmXllJ}hsf$-4IG8yllFN_w?=MudIc&`d3@N-dgL8yB|6POkK=7(dY%#w^&6eG z>qoj$BJFa=B$Is6&^eZ{$vLsLv4tFZtZu|qK+kY?0sI`%h09GVeE+KL+}T-3VhV5C z*-09GkJ6*QZ-}wWgM#o=3S<##!GdHslSMm$Em#t_@Kmx3jtY_Zf!U3b;cF(g$_q~E z{5^Zr$1W?0ilWP1k9BcTo_F3Ue{~#Tb1Ho2mU<(P!JxOiWYT zfqKtmy(6u?S-aHetB7lyP9)GhFMlW{y>w-HZySUS6D z`0(s`^>emw1ZvCU3!64v=Dl**&_%Y$OAS2HNftpnb{6^b}Y*F?GWnVwmDil}$V9`bTTyqr>ebdx^{U zFM2dRrKF`iMCo$d3S6BAjahGx3{9Avsq?N)a-~O^E#QqN*gpRNMS^~i?gcc&^4Ydr zUqczDo8)6)0)dl`{;h+~)#>KMs6DoV`CIiQU#S}V#MZh3*>*a@?pl%*nqteDzR|9( z(&|QT|Kkw7iu@8LZ%~n9b409BqX~D+RI4X8szYW~BPvK|N-FfOc3DC@Edvx&8w?t+&&OUAySSwQEssC3rar<+|s2 zK+a=scF%J!-O)M6Hhl6`H~&%Ys#U=w#dHT zl5?l{?>oc~@1!YR|3H-wXl&PeG>)|$9%!4%JCoZ3{VL{Q-A+#4c3}L|50U)q_qROu z5LxEy_~|FIkj(w+E7UoJI`QaBCDB7b{faJ&Te+xvE30$FbFde07QudzcL_*`q(l7BHeTH$^8J8E!y4+ulLk-vv8zICzX zV~0>a1O;`-ToO`xKnCD>BS=~ha&?GybQla z`lWW=F_DYOQmQcYhXg0UF-1h`LeB9!MdFO_4Zwaou zxl4^Pi^r=lFil}GGYw7+vRjnmxM3CX>7-1fO{*)c(~0tES($pMO?O4q^6c7+GT<6g zl!p;UW>|TMsV!&46c10{>l(SY-Z+Cbr+uJi7qgyW0 z>)T_r9b|Gak-Y*t)P8y^R9B z7*k5hp09ZZG@0n|%|va^8J0-n$CbvZ)tl4Tq~|Zp&n`BF58FD`n@QR-!(78<4Wnll zg<5x{8%w+`i{`s+Q@oiKV0G+`p})hx&dhprd3#A`ZgrS)G-u;SZq!y!pPud*O2x7n zcH4|tZ^zEv4->&`5sUw{#CM~ZV~!|~SIDm}Tc4D=q|j4ti7c6IF)#9_ zT^C{=QkFnTnD!%wu_QbsLm9FzPScv-uw-7G4Gx)_!nz@m29GI~WKe2NWxPKgA8!DE z3%-?ZF4c0FO^g+T5|);Mko(PTlR73fo163z)50D4vhX-Xe2A7BC&A%ya8ku0lT4f= zOUVOXHh%)$2E0-PHsQI2!z7>N*H#ABt!2!e)MNNcJ)OluRI_Pi)HOwo<8$*hRNO{V zP1crFqaw7{YYHEq?Jn0FhtAb$$0S}>mYI%aZ(Vk3ZWwiR9l0{iWV7X{Lv&$Ur(RJQ z;TT%35$m(7FP$H0o}eWY&5d>AM}{jJDo2m9V;Mn&DzLzEU~lci*`PvxoHoDB*#4fDc5FX?oL)FXshCMhj<;v5>|^Thiy7Y8aFuk`;Z9K0*5kY zQDB4Sp=*q_)uF~_NYa++a~&#Gb4R^gkvlv_A*<R}sL^+rj1M)YYQ&mYx!iXc(899DNX0Xq8iYp@lD)@je@9sD1hr;T zyipphil#(88!boM2qmeAN|1)j6Pb%?+iF)^X#qt8bZSGZ&5ZeM-Nd-Bddsg0-n;{P0L9Xo{$)1iAzLaY@Im z_+Ood%8t7`imPU~XGGP@WOWytO|zrdR%NH<8qL*NX?f_gOHFKJM`qWqTcA)(4->~( z(Os)e)l@T~6`e}!q0i7Kb{@J%jfoYo$^H&&#aN9dL=_!jy3|&JL7LmHqhzaWjqgL$ zWL~~z)MS!`?UphAl2%E~O2qQLN3!(t3o{Fm>s9XXfJIB|w}=J$uxg_iqccxkrkGPZ zdt!mtAj+;H=4fw&RcSN0TP~G*RjR7hS7qpAge=g@J!&yt8Di1N6^^u)r9%>2F@<`a z+8kvJk5y|dI;AEuv#F*yL|N2qv8&agfOaMhemZ67}HM#)3b4+Fk_EYQ&EBFldrvIfo3myw3G@ADFFuL--g{Y3@&0&vE$T4slf(BJ z*tkjpFwetG+^%iDTNB*c(DW+1(W)_mtw__Yap1fSH5Qe^D4S2cMvDP}V7r>Ic4!&e z>t$oQy|gUCcaVfd_{t;5u%9BRW3lh0#fwQHb8hmzv3DR3Gx0;oSd4qgq+M5Tc@(kR zOof#ZrWCN7Ttu?*HzXo?#}Xf_QOc7-v%_6ZeXKlL?r~e1%OcdWG`S*ECo{{mmD;q3 z31Mb>bcR`Dd%ht&L?%}nl0ze(cW5JLq2?s^mJZ2EWzk}O+am2t6x8_)tDco@kc8szloDFZB zWms7REItOX9suhC0KeQXymqzbEP#nHP1s6n;8NhL9j?JJ3;9CUEh!DgsN~1ym^o@q zMs%jbkr=9w5A&?bh{|#}5<-)^Sye6R!g4K7XL;%ny$ufZZ=3LGMk#&Qh{yt;G!|GozC?Jym6ulMI@O* zZXKHIl*u;7&B`sZREEc!>m0fQonh!kQ>7`^Qft@BHb>u4pBSDULK5WUfNzhkGDN+` z>kwyMqzJJOi%q!rVw+`-dh{5X%2Dlz*2GkseFw;Bjk9Ww!B8E6B?A$%Fq@atSNWcW z(#==f=sw?@&14m5Bzbc|I1j*wz=P1>3vq5Cao-p228E!N{6)K(Hb=OXsv3t}VMOZTA>d;9Uc9$_F-GuR|6x!)V%3}54DJR&=W$-X( z2J>KflpelS?(teN;C;0v)Yj>7`4iLy#UqN!Q;R$zot!^e<1HOg;w|&GRmWSggH)Li zksd}vht@Q@>@D?8)s0caPU*0kW|y<2x~00=Io<0@_J*tSW7#Jtc`;`BpXjq}&5Fs{ zJ2V69JHBeArMhjJZMtm<9SPfY+cn#@9qXiU>{qFcnsdg(~S4OB5-ilmviUg9&3u@ff^*G^dJG5-Z) zf2O}MD*}%CKEp~R-%kcbQQCYtDa|q~>K4^_?0J}x-p0*KQ^G>75Gx8I)S>FA&U}w8 zS1wN|ree+FHE~+sgKM!_6{EkrfW{~_Lui~GOGu#rT3&`(z3AD-gGh*(2EgMZsAG%|Yh($m1Z?|O#uxy3AYdz>V($`%{_diFMs zFH(h6rzSxqj&V$knx5{R?FlVVDjSwh^MozGcI>dlb8pVe>lo9rXzopU37Z#QY?Y6! zoW#FJRg#Blm87h+WrUiHo|kNDjZK?7S{*XEEGkY#oKr?#dg~Qy6ZH7LW#gqDef{*w z>l}_1bp_KWuXi|B)_Q^2RH7iyb19sHlStq*mlxhuHgdtSMRX3IsJ%p;nQIKJ*_D|F zs!;NwCmo@_kBx9COq9`FZ>dpMZi|Uc(V0`T41~5sUO6#LCVEJ@T&>WmqYGroL(G(n zZf&hnt5gbgdY0Z$`eHh@GvcMdU;1 zb!-NdQ3J6mrOz!9e~Dbx7SSwy9b0na@^RyqY?r<;mu3s2=_;~{d4WwX5d*!B{8+Lw z&UZQNh7b0!Gt%C`7)N%GGV?NLLjYhj4Wu83VFrsl;8GUz;ryda+T*8A{?CkQSgvU0 zv*db3Uc;;mLuib3*5<8an=!(BRu4fh1!G6Ikx$h#`I7_aZ+x5dQ4GLZnjOA6dsXl(mmtM0i6fiJ!TD_3IlE+r0flD-bP%rF2uvj2SPDtVHeB(QBso-z7fH)q>YN7`bP zX_X-p%nQP8vm+FVQI%~bGOx8I#TuCv8J(Og8+S#dyxOiFlIcv$VvcZO2lnT`Kp#xA z1}rm#bwTI_qC|KfOdkY?y0_4ClL(zmQE8OL=#oPfvN6_4kxuOK)ul9Kl+CuvWfN#Y ziX|jnXC(hDBN>W=9S@!3LC9SwWm+ah^jN13>K9-BO%n}VJjyh`~Yv;yOOsJ z6!VgI@2H&xcN_d|1gokzdL1l>c-Ti^(_RkOZmU@W)C22)DX;BY?&+vgW@!z>;Z>?G5;hUxU^&@+#SEoUAfugHhRXRe&W zREcn%a0uQ;o5YR4N*_KaoY>mi@yvhHA4l|vPO=FC?9t#NoDsbDh}@c;6k#e*lG@nx zqK4>__;jP(sS9_OD$?bO3Wq)_CmO49n}X=j+YxZiA^1$0&I`r~70=Zziz^#HnU<6^ z`o>@pAWVc5{3n-!5rJqHuPHbey2l$Vcg}pc)#!WE_~~SaiYCfr1=GhyYf`9K*qRk> z_JpW2o%m!zj$Bb4rPdBBQOFxABAhK{GO@n0AR!}PFAhma$0z3DY{)fBP_BU!%ZSG- zm%d1?B-6;4z<0~i8@OaPMz4Xg!bp$2h96c^+rXcCPxgf8H6{ z-CsTL@00UP(4OAg2cD@ioLgkrvYDC>Z*w)E>CGL3o3HWb5@wJyn3i!o{@sUegPqo= z`VyAnyi_ht#XOGVe3zquKIO`lo63@P-!2(2i--g3ufncXE8-$?s{2$G*B_rBxgB22?k!*_`aYO_TO~gUyp?kH~g}+9UGg zM@G9vG25(j_37-IJV%ly(vY>B7$~t|87|{=d_lZ9K*zA&J+o*c*EzKKbI{D})AE(v zxj&*nxlJ-BEXvUGxt&-}P~1 zgw6NIM6$u&^?6ZkaTG?Z9 zvvmfyxXC7)*$OpK7n@$#7+n^})qut2U0;^eUql4Cs0<;4$9$138&y5W^jXBaC zA3_(f(@+Dpz@yC0i7tu86zSap=11=~z*(eMbP9ul?M|K3%uUi9>D3aOAYuTTn>jw* zBi{?70H2=Q*mXf(?P+c@XH+W1f`C5VI{_X>7Zwo`&$b7-r~U672NpGQqIXFaX~#_sxE1?#s5SaI@_2Za-3=Za-V|9Y~uu3gK6r^g;Nb`)H zC6nTb!dUbYb7A%l7EridCMD-MW^lskgjINFv$3hNcW9CC_`lM7qKiBa8p)_ulG_tw zL`J<6j52zR+1$`rVkRV12tP|A1_Mq4%gA%&Q?GcEkO5>9N2xo`4*>9tCqD@UR&(2zd4}b{Zr+o#2?>@GuYQ zZ=w&=PQMDREc<8bO1XDB4UprotPcin+Q?;%C2CSIC4ENC*y}b& z*|xWhPn%XV`ua`wi0xG4yFYi%*i{Hb_jQr61s9E6VlcQNS$ISa=2awLDR=Ko!<*A* ziO6Sl|8Y5&a+%$KYz}>zX|qB0!Dnj!eO%3j{eXRN`QOtE^Glo;6E^?)?1F&f8m%AN%jl-OYmo1UJz?26W~jXn=T(lZx#C$8u!W(M?% zE&4ka{!;Yb|G*jxV5l5yw6XanwXxY`X&J6mE(;;bMZ_VKW!6r|oRi{fWq;lng&@A0Ys z-x(h^uP+cKwKVa64^{yU% z3A;*B&aoSgUEbe~-LI_96E2jg)B0b?%YFwDN(Nf@W6{rcy-tXCA~vNGCrl=SF2QXs z58M6=dch(2rLB2(c8A4A@!(FrZV#^Adm{hh`-FMM2g6;I^gmbUEh;FvGz;N3^;Ww^ zyU?YnR)wV34XHEG?!ZrD61D@cT%0*{;yiD9n6FcrV~(thSNisK2Z7d2bBW~gGPQP! zi;|n?rG<}FshW&(La_Zex>%)f^@#`_ks#8NtgM=Xp+l;pEd}AK3{`!CLM8^HLg%QL z+MBg>K92FTc+EH-uUYwPUW?!+e9&*f4{~sqUbo`{!GEovU`JN+ zJ*+^~0rw8EI8irSY4AAFquk0X-Q+Fl4{)|rb?&NZsl}IG6k%#q*vq!GRCpcwSSa6eavve%5e<-eFF&h1y;D6~pau zl%|=qu>(eUNBH5x6CE58o##eCA4;K1>xElc4?wDp%w;cF& za%OTNA+i&xbTWAz{AOZ4WO(Pj)&Rc;$Jcb$Z#p^Br;2+ zgtQ;4_PSK+_y}!`D#R0^C2j1NRTmwiPKbodKoqq8WAsIu1}{J&oBO?dP+Wocc%hh~ zh73GGKa||d{ZJP3mT|F@ECm|f=xrM9;^I-U6T)(JhLKx!x{FET4|eacOqDXy_x;Zf zZ(C+UTtnipw7i8gEXKtlqzor@Q*&odk2E9Po6P=u;z)gHL8)r{|D=tnZouX}4aD=F zmb_4|0V8_jnN`t$RIl$*O!9t1dnH{VMGXIH56q!5Ko2#TzXNo@HB3(r@IMWV1JhzpJl;eA{nlk~*V-IAkW3c@%3uk;rytQw)}>f#|lMbHZrqkec@PbbEKC|6iZ$j`YvQ@lD^! zaig2dM-+KtVN31^%7`522=PCy9VbUPr@f-*vw);8&RwIIx>o3@vwgu)m z+a-Ta+!WZ|?X?%nW_#ZaS8@r9uj;eEx*V}ql8>YcaajLrJ|Faafh*|87>K`P;iv{e zz(|T6*u$y9{E;BDl&>IQaY#p^q$BKS5vej+SDBDnZPzH0^VRC+KIH0bNwVgLJB;C~ zOlkF!4UJVvzvGk}iGBhRiWlmC2&l3?&|M%Q*Y!o?caSu>57I0)+{!aS*tn-xqAZr( zeUDrq161$i5To3BS&ql0Nld&%N2_BB8oQH4xQimflZhrbq)e$Q%Ze}sl1E_HW}_c= za>>5acpchJJFy|FHDK2$V;+ET5F6=yKZEXr*ZkbYa!3R5mAP)i5bz9OW>`Eyj1K@^@RPX)PKl8DkN&(neEp23{+WL^K-S3X3{c%yG= z`Xfr$uQExc`_PnG_x(g?oI_J=P2eQQ`N{g2q%hA%Sv}L6$N~b1Fa_(2IDW!^FqFlS z76!nt5qEt6g!9n%zkxL+>^|gR-HTj6c6Mg?tiS<}WO7Mi174}~0aKDZ8?fQ~%S`fw zWGUbTueby|GwfU&EWW{=;q6Wo2SM>`2YShz)s~R5gcNmdgpyYM%JE(jH?<+%A*P39 z8A6%v|9>Av!A>+I*#|P?vID+2HIu_4QhUPI*`5?E5ClH-c(sx)%8F(B_>(rEtge&)P2gC9XJd|=4?7QK8Qs&pBqV& z#58YD6ip+y3?whukqh(AaSLRSUK}!sbw4;4&JKVEX(2@~y#~2ZCww6sg9J$A@`A%G z8Xy>< z&H|I+6up&aT0&kyP@Q?f`MH-~&hTJxn1t#=gP5Pl)bWZ?rjC7yeRBwv4$*28q2EfB zAr+YsCMiV_J2!9T=jL;Ta^`LB@wE5+CGj?M^ql3$l^`-P&$@@jt}B$}DNTCx0<$dB znw(%+TIeaW*aFAs!+M>uk8f`&lVsqzOwbk(xj{Z4?@AJnaoBLkc$Polw|ig%;(m~< z@R0<=;JCpJ_yYPhN96jID7k)xF2sGF9{~E5>D|o&)36PEZt%=cc&}PI_7d5yKhDqe z8d0`d;x0u=nMuqQ2m@xp+dYMIB!hbJ>7X9&Yorb?I~0xXV~{dypXWXJj^{mqt=JQl zAsN!YCG$Z)=v+uLgj@R}h85gz%Z)%v`rz0-rrZi5a&86n8dF$7%sSdAFgqwProO)g zvU#x++`ny1k?Dm^P^PH7?!k}d!QN_maAWB!?yao@BPovNBMG_vdqxuamBG(3$+?g* zoVePoW>!ajxDxA--#UW(B*fHN`cRA>i>yqQW~6Y6&&U)$BjNq08v^$a^ZPi(hujoD zun*V}CYBik>B(4P5Em}#Xp##?g-hw8&%;(&+*!*qqAkXs_D(yAvETHp@83oeL&sEg zeZ|wGnX5Kz*zh9WK7jY?2-J;MUGT|Ec1d@fGk41e4i7RPz1zD1w#a7vW=G@9`lM)O zQ%9{lORcHF+2QJr%Zl{e1lc?$DaPw?B5y>4U7f9=1y;N7FdbRNWDVN^P>GL$FB^fy z-@%u#hH#(lcl?X~4DHL}&deGKkV`$XYCaZHpygEZsL8wVeTY^>@ zP8;zyi(a&X1;c2y4`zczs;6NVAZ7|B!MP~OB!G!$L6OK47$JsjpOHc46#Q=DBgM1j z1$gr+&YRdF2;@z9Qk;yq`yidLq>>K0c#)?-+8U@iD{acKz&gUwCv^&`XUp#|{v zZohZB7DeyY`{Zsp^JTBbrQ9!zKxH*r_U6cW@-9;j347%R-}iqyv^Ke8X$P6|^eNvv zFTI3PJO><|jMbTxQJ-i2<2#DM?0-aL?o25KpcGrj#__FxW|SU+j3k!80d%;RUa$?{9(pG+0P6{^_F@c)FT9&uRsev=4Ct*s?hw z=T;ZT7ANR>jcE{~pU-NGWkBo$52!$6(2~e9T`+k1w!_Hr@>y*Fo?cBr`Y-{4oQt6z z=RAB9D@kJSZcP(I3Ij_@qWUIPU^P0BKY(QSLm{8S3h)>zPP zZg1%%yBADe@XA`ED4ASBmZN4isxL!Lwx{bgFmR=ciA~0)#*R{aHg%8#X>Dn~J4r(3 zhzv3fT?HcW_aXvc$8ii~Ze-^LdPUoZN(|zm-I4VYpD>xb9Cj)9Id|uKId|6;tqrup zYGO?fkgkUx@dS*RtC_$oM4JD>Qv!WvQZHbAmz^^x-C*}&7DzVCQYps}{6Pc5Z|yy2 z2S8+RpH2rrsJHRaoAwfa1!x~|&-B7*TF@r~rPPf|aX^ywj6ux#a3InuU;yaJok4Ng zf8r!Mo%i;Cm6hqY=MVkAf+TnXViR^!e&Y!det!Gck3al@`5gv#BqN5|AHlu*BY~aX z!SD0Jp!t=(``0)uzrMd4)!GV~C7r?Gwhb|I+XgZR_xVmVY#Zhm*(NaSrVX-8I`1$P zT128GJas)g)V-H`R=zs#&hE=oXRyEnwo^5T^9~c354ey?kwKkzsM>*l3_1q&OWko9 z|NHyrtGeO(b^4ZbpeWwcc0x7+u{qI9OEA9*e4D*V#aG544Ery~adVy@JV-fuFp-S2 z`NFm3OoRBTmIp z)T?q6R%a#qsH7OWMt$*orS!D9TiXr9P~V4$ntYL=}lg zGPa&@iWQCqWClhwqbTLa1&^})xQymdo322F0>I-*4nW`jGvtCl2azSWi1ERoQst5+ zX|IIY+o!;p{G4gGRtjWMBV3pE&7?*iW$fQ8otl&z0oXxvVlBh5EBI~L^|ifzH5qUp z(|B;`c3srVRHA|k)}NF)&e2Pc1+a!oyT^jt-w|FqMyunAf%JckXnYMCMuL zdaK*B#+q46zhSHcyB5Db+^S%j4{}=ty#v5msB<(jYXWr1!+~#jWL^aF3gvj#qp97b?i&)iLc@z_b z=sDws6fMD6a#jp+X~7dpWP&|BJYN;e6_Su9Y;kv+TrkyM?PZoAxQ9*fB9 zRE4rnevy#|t0;P>A))rb0~>!%9`2bfmQZZDvfPhxJon?M^HP8%Z(+(N2RN}U#Xyd& zzWE>fApkgqhnY*r73{sH0o&X(;MfJWkk3C=X{00)lFk~kUK!H+A7jx1$z)uf|si*9!t>rkBlE zybVpqvV4Xn2&;ZNfxAeN1AMpQ<6FpAC42V`(<01P4Z_}?9{#z2fDUAd56F7t4W*T0 z30BNt1L*PrGKWG7^ys^R(ul6=qxbsFDN0g%>Da;Nv;RNHZVD<(r%NRd?f2Y63!4P@ zrO3aZx##v;f%$01aym=pHw7cw0?Cq@1n6^ym#@3}KZkk?U*8OL2K81fuYxg}N2FfP z7j=jjv;HFvb6GF_MjOH@+>N*76aIm(n|k3LST}9u>n4V`7@*S=fGCN-)oZ{rzrS+6 zYJjuAy8cg3!Q)nCHIMeASK;Y zl}?0XKcZ)+=UjdYtUdeZsr>GB-9Q9;ny=<0+B^Zd$h>3d@qD}$=&^tP+7axrU!;%n z-q<@Rto$7mnf>pS_nk6eDVDDg|Jk-Z9imBdt_%}1B8w^#Zz*&2em%vU&N8pA?Sz#Uee&lqtM(*6cZkjN}g z(7gAiuLK+q6Ee|lOP7X_JiL7-#eU6=75$_-W;+T+^$K|s3y2$A*)LU?T-l3depz5w zdOEkl3c0*l1;$+**p)ucccsVk`-gBpKCu7r9xsoa=xB%MES9XcrOaxBod$lAO5e;+ zu1o$q>Fhdltuxm}&-r!VE5X3p-ly25v@4XqnelyS6UhUsBy7=7c<#w_-jzWfW9z)` z7iLI4SSbVY>Av;dEO+JEd63CQR=qnJ@=?joW^aakAG3<&I?+L!JgYEfHcz0L^ z=1=<8@4x?iR=vA_gkm#oD)rCsXH@LLKM=KW*6Tt@AVi{v3PC?;4;^~712_Wh^i2s( z0=7~QG_}mZ+4FV;Bcj-(-A~D(!PlXmp7U0OUhhKy@UR!+=zg3hVe*CPcD~5+a%0uY zw^Dl=LoUz>ma96_iVIrO6SM4*@eYmtnl+ZIt>tqaF^RdUPD^2ufgEr5ZCI0?8NSq# zYmFnT+KYBYtBgxR=Oi)8HNkr=y;leEcm1r8e#<(qk2C#zFWKqeg!C0%BJEx0v52_~ zUHWzH>Se9Kt^|HkMtHU}|2yo;zR3O7rJ!$9Z#(M(7KOg@UT9(5wgN9$o3J0vz$;)s z_Jy(Aiu74~cOHD@P#@O`S}cX{M9M~gUaPXNPY22A%j7IMy(KN>y}8JWeLR6hPZUW#!;gJ}e7Twv4;A54Jn*C{@gNbJy zK*aklK>P1NducB>sGNGNnA6ODz*=WIogygc=}@ImB1@08m>B1^@ zhtve_B+>=Kee`qOX$;&MN;e3b=@GQEFmPufogu8I-=R!h;La{OUr42&;7)zuPA%?S z$?gbq0(Y*W!-Wb_jxs|7cjV}OH}AbEaA!R3+|2LPvO9G&C$J8i>Yv9}!Q^7z(tP13WMO@V z>u0u>ha1M5n{~Eu)l;6M8|2I)af8o$U(g3MW3Z3nJ2K!Z;pn++HTw+EIS zlgtK^$`E<(?xqbdVix_$A81+4?Nq%IPJVFrtN6_asNFfJy6JTq` zWAcJth=k=4jX_VGlr>1?{wtQAh^N(4_WemGDnb)$+B$sye1^nV=VXOPh(xJRwAqQy zJ71J3Bitn`lddQWAL5cJv^Gb@wOO|~dH28IfP^~3I^8yJ0-yZ|a4*_Ou^bi+wiPLL+m)^ep85&NfbX`e(j4D_8 zKc!1hM#gwR?vWF`Bn!ScmiHWcICM!z*S+MkEd|+XB9d%_DKz41nNgT)># z#=D&!-&%Cwe+Rw&9W5bBK^}|{hQ&)`x*mUq7R36-CX)`AZ&?<3Jd*l0@7w$w>ihw9 zUP2wrOgU_0_ReU$ixibiT{lOQ6UhqSwpf}S-SwrG{4sJh`JY7j<`upW4Ql=sHNOb- zCdISyw|df)Z6keu8oBM6Z4IQdVOu0pJU>W%zGEbT%@+T=BBdvxD|kMl?sIhAo^clC zCxxi;0hQj=i>FdnGigo50$8n*-IwnHxb#~`ef5mV7maUjc7z(k(=$p+ni_`J4Jk=X z(#Uq>HBX}1>PpDW&PYj!cSIRAM6{aY<1#9S6ep&beV4h&1~O~e#4)*gx$nNj|4d|t5( z|2$9jBw!B`vnSwM(HW!?-n+rFXd@Vk&VTyuc@-$uO13`hTM|hoj`sZwGCfC1eb2Fa zn?T)psE5cAxm)DyfP@~HFLd5r)i{imt+FNgp52Mr5=qWX(WQ#v*|l9iNPWJHK4+pX zEFd`o#iW=H6Leb?Vd5@_?%BG+_sQy%Ra>8VDn$lyMMFu>A0o+nzBuxcFPi$gzE8Bt zWHK=?isj?>KMPnsL3=n1DGvsS`<>%vEn*))7g5^r-;6iu{Oq`Z`L#h|)|a zvUnMckQlh=y^GirKLAX-(~2R&77YAGhz@yF=?h2ZoA$0r`xwZL#Id5ReZ8i|Jx|{ z7^f^-g>VUkR~<{+nt`}#4q`y=(1${klbh==x^w8ZXNadQuGAT$ptsA@?0I+Q+})BC zM|{=!LtIYZd(@}Y#L^dRHp3u)-EIX`523f`@IDA87ce(HY;zi%?<8z~TG{+e z+Y&{yUA}E9nNl&+_c@!RYe>vDD>jEJLv;In-(#LacYQ|Rk#IvAUG7k&hyHW>w%fmo zrE|F$TE%!+DC4r8OOFtS6BK;7wTy`AzKN~dTAzAoVl-)ag?{3z@;yT;$kWG1&DiLwv1|4HZ&-k3tHndstSsdT9hM3 zsD_oa#wFRTX-<#cw?mhlGndTQdoqUE9qCR4Rug{*a7zOXV%hkL(69*qf^g-psvgyM47yyV|0@yIQS!ZIxTZ6Ftt*;gbErP9`xT22Q?{PQ52rYVH zcD=KnKjUj2Jt;Jqh0YGK-kj3R46|&WziT$`74rE;v8_9{vbwx%hbv|Fne6B#jiXad z=bvvf=Va76QUhgdt40|LxC~Zrij{q!c&uh$RykXxAu8O8p2DmxVJ}heF6@rg4ibJG z2~t*Ig_qR{ayjNWz+d)_DXQO;quiUlwz=7Z+i;xDykPB^`o{bM2QKuQnyoyNvo#N% zlKdD>XB$>duF5;%*rKuBv%=vNU1cEPas~4m8^;zDg!8%!x1LZ~7A~nS znKOG%U44E1j9@_>v>TGDyXA{u-?uXITj_S_5kgy0IaPfwT_TZ$`f4J~<$spDK;QbDT0jQzTYQDeOr2*S*9zgwBj-n&cqxAcH#p!dEUGgR3*y!hF*eodmKJSL zi=!bIqasXPh^3wcis@Gd)~dH5mmP&g&8-s}3v7;tU3d8MGD3mU(#p{#ea4(_43e-r z?LwV3cig0$v5kQ|lg8rCuP*fYrfEH%x}3~(uj@}O)wNlO4{mveUp1%7pXIToI73r2 zgL5hvv*+ZLWag%&dM#PUWM`FFtZu8@pE_IlU4|WZ4Et!|CXJ7@@}0bhR&fa62y;r@ z2NY0U9EAFi!<>Ala&OD_)={#S8;TvwWOk-m8l6s^{~4aGq<;Ddn-sEf+Y+70q|tdZ zsy}3%pw{b=?{FW{bAVeP>&Fq@L%n>cz7FyOnk$W4BAd`c6AX25JJ$|9)A~Hs1-T)2 zMv8HMeO{j1bNVS6?BSf3=ar=vSiEIr87F-RU!wG)8UsZuSGHPRk zcE5vL*xJUz#EK4O?_?DfG&c1And|LE4v$lB)1{3Yd!n(Yw8CM*wJzzobt~-5;v6+T zt9!K9V`cN|!(qoQokfL?)MGsEX1~Q^HK*k`J$(g*EH$+-v&fXC(fcj7I;|czEiJd% zay7bQn@z~#&mvX4j=xSG1X^9}dM+q?j{Z*Bf)&17)a8t1>wYI!+(Z-reohj_~xxE#|;5V%8q|dpZydUE3uXMJc z*JW|cVog{(d_1jUOfc23^30`BDs^0|byVAO3Or$Kub!=(WRel{PNUOtPGdOoZsapQ zkLQThih99nHExyGvgfZ|9IiiO@QmW;exrP7{W|+aUV6g~f1?sZk?(Ln&nv=~ERAMw z$g%jWWn)n)5xY1^QnhlDyXCAB*QV*+4_(OSFmBM=^iHkIq|sWkE9QP35-W#epOCYl(MUf*o|4?9hgmEznt6Cxq0^pP;nd5i-iqp~TxPA` z`M}Ppnu3(cy_^g%qU7W(Gj-R4!ae)#Ww6Sr-cG&xlYS%(@;-*^XxaxYZ#gLko7S0LU zjj1|oo`%bEb2hss`vI5Bo9fib4YtbFncKsKfgGPvMvvs=_WR1L#_ZP3B`Y1WPNUUu zt0m&cK2G+DgOjb#RYhxQEY=wK2&>!9}3GGbqEmg(e(g7^tTnEaCXL+SD}XSewo?`L{=( zv!N@C&(3b^(Gs7^<~)|F(G^cAgiB)_=g6xb$jUI;ci zYlFq)uBqzko;bd?!EUhR&7VJz<6=3=J0_lDbUU-NeVI;=-34B9H#L-&v8(b*!{K>j zI`e|L!H(=edChqfCTNsb!+E(Lx5;car}?rA1E8zBsEB4++%x|+pNz3jyYi|b3?w2p zUE^J?;z_KO=a-mLY}0r4SUD6A zqa!bvYPUm`u=nhIq$Q9Wbmn-yxvAN?+CU4Nr99pg@aQbEUavJ{A=tv|p?3$s$)E8c zY=zoTztCGjZkhI$>zGIIwYtKp#vOYxMj{emfu6J$Bbi*skJQQftjyw`%0S5HQ|_*7 z_v02by)ieZ^ys4&HrBfgCVORh_xP#$@}1>!dv!%-x`7#O{@m)ozti1zYhIdLc|0vG zFNbxk2p5!O!^nDrkh6i=Uf4d-Ce49aSr93QYZj6R`yJre&|*u{y_-;qh804nBYE z=sL}#k80`)I)h=HFg#n3lcLSEnq_u_G7Up2C%1`}qTSy{UgK|I98KPjchEm#4$UVX zQfpQFGOF;1M|AzHkV`;L^fv+nQ`AiS#MPgFwfZuGp|TRJN?j?QjGD%V+&rhlV)5q` z6jyKV&&~3snoSy0QI4!nP1m)Y-oni$1J5eX^gE2)Y$@H9>#(y=o62f}VYfTW?(x{O z-0pC=QdeGG)z(~7=Pw*rkXIQh4F%oy5aY7NmHy2)CY{}Ch7=B!w1-Lyao1*Xpsudb zT0`qc+8JK~E4YLm@z|+%-6d6Hm3d*p8dR)IkEfL>)}F{Ms2E+{ zzAaX_SBf=hFGT&f^0UydNYy2`hJ)THWXn*t2id&zyKsav5+max@<>%7Tr40s_k)4q zgE=W7)Cv2*<*-6kj$ZA`Rjq(9<6B0ATL0RPUq^4KmF zhQRK7m)2yC0lnYL}H=Uc(f5W~R6Dq~ZSGljl7j#;n zYRqSiS{)l*VV0HC_`Kteqd9LFe=a~&1eta*Y4Fpoo!-xGhS|oYLl+|umNFz?Gc>es zHmo0jYc^~NAIFYSF>?D!hKYqz!s#iPFfLMPQW8Sm&t6krk>$myX&W0XhI0!}p1JPY z)?7=;SxdKF)-KC#&2DDP?OQ+IZO2w_ecd*S&Ja-@C;x>Jp^I8cIAs;z@nYLMNu?X`lgtBR|$-G#Z?Ijn)3TJFI`sd|>y zo}ZRgTE99x*zHU=%iMh=wl?_O`<1)Lrk*3)ddB@66Rh&m!a#9uh%GL18jV&~cel}; zZ!of@dPY3^H84ZC7U-&w%nX=d3m;>K(7;#*U2))&p`LJ&&rg1kzgBfrM@_PHw#X~JDx23CmaFbgTO1A-?vTt_KlaZTuU5OPM;^TPmG7BjuzP#3HFL&sv z%P4Y)u%f_PZ)Bvx!5y3x-9pCTJb?zMrgNx+X$rhI_g%1U|MAF1yR!`Yjlu847$n^>468J8I zq-rEXka#W}$}@gRj+I9r8{0Sf*LWmLS?^$Ceg!3280 zjbo*YzGv^>gb|$DZZ=OiR{6~yE@db~!SsT?>s+#CHoI$cZl2rK*JLu(iugbG&Cec# zkw~z=1MD>DiO@dO*kT^B85rfXD9a16BAB1*>fgi0uB!?&jcsD#42`|roHAi+W$>z% zsa&qKyWfmf%3rK49-ZpwuJtwbrMh}Xn^E`NU-skP2aWQYKme4R01Vy*1~?%_Z$cu! zF{I*7Vi;rK$;c`h*M?&bgAE$umsDfgsdmyC4JaUv7UWgS>Q2tVbucH_Z9H}Ot5Ibg zSvPeS6u!3XC`B0>g1lR!eDU)90>_aL+^;~}QfD1!n2rrm0S0+J3hMlw@u*RimR35SlZs_Mh`LcAlu3o2o8>OF?yAW z8*u&%$zDsmNF69<5cQs6b-e=zIk%V_4<_Mp@6O~&yVAH80W8n<54u|CUU7S|S?3zx z%y19Eh+H?GvXu>(pWe~vV~;okN*uW(o1M5-6LU-APM#3uJnxe3T65++XWGD?OUBij1M3Wifo*Fi zrDs`>-K7)ORo0xk!kxNw>G-u3RhO+c=$CFgGF&sJD72~2zNl?h zY5wsc6WywuAfr@U1mOQO<#h-t-m?b;8@`%mXu=ygu^yl}2_*l~Tt8+Wb>0!-2I;s6 z4CtsI+QZtfcXNIAik3-N3?Advbf;JcahvZx4Bn!Q+`+c+@oSv+F-E~rE8*wr1U0bN z%Hj%Bd}m?5`ypbgm249l)8_6xhuM}pe?x=Sc%W9r-h#q(Ow*LA!m41;Ja1OALRC#0NYp%tWts;Z%iseR4;SZ0QuF&FGAp+eTxVwn?*bq%?W zs@`ryU=u%ct(`EvWR_RIS@Xm=-!Zv5Idyy5e1rcIU#8WL6UjMqta&?wh06Q$?_~>} z`Rjw3N9(oe7i4(+(;4t5%yNJkajFPj0#SvdCidB$+ou2iCRTIKZ9RA2#0HeX;bFFp zt@`8>;ta^x8nsLaYz@X1lNfhz8#;Bc{^Z=@U+o#%Mzh#?kf>mit5IeUJn}8d(At7} zleVf*RE!G#)uf=EcMo-a*+ruwm6f|Qaez8Sxsy$Zk3`M2YK?_-_8FZsH7WZVP!*HW zG4zM(Qu{{5QggFfV`3RXSL5DSmROFk9w|#`gR61oC(lHA2X@*?<|ZmrIMInIc67nm zzetPHMzyGu{+`Z`>n|Hzn}Gw~BiVCMp3?oKJn^~gIH*lW>U2&!i8S)i(pXS~3=4*A zmCyF82Sawj942k>E*ULPWP1Bbnotr+M}<%p)JQ! zGPvZ#E823g!qCsMJGXSDVV!q;*{U>6ZFC*0_(lb=8_|`-@S{D9U2*x;Ej4)S>k4P6# zxu4d9n2VgPOx^CoX(9Vod3rA^T@tVgR$}dYhUzooj07=>{l@8mV!=$%Q#HrOd5PjB zf56)i6+oN`!QX%eSghsZDkQPz5$zdBOWehwcf)2(OeVBM#CvX$FEncA%$iu>)a3lK zvCF~bbbZQ{E}z-Bz2@cnn6{1cqYP<9mEEZtoPRXU$VYRky-m~>UO&r+k? zIUtryViA+d$k7Nc63OS|R@l9c@=4?KY}T5J_Qg{x%?7W*e{|2{3-hh^#xop_qOD$Y zNh0v`n|;lhZ6z8_nBBCA1`s zTKd-U$G^ocZSK5KnZ_EcZ$@uYEX+yZIzP?QbbAwa(`e`8zUv)FFR+uSu{YmHOKnVBiqz5o+TPyL*?3SB;}ro3}SnQuiwb-47# zNu@J#!j&bJrrsi_L!1ae!;=@IP0+N#_e_LS#=#)P_`=Ukd-pQe@#oJi7%aH){C9`; zE+`s&M>>Fb*&?Fd^mDIsnRYaHWnGuZlH^%5S#EdrRdZf3Sde8gI!iR#jKXMto{N@Y2MUr)tXo;|=E3nyyJzFzc;&l2 zJX84;^q z`YDu$4ju}V1SdNfgwtZ98tV~Tt@m#Hsoyc-E+xVuDrb1 zY6@)WS$IKtsxj|p6T2o>r>E$wzQzgFBw$)?JhVAfQBZc-#ELbAb@?UNPAFYJxv(xP zy&$V{azSlw#_Tj2sL@`_Bu!JLkQ}_3y}fa8&J%NhBvC|}1|mk@N1W5Sz>*^PV0=Sd zLL-ST{YYMdD*NL}iZ^pRI+ylUq%!U^W-ppJZAotP;FbRvTak`KPFHg$eKuNoX5XxO zuPj%LD=gYIwQZ*IcmCB;6Cvs{vb~KH3TtvRXSiTPBI27*1rAXAf0#~=t@XasS)t9{ z63ln#JB+5$A+!1P@KK}3U7Vj{D%{c9b9#}D_4n9xWmQuGS#wkPD2L~``kYO{;)1gK z#^%lslsHlEQV;;_A+&KJ+2Bv-@ot|pIA^<8NH=!FdZHzH2cCg^&}w0rhXEjFl6tk< zYN4Jx*|%pa7l#8W_L63IhTCPY4Oq3T|KcDhebU%8z0RRosVjGRAe^d{&5-fkk$m}i z{uEl=L^}bY*vtg3p#PXjF*NC8zpmJiW2h(m2YJRW8@psFj^usaoHx&OI+x_s57u`r z?ya&IylQvlG!MGQmHW)PTDy~aP1j&$%fy#aR!2uAZmMXsw#}ST)fq0@)GPBbcFim% zE5ozutd4}<+&Q_hHp@5Fqn}t2_iJHMQ2bx<9U@b{{92u(g# z(fECzqnf?of;(xbh+0sSiWPc|<~b>;1ZF&W>b?&kcJ|I5oPFo)!FfP%q$F?zdeRd7 zxd)}~q$^{O3B6041XT(9s6j1$tNSmzkpDg33Z`kmmt9Y5jECigBy0@}vo71-oKtLtAt)MM0j2(5A|5 zx4^j6QmfO}%~4+6I9THGZtZkHJ>Z^@o@4~-+LUiLx0XUT!1uN53ymhP3qh5lvjW8d zwPE#1QNIpV6FWszA`}r(iPyWe%K`Iy(m_}c!56xRfM2XP#k3BJ-8CID0s4QazFO7) zZCL)t=1)@E;tCyEGE(E};gfO`K-*ec^U~Pq`5Q-d?#VYZQ}~p&-s8&C_~~+q#o1S? z(>}Gn%wjHUC}8Zgn)G7>B}J8Yboyt6YwY&PHqG1=p)1>uL^LB|r|(>W~BRNV`nO{9B45&GfU z7v|9557)rPVQc(*v@kYzD0=hbBv_xT_*DKVjG~I@569}n*s0<7p;j6_OU#Y*!@l7~ z!67({A$g2`sIP|gAQ(nZlB+V#GSNkmIAE;fzA}AILHE)g@AaPRQwCGIJY8D`J9N&1 z_A-Y~Q=B=cD&OkqT(C2ro%$-vNgtI{IAg<##>N%HkF%!C^cug#X?H%euB(8x7~2XhdzX6N9P)dX$C34&c)f{@4ZjY9^4@7hK4>=m3BxoH%3^NI_rkWj+DmF zff_dCOMIKGnoYZzImfi-n@pz{V6wd^Y&L~YZ|lQkD~sv4HQ=`0^i=)?ZL>Y?__~~9 z0wo3IzwHXpbnBwYI2)&l&^bQfPSiUZSPC`{;6Ra69HTV7Dn)_;n8sH}Ju8Gz6i11P zhl!9k+_s%*@`GA!yGzS7p=+i@HRD&Ae1=2Si$L5Ey*b!>wSV)0|*=#7# z^{c8o?3s;0t2>w7Resd&Je^KsgavI%N>%^jv^C8R3l>#!p4MSXA@y4632C;oRV7Q= zg|E)FrTCq&Y|`p1hP-DMWAR~x%`@x)iHhDY=O}A0aOv6yw{*F?_=}AzHq0n2Tg(u7cZ|!PYVp^k zXDSc#`W4h-jz4u`WX4V$6Jk2=!0@a>T<5PvT;~mgG)R?M39+5U`U?_SL~j^bv5_Bk z;;M}`&}n1B(oJ^Ld7}=x>uRxjD*#s}jPK~`%>#v&RFGJ>Z7fqspM5`hC1-(pTM)=7 z8I2Qmr@ba%)3PbhZj+aEr0QBo(=Btsl~HKAN$Zf9&ct(+tk^s)=<^; z?ComWA9^K&U;Huc5S@T5-*dvM^2yHSX@@_V9+?|{$bQ=Y-a1Ibqjn%2^mKXz zcjP?G{@Tbn7VWOZ73q=VhJ*<@x=x_IxBuFCGu<5ce`04Xc6#^!R;$m#jHyQb5&JKP zJl$W4d_QF0@lHsf5HwT+cn8d=ngP7pIMjH~wf#?Bn;2;f8Kjc{brW@C@|0z3yKgBxW$L=EjXVwHiWe@WIY>l*ShV?zI za7bpeQEl9}EU1;Cxy;$T6X{Gcf-2%u)a(B~R$kNIUxC1bn8(TPVHol1u-_*m{`_L}n+PFEMiP>Cb>49X6 zyxmJwKZk#g801x?nh$D{2R=*CkrHu;Z2-j%98|j>_4M{|hmYIa=OLM*H+hk^cel zTwTuz=tooT*F`V<|5fNuu%rN$NqSVsXM+0cq)()KK+oR^DytR~xElb^&xj~^{)Tw2 z=1&}HiTTxDJWKSVnxAgt86D*jyXeJ71RT|}K+V5fP@-E#pP{%RU5*# zMK!=@!~!Cl?oq}mVbZ}FZAN=yCwn@*M+CE=W4r^5Ag*D?c9UsRwNoR%|1C3(PO(g= zwjXE+@pWOJnfHc_#=h`Gn>^V|BjErV@_7fRA)havCyq-lX#SjdPUn#`q9g4jLGv%g z^Bo}km?#fCCwSlq@m#eTcpB1k-AdwseDDFFNZZ$@E224`wNk7?0>Ld(neNA5Q{UKhdlmpjzKxY(cDym ze$Pb-FVcDaj;R+R>7o$&@h`g{(I^Pc({VTg2HBNS+0!0#JjPu8j($A~HLC^oD`Ar) z4|1Y5;b2Q&mLYQ?3T^WAdzu`NISAiXtNQz~gSjfQA=)lc&uIcI+KcD71AD*r(p$os zDvs6~%VSP%YhoLzwpd+|%>+}e3vFpuaWIJIpe*^l62`_Tre_H>F;BVp`H0NzBy6`yk#Jzlfj6hxs$~4o=k@DruKsc)#Ir$=94 zG?O{bCT@VXkp-SSG)+`bjbngsHmHR_=<3N=U46KkVyLLTdUW>X3BFaDVawU&4;80+ z)3R1xaaKvXY!2+o3s%})?#$I!v8R&-I zNCz&f^@K>Ss{dh&DRhab{SK&%$Z45%OwTEFgzPOfU+=whN{vR7XLYmsxxV3lcsKsL z(ylX@;38-@@QtP{nY#idRhBem7(`}~yU^ULQBSUV`Y%i#W3`1xD)YE-e8t!=e*Mxh z4tTk0buwxz(`mcC)B0*O+JN1~LW4VZK6q`t(P*N|Y(~a58ne0V3>LQ9w94t!*J#sd z)CF#2h?z&n$cXFuo|k>?ow|G%^|}J155%FvpJqM_Cwa8gqm!}(0-zw4mns3sxSlul z?wX7XF=d^Wac`Mf`Oe4eQ4$RAnYe2r+obGdYpU!zy$Of3L(}suNsEV?afCm|}!tc48j^el^ac zDgjgIG6$hmQhjlX>o0oPclRidR+mEKFBQZAFKYA{yBHpcXb9?N7k3@8(PRd*?oWvQ zFpH8h01E*|aZLCe{xQY(3sqwNNx~2oSn%@`=k4NN23DW8%adkGafQZb8C@2QY*jXm z+Lg<87P!0yb74;=&oJ_(OINoeP)$MDZuEpx4DHM~bZ>{>l2R6S@bo+b#vs;kybV+_ z(OioYR*FLlt7sd7v=INmrS)IK|2UDEXEZmb$V~J5Iwq$F!`piK%#xz<`3{GoWR*C4 zOgRe_#@YckS2KlY3WfvrF9A&5B0?0tR)!@J{SPwV&4V}3@v-8r%CSC^ZnE;3_mnz~ z#+IUUIQ{HhB?BVD7i>?@!rk4wH!9g?Q?3!Q3sJ+3k%rj#1^dWH+_3A0$D;E=@Q1oo0;mAy<`YZ2H)i`XUkR)cJSF-BFP!^Jjf0y3m-;(*+E(6I*z^Y4W5 z2{J|Qjy%pMqHS0gh6Lhtfv_6Hz{a$&{I8ZGWe&#E?UwFc6SADntn$e@%I&_(^=IyI z;9dfEehwnyUfrFZkzSNxp0p*8eGdN3i8Syc$aC15Y2jt9QY>f_@jfWFl1f0>^s8cB zFSFcZanMiwo_Zd_cra$lt@Dj(4y9*ni>1ievW^Us7Q?z8J_dpVdb7=p88#Y?K7XOj z_XPI@I(+HX!w;cFknFq?Ey5mBbtSq#u{+2rg&fO;c^e@jP^0MC2kA=v3lYipb){C8 z!-(u>hG@)0%uGv)&vBju1HhD9>mAd~^MGQB6zMF4ExpgI&2i{V_PVL19UCcp5$-3l znX~n}Q;T%E9HY(Dn{Ch-HzLT2FIZsnKEYj#2RhO-c=_42DXGqmfJ;N8KLF|#sC}YZ z=8b3>I@)8Et69EVqqBPKP%qNTWI0$E%w4!^#r8{aCANmAxQZ^hw!TW%->E9{SGjLR%usq3!7KPmN&I>t8jrqyXu9s1O~+}=P@nbQErp6*@UDb=H=kL&C0ZR*N)Xvghh z9gftj=br1WDA$_uQgr6jRKzZ{2Xk4ka%)@DxKJRF-xVzMcv&y{^HE5p?ZB-Tt(Vp5 zKp)VTGsw6YQkeQ7dZRLjBFrVtrmUgfk>d5%^tKobZk>;1q&xH`hXZD7n!0u`E9cIA1SVoN^pt4BQ~SYJhSg3%QDHV%VwPl$ZDACz~A4w0_Nu)yW&$ixHQ6P&G)wh=hd{IM3R zQF&EfK%b*LPH{mAJcr_}^1_V?bWC`UXudM`cRG$2{aBt|ap)V;$iky(0P1 zj(rYn% zqBk0-{klT*3wAxwuhE+hsC;B>QooA#$}s5tVYFXgiuT7~Liruyz1pv9lKP`Vq5L|w zKb!$&!$IJzNPx3A367dS1_yDo>1GC^hcZhYp~_uigsSz#-V>jlnLI*8{wN#~vn-oO zNKRy@1Iu#-H4w>+FXjqKDoc6-Z^YlSekub=Wu%g~CY5Ag%Mz8ma-<}3TFr^j*#=R5 z;DUpd|4c3ai^TE+Hzt?AL%v-|r{7C|ItcDP@&kmyHzN>8l07875XXVyj%QMTLdqT` z`VpIL-~)PoDdP&OR| z&QS?)mM6hc^GD$*&qVVPAIyvL!99Wx1itb2#0Tf>#|M-@hL0MLPLuNrlK@BRLNFV{udkJvfN`f<>e3}49jjJC`PI%8-F_ws?mr7zZ^(B=?L_9GX$BdMvyf;ZSp5k=~7@%t1!62Ng zLTDa=fSePO%TH6sqqGp?k>;BFliR@mi4h4}N<#^40MANCiZLnhh}}*>`N;Y?PIDbQ zLC_+4dxdzPmoz3iz}qBa)qFYXEf*qRdQ!dtrEnyla%w`p&i%%QU5pJCo*I2o@CdU= zxv1w#fe)U`bHJOxmuaQk1bpM~`5TyHL2ss$Y=SPoNiNS7%#B2s>k`US{xr#vSWgtr zfV4LX=TFISWNQ=-;K%U*PhxK0AI^1R4!uYE9pS@#VjRZtg{{cdqCJ*Gx}l$5l6J>h&@GXB3mVW9E;fdCd^pkJ}HbKZ{$m=UHPLJ0SA;b2{9643YpwCK0gioY0vL#+mm3W^axahOU zrV)G~Y3~;iJ4Jobdm+A~+3;8`N{_5pmgBZ9j1))wX*8a{$h(4`#q&);+gzw%KJD+-jR8_8Ba+zEs{o_tMRc%Fiw!d2^gzS zRklC<)^DOY zN!A^FMX84jz%6R=c7D&gQvNx|>WRYt+;Ok7}qFd_JTr|E8 zvEEFAM&tUh>&_(1i02Nv{yYHY_pC#c@{<;Ki1lbvJ|TmWCAugVU6*2PImN07R3B8= zHpy!vr&t@QZ;AH~zCv<}6;c!ic<jleqmYRM^9OEH*-S~DTW8rDoBFb}_S za&lTZMPY&u559hKiuKb7%j1dlv+7F9Pg?gOR$oc^(Eh`&!oF2L6*D}j@BfIXnXG3hp9(!g zeG6Cz*EW)297^XvF48&Tunw<9A@`UmhM{bK~?VYLte^SWqml8Xn`MF5j@kvL5D zJsOF8jkv3FKHsRy#bnJS=`C^NAvBbvd?XnUp{XS0qu%`4iMWr=C7l~#E!4`tAn1BrjYbb-BXosLEFYjmr3`dOu}xe zydJv9I_VLj=#qow%dZ<9Fh+u?=2vDK70m zJj;*4?#jo2GBGk=(gW@$+|B%@yc2Dl2$)yGK4&Fq-0Cbwx}ccF_SX|J!|{^nyAkb? z<~_O%jpn_iJJE!`*~#C+(}}(R2EBy78TnB8kkeC0`pCM-d;7hO?Pg-6h~3WE?qzIu z67&?im$B!uT{6m_uqzgc?Rrsu+7*lKPGMIrNsdOJ6J6OAYA^PDjOc4q1U=~KgW~DH zdm~TXcse9sOw@~9Dcu&!Ep+BN{1dcj-1%ffIHEHz;D^OuQo=Y5`3<~sQVfz|DRg))1ix9CQ9p-xu0 zI&zQT>XF^49V%A?1LA7+d2H8-=t{d%vFEW}B%&+rGDV+bhiW?he@S~}k}bZn(McU^ zz*h*TO!qSXo!$;h32z6?pMvW~(_8tM`@JP@eO$T^xT`A$LDy=cYvPJQ(6yB4n($Pm zYqg-OG*!?w@vWdMtPBKQ6K+rtH{3uA!fXlq-~eD=EY_iT4x3SRRs9bsFoJ*dy^5dc zk4ox~k-ECo{t!5zKl-D0|Dnxd=OHR(ej)nf1i^9Yb5+V*Ao@dnejY~bbMgh$tB`Jb z=!Ut{m4HLfKatNTPC-mC^j~x&-^>@Vspt>%fM|odl6q5&__HJ50?RAa=QMZnH^ECn zPk=l~eEV2@FRCMwp0Ky{Rs8utL`rxbTd@;ArzWh7N1hKTO7ioh`6;?0hYjKa_Oif! zfUrE|z1~6TDSkBWbdhnE36nj3w0rn*80f8l<_N2Zr!-|F?=)rZeU{j}YuR&bDNZ3x zD5u)};App+m2LOfrsjrB(=Aijb88lat#X-d0TrW^Sl zhZ6rnv|JNu!OhhVtC7^nj1NWx0LwS{_HI6X^IqTHiqp#3y92|2=G6mlyg?;`D6tMD zocN&{6~kDIN<~Yq^W9dl7wL5ISN#SEucNs5Lon7!HzRWKuP7E+%&uMa4T1SOZ^^MY z6j!%oTSpbLUsd|D+sg8)yxARPei$Z5bMfZ}>0EphHxpAVCx0|CN6t_Vdpq{$T=gIF zbw~ao5A(NC#wF#!c3`YDU0Q~kt69()3%VPtp2GFT!kJPS6Q?k{S7UsT{ga40n3y5- zeHr*!9m99Gf6*N@>)LAD#|E8kwH3t~wt&T2l5Wd0ztA0Yv}Kl*j}1g$_{EE03L7}o z8~)a?k$+Q{?r`-ql+|VhCpDB$4!eCpt2UhG$+v2i6YDbZFfF|{GcWoMF-O#QlMnq0 z{jyE!W((MxWCPO5VY;N>=6%$+rQiF~hMylZYt{zjScn|0Y7Rzba^ZT`s^($68_yS+ zuruEq`6v5;KOrOmsLalvHhj-C{=~2!GV(guN6Gws$jAU+Ou8Xi{Hf118u46{^!#Y_ z_`lTr3|>CS4}&4H-HSxzmthByM&1z=^IDkN1OpVUO;#FgBUv!8sfj zpS{*#?Gg23v>Ii5->!y_3hY&$l*aO1<(z2^>B<9St@^~&vds6`dS&;Rg7%<~ZB@R- z6>fQsPhWY(ZO|eXDr{COa!R2PGARwd4LkT>rAp|4s1~CDwlNeT$fHNq6j+Q5@5LWj zrHDXlsz(V~>@}0LBGdHjER3pnZr2ITE+MU_51k{n9V-5|j&j9!1 z$~>|^qH*Gk-~5dS?7qGQeP=k>8plWTO%vxV+G)P@j74)M@H3PhY)fAs{=#aQJ*HfN zyAK-JJiv5EK4pL8A4&Oi`>-=C8ky+WMMgoQ;jv4+5ZBp>Rth4-#!P+PvVxYb%@ezd z%_;30<~9_K(P*o>>nfaCrYbInxY?tf{eCm9sQeI@aCXdz4o@-(qV7t_Bd{8MI#}Uam$M-H;!_ zg>OIi6eW$dwv%7w@f4Lb@=@e6{tf>|*kG%%x)6KGA2lX|rI=2iA4HHyCcCToHyLi( z?wO+e`$6RbHf?;itns;ZCWEi4FsEF}Eex<=7>ia8@qpWvCQPqVoWMl z{w%!+ZxgH-;b{_80U$LNY)vz^<`v2u8dKbAft*!1nUC5XckI44eJY^EQecqU(;XbxfQ(TMwpNV?z6ZL?CBwG$q!+m=O z_v}14bP*Z<0MKgNFbh!ICLu18l-$Oo_q_*ykKX!+C_h7`4TDWA%27PZKk_R9ZwBrP zrdeb<%_8WBv!XWn7WpZg%HqUl=nAee=RqHdQrs}O$>aP@OFmB0b zR%;JM?fK@ApVpk1P2X$%zXu+wQ6D()HCRC=*)PW}F@u3(hEP+mUruoc+;#)zI&-KP zcNTK~m2a!=%uU?v%=Bc_#MV%bYrV;iRe1Zz>oAi-!J_!Q=uP4j@jqNmcC#ZEvmS)X z@5=D|qCP*qc8z?|Lo9z*UP{dEr>yQ5kFhD${(>>8-;b}D^S#RTU1Qu?s^?F!m!d(J zfdKWWlVlz2WXVg0j~V`#mw%e*b0RD#MLyL_2D~P$muXVLe-w-vdb-GjTdsxCD~mgx z=(Gx)Filaj*L_zcxyh*BC$N2uI}0Jqhw3NuS1`s0z^#gW0_y!SS_neKt1lc%s#|rHh+@QUhogjL+NdpNZM)Mtd>ou4_^Ac<9$W6>VowV^BwD*F$}~Kq zMtDbbmK#$G9ri*HfP5ol^20fVZ-igw@9q2aM6ONtjZjWMh;xM6-?$@cCSgkw;}B%z zZzpx2S?Tby#}6=DjyevF^c;8?mcjB#fL}}Sgd-Dor|5MB>df)OEV6}bpkn^9cG++y zRQ~XTO|$pM6+8$RGpJE9(ecA@C1=Ho|6xppMi`~4UTTcdl{`LwG`=crhv5SH=1;+T zNB>zroWcj-O*AH+_z8Fuomt?22ihDq5gTx`I@!Quod=yKczBP}pJC?Pa(J)O=6-g= z;rvRePJ^gZkF|=Vg>=NKOfMhSlU0gDU4~~KzH;GF{Jr%xHH5u~yIn+tMw1UpW8=jaGl5oU2z@zp$RC=0l2RoEgE!>*VI-FlEkNefi*jEvL z)rgu5Sr(V>n4|GKI!g-g+OtsWsfTy4MYWp`>toB~KDILLTTxrebquKf$;5YG9%JvHrD!We%k@Mzz}gv_?<| zD<9!wE0bIlGNKavm89TC)kjjHgs1IafZe7a;B3pT>i_5W`rE#S`pHLD#(9ZEW00a&FTLIhqvm%{8i<+ziM<2RL8&Ag7U;g0M?I*UaMcB#>>Cg zah0v@zyEuES0S6xW8}LkM!#rj(hQuWETp+eIJ5qw*;k+F#d^TJo8-qDTRV}giLRY~ zf}YHVfW(hh?V0|^==D7A)hg58rO@bq+6s0qkahkv|5ganpX}i(y(Oa8U?+$AREFjR zC2#64q1Pae&G1n%y++kfDFP4H0hBW?LJqE<{t1C_jy$Y>O5k5VoPr8%>RC`!jjj`& zq2-@2Lq7>rf7HNR_E_vw zIaPTAp$nb`^>F?Z{fBb$v&s|FY|SIeslzvGWdSMn7N7Dvh^UFZPk_hyBEu;HK96QE zNw;FB*pJjCA1j^2|02zjK9X+5yCYan1eRPCU;>{T{&D ziT1pQ`Zx0uM7QdZZU*csyeFJ{@Y##cHawq=@99V#D1#Jvj&PvwpieWNw<7f;nUT6d zAHuO2<(A_2Ong5Hcx}O_9Vx`VkkXLn2R*Js>3B!=RU*N@Or~F}!EXiF7RR+l}^pj^}@2Yoxg- zyIhka{Uw^tL%tf&hvvsYo&UQy+{Z;;+S03ewD^gg(G;GvJ1R7ty`yAfK!8 zya&$@^-1q~k;Vg-N+ZIR=yjM+&|@|7ryuGQ@H+9nga0LhevEt-r8Tvg=$`ngXE;gQ z|2gUgUxGhre9$;?AYq(P+2|+nXdm0A{ze{pUWfNY1FF0AfX{?y)W68nf57Ma(rk>e zaVXm-_+R}r#D7zN)A&Es=VIwp@ajJS`z&_87&m8umzSdaW;~nuLqBPp1Gg=x=T6iY z5}!2QG3Ed#=@am0W8D8EjuX}0BefuHN4gg2UZhWvo=5T^9fQ=5)z6Vg*CSyMHBx|t zQ^*K;$zP4sg>(iIB2PqSBf(}vyu-SaJ&w2$Ug>LCk{u=e46r7#8tEd$Gd`2w64?z) zxHbIb$PE5oq)&P$vXp;@6Z$tIwfKD;?7F|?`y#uM?=Q&n5`RB(27e^-H~hWBy#B2UV7I2f=X?{6c|Bmd3(7WBpYQmbr?d@b7|gK|hp zl~W?Os^!uD+b}j#BX99(lFX)}-qy%x{A@gHi~OATg5Qsdyulms-W2(qPmp9j0oDyWW$!oiRfFGoE!O8 zz@WMoAFWsee~Zan(2`@HEn2%TN;CLLwP#+ zlVa?4;=4MZJS*hF1bHa(B*D{UV=g$4#u@TbdK%;9FOfIpiRy2`-}L+p$hNW4O5#iY zTWN=UI?7#$^b+1(CJkzOq)yEqvLV*;LUzNJ?+YZ>x zkp1iAYXB2)`Mc5*c^p1hBei0D4&w7T@IUGjX}**T7r-mPk7BN$nw+po73=apWWR2>JzcGPNi6N%RzLBAQ~(67-}t5nT`VNwlT*?e{5Y zjrPVqiSDB9>UcgWI<8L=eL!@eejr+)FNhxdf5za%K8a`IxW;gc;ShsCJVX5!{iL~2 z%tyqF)OW-W2{^{##o8YGjKPh5%Bt*~vi~RX3-uZC7xnQ0pHaMszo?I;{zyNY6IsQk zsR_SVNzX>pWB8=hFS+PF-aUXcm20qb{1~1UMjq5y`9&J5GywUtp7KFXyvcWA%$7#( z;wMOD{QAfX$oB%f2f7Kq^GhKIaOW{%N|*Afk-wr3O85FNv87m6a}AWL_b&J^GQl1rw*GShe?(qailY& zpKDlw@)t@%CX!s-FUfV0VIiyQB7OM&9MaE`-WT$h^@vNWPe2KmtVp>Cz7Jz z^9=bV@wpP8Pm1(??T(<$YHE&tUKIW8#^*@8WBAiN82i2-|4}9J8v;p6r z#dz8jZv*B|^*i(nmG`!&yc7Yxk;mbav4No+%DQ88J>YYMkBEoXu-g!s^H#=D&*%eq zf#z3AF&+^-0i6+R2etsIT)H{dPvEJ?k-m=hxu6O1eJx!E`}Ptk2zeKRoV*t4mq@f; zxdG|dNFlsmLwOj@J?~3%k-AZK8`47Q+DNbF5$Io}gWVz>t?^;}l}KsG^BnsS^A2vL z;g3c>!n&Xb<9``GY3&z8Dq$Z;3y_!AkB477LbpX-#mILf=5bn=O+%WA`bhtrP0wge zM)HbPO4TH1AeUZ~|A4uDi&Q3G9eF|SiTqXmIb_l=BY%_o@$4hWrS8b0Okc%W6 z4<;YiMP6n1L|zoK@kr!Jl#L`8V=^%&4-X;>NyZAfOEQ&Y<{xR#Kq`*@@08}lLhBPY zgWb#ijNL;W&qLJQseBQvACKb?@#o=1zDzz%eo*7l)M$n@A8HhBrnW-crJbd{LRYRE zuiL5no$g*zZhM{^~TeTw;CTZzHa>1WH%L> zMw=#>=9!K*onYE!`lmT)o@4&G`Q;RrGCSpzlnYbtPx)KQdzNy`9Lt54r>!Py*m{EX zSJr2(@7g3=x~<(d$9A=CuWg?_-`-+B+y0TG)-l(y(eZc3zf+f|K9Kry>OY;coXeei zoWFJc(^c#0aGl_~+;x-d1=ojZ#c31LewOxoci6qceTMr6_tTyfPmO1b=W@?CUZ1zg zyU@GC`wQ=0@1MNy`~1GyzAJqnrq`uknEqY{%b1+8En{!S2bqD)*35O8_hbdLc4d8? zeQfsoImhIDmpdo-+T1Vvo&F2_H~Js+zwG}y&=oi@@O&^mxG4BQo-wZ@@0`2`^F9xS zL-Rvth8_uhm!Fk?dj4<2HQ^QE7Yp14(+U<9996KT;FN-g3blpJg}Vy>P-G}7D%w(X zYSHeZTZ@$9%Hp$&?5-*RmcCT__cBM>xU#8b^UDUxc9sp5 zT~YRU*%#%;a&LKVc|mzi`TX*;%I_`zYx%z_ctt_Q#EPRU&aJq#;`)k5E8ePPl{J-% zDle~msPf-c`Bkk|tE+CW`leb_ZLeNX{j2IPYmThBvF4fDaP7?6t84#MS6+8!-9>d* z*N5saZO}9m}np<71S*`i4<*f~^V_GM)&TC!Xx~+Av_2SlRTOVzGs`b^@_glYcbGGHQ6}Q#5 zb+q-i&1qZJc1GLVZC{Q_A5$}C%9zz-UKsOEyVRcD-qk*@eQWz&?N4;@j!?&_j%gj& zcD&hH)Om8}S)CVmUekG7=Y5@zb-pk*Z|v@|_jEbB)^zRd`f}X(aqGwJ9QS;8pu4vF z#_n&&myI77|Kx<+2}evgZ^Bm->n3iP`2NJtCn}RnlhP*nC$&#nHR-xZzw42E7WAy` z+1Yc)WInld@~X*$lYce&g~|Wu)%I5R4)mVd`|IAvdOzuF>zmQHwr@w@^?i@_y)~t9 zO3Rd$Q?8qG@06$dGyCiM`})`QpV9xT{+FiOr;eU_;?zGMAsunV5x5S?b>t>uX4S2J(XymRK=J5QPK zm>-&7JHKoG^!dx@@1B3l0%^gd1))p1JUf zg>Nj%Tr_9V1&eN2^uVI$7rnnIa-`$P;v>f%x!}mnM-Cl%%aKnV`N3ktV*lcWi!WLH z@)FOI{3TUOT9(XQa`cj2ORik<`z0?gd2h*QOO&O?rH-Y(rJDNh4{k)y`^nc2`?_jK2{8n7V{-@yZLRpJpGIGq3Lk?xb*yV zcX}YbHhp3G#`N9k$J5)=AEm$V9^JiPx3~MK?it;uc4xYWy3gyrrh8-e=I-aa-|PN9 zQ<>Q>Q=5roj?0{qS&-?^tj=7N*^t?kc{H;v^HJuf?C9*+tT!9W&dxSxyR%EPXJxO- z-jv;xeLVYC_6w`b+SM9sd8{UDw$*A`)=KLS*7eqX*0a_d){dN(8J%z1>*9%|tRP^lId(?eoz0A{nPt@+uzxr?;q?xqyN(W4gGiZZ|;At|IPmG{of6^25JWO z8W=y|A2@no`oM_;tpmw{o`K~9=L}pw@Zi9wPUrhdi|Q+ z)=XWqa?QP`kD<3puQ>gIwR^7}TKgxts4iF7wRU>aw@6R_3p+=yYlBJI47gV4}E+d7$|0Y32pRzArP6+9dHl^E!Rb{{{0dTF0zqp7tmp zohm0Gv>Gjj^O+y5jl+`s-Lwg~g){)Yf=Wqy6|d}7ys}sE%3j4Qdlj$jRlKrS@ycGs zD|;2M?3MgD^12(pwsFUip3C(;nWyslWz6rU&DB4mZ=p;rt@Ub2&7eJVmgc6XqU-3_ zOP(+BKH_2&#T)eNrrousU9zCX?L2wS)N*wHS}Dh(9kC|y^!&F|XAb43v@GRB=vtD> z&7^a~l2o#r>KT+jizLQr-(D-_NgX^?zmDkSe?wMs+>RXgze!RxLi9~^nEsR{z7d*8 z?f*9!8toh~$g(V3;-;rRW>Zd{(xp79m(QALaFICl_ey$yhj}*!=e^2S(`+^1^c&_FjG{omLzA0pG0+k-byA>ZknXl+V#7L z(#rEMm8RqCqjm)=N{-bHGUZnD)R6w@Hp}g;tMg8f|9$RQ#xUG-%r>hK&lv8QnM<|Ct%RAX)#Q~q@l;len90_e&B;V} z&d_GH#iOkW%k8PHb5G{VRK_jKxVaEr2u%!6l;Uk6ZYkwwCA1TaOqM|0<7ONAgybfZ zL{FW29Q6T)9f>-(!*J)ahTCj&TOEn4yUk2lZldj(c*-(b-Pv680;9!pTc&%;jCt-U zM#{*veJ_$O)3-$we6`~t(j?`)WR;A)Sgb(c353WO=5ND z5-pwX=8RcL5mt|TL9Q#Eb(?u3L->X}887y_Tg`TIX_|bSq&p=0begDaK{NuuLi($r zJdNJoCGU+aC0kmG?uxu~@($(f+OmB$+qrql%aROv=UVBio9>^KCfk6lDcjEfgZ2rh zkv199O7^y9Tc;xHA1BMCj#;wIu=`Xe+0j8)We<|=u#3LClzwrOhuSG$TBZ6AEeO&# zA79bmnKXX=4?i?F%DIjX&IdYRA6!rd;k*euDLO=JM2Mw z1NVfzU~kxmRziLW`@#O;h67+M?Xw*R2f{&cFpP&o;7~XWCcs3fg-K8c9`MqBXFt?K z0D`o+E)0|5a5w^vgrjH|@6pfz5om-ah(Zjez*O32dJG&3)8ROn0W)D191rxCBbW>G z-~{?Cej=Pirxg7bPJ#JwD(x6PO}kQCsx8y*q4OUHyH2}GTdi%Qw``rQ zeL-*7TdSR~t<)aWUei9;F45N0Il^CQUu##;`Mq1{1g;y&>n++D*caLa~YENie zwZChRYah}*c}9CudrG^Byt_j?Q+r-}R(p=_z{lElZ57>}1hp?Y%A~Z*=x%h=eUjsI zj_y^SMwgFhT#;i&AMKm(*Y40R*A{6DwZ-(#-%n`ubtA-~8Cswf3}~ZMU4DXg=zs() z(EbG)bV3rk03Zb>q@f!!kfjZZImkl+dgvt5Z?*5B2z}5G1F#Sl!D1MMAy@)SVHqrk z6|fRkY2Rxvz-m|nr^8xU2fv3iXgBCta5kI+=fZh#KAn>Kmi9LM5iWoW;Uc&gE`dwo zGPoSBfGgoDxEij3KWTraCl9WL>tH=>09tE?8{sDSGyFySLHm(TH+Yv;#cqaM;8wT| zZihSIPS^-{(Td4EunF#k``~_f03L*g;9=Mdf79-QM_>y)O7BB^PkSG>YS+-p%H!|^ zJgL2?y{WxS=SaV*y+J2Jz79{p)9?&DOXn>-4==!r@DgmJT`RA^tMD4U4sXDl@D{uc z@4&nC!iD$Y1Naa=f{)=7*bbk;Bo3kXaM0SAm?&z+BvD7t3wni5_(i=4h@c43 zdrc;b!)X=iNO2UMi+Z$Z5E0Qxr{F|IjLtrpDyE5J#Ia(!I8MwEGsP@%Je`&@N6Z!T z#0j*s^h9xzIGLWJJw?nHr;6W+(`YTKS+s~&VbDI+cF`dcVu9$SJ)~Wg`qK{Uu2E;j5U7lAW-V$$% zcW8gtdqSQ8`XQZM{jvB&Y!{!3&%_RTtM?b;OYxQXhxl52L%XfN6W@y;#E_SdRfZ122SOoQ#L#5%hM* zqwv>wG@T|B!A7KSI5CD(a4Js2WAIpq8)oQbpWc$|%Ma4ycn6Yw{9BA$dN(|K*D z;Cwt4e}|`G9GmGZvsN@{C9)kmFo6rO6O-75DKs&S-I&2FTA0H;7O)3;yV02o`GlLS$H;{gXiLTcs~9C|A-ghg?JHO zjF;f0co|-fSKyU+6<$rJfc*)t#p`fAZoupD2D}k(!aw6*@UM6?-h#K{ZFoE0fp_9Y zybJHfdvFupi}&IE_y9hL58=bO8UKcl;1+xoAH%KqcYGY5z$fu3d>Ws@XYo0F9$&y0 z@g>}bFXJotD!zuV;~V%UzJ+h&JNPcXhwtMD_#u9TALA#u9Y4j-a0h;lU*MPc75)Ri z#&7Uj{0_gzAMi)~C;o)=V1N#~peI&!?XPtD?QPoa+C$nc+O68d+7P|_VTHCq+pKM( z^Q7;lm%o+i<@zZ4+;lpfad@rvM>>)5YB~}09PM1~PQ6mE(yR3veYC!lzO%lIzN@~Q zK1SbN-$T1kyPsBv_tf{&_ty8(_tk%?@2BstyY&O~vHGv{ar%M!LHfb^c>NIlQ2j7{ zf<95N)hFq7x<~iwK3Y|-*8_S`59wijvVORJgnp!cl>Te|XuUy?=#6@l9@S&|6n&~I zn~t{_Wkyd+GTt?+J7-c1*PN_O<+_?>T-cr}Yc-R}c&0pUWGHmAD&k$lW#g&VD!Xtt zk!nvG6={lCQ!<{dw7E>8y~7$6&ss(%k?qve$z0aeVs>@K%Q||~9Y(5*WF*X1S2h{X zcIZVTW1^Wd&?=ZNtAm10z0J&J^tMFaz-*$&l{NB4%4JBQdMc4JNLJEJRb-8>gw5$m zBb#*@-MM(Oygg&Y36@MTvNCuUaqIsQCsZ|O;w_zqC2gu`Ce~K9nsaUYs^Zy}M4}~; zX~}g}QmjsHX)!Z~iz4B?F>-z`&CNV7|A$!_iWO42ArY}To~g7`Hd3XHWF?ZVMtMV5 zyd`6%%HxWbH8f|)J7sa3lsA~|QWR~imm9%VHQMa!Z}qG6M&DZ`3XwGZ=^Qyc-6 z?G9T##cnuC+3NNYiK?l?b*nmtd3`E*Pw$|AWz%e*l_iwxrm-anwq%;JB%xe4jde~a zDyAJH5(}!18J1hMV3@Byc7!6;oj*%Z3#7h4JtWamHa*^wvy8H&O{%AlESDUSD4VVv zl(dOHovhcB^sj7&s-IHzXN;&)of?rSo1yBbl!H_8w3)RsCUrH8rrOa+wU^Ii<4rbx zrZV2NNzKfTT&g{u$#o^;IjhDTnJSyDbfC6Lrc}=!0b89Jktmz3bjT<&N7c&Oq-xHv z>#C^N$Sxz>WO*)?sPhE8Onqf@Rb|U2`doPaI|26YQT2hl6nJS;hH$10k)o+INsw#}&Pa47Z4)bLvD+`M@sXWAfsK>+9$CTv-OSE3)2U$)q>axs~nXPF}&=(8YMAlAKHYC#>aht7(r)VBY8i{yy zG@VV56YT6!QH!rnqtVCCs-8(hIE^_fF>gfS%9&k8yDGFxf{OnP%VlHf5yOhRro_pe z<&2}BOj$@cE?PUV;<^NK9UD)l!A>~$o29mzgNvd@w1b0qs5U-%phpM&9ZFnkV%&%y9H z7=8!C?_l^H48McncQA(i;&(9o4u;>s@H-d*N2`ESBjD5sI5h%Jji94d(9tF6=n`~v z2|AL4j^v;tIp|0ZI+8<<PlBVG}f!$=zMsVmvz zsVmvzsSB&VSzqcK9*=_+R%5Jv?gw=fF536~}A7&lGtV5V}2&;L@-%zJ?YT&-!!1xVpLj&VCFn$B$ zH?aR3SnmeLZ(#fe#&2N!2F7n-{07F4Fn)ybBa9zm{0QSm7(c@J5yp=&euVKOj2~hA z2;)Z>Kf?GC#&2Z&M#gVs{6@xaWc)_PYh=7emfy(on^;a0%V}acO)RI09RK z%WW#PtdPHSg)M1fq^1%QThhdqG_fU7)*#9nL|KCrX zW&9}PM;SlL_)*4>F@B8kV~ihT{21fM7(d2%G1Xh^gTZi#3vq9)4~Do0OHTD$Sx)s^ z$*F!TIn{3^r#vY+)o*28)t6;ni3@SBrmH;O*9QYUdQ%>c_mV5&hIo{a@=6*6>XjAs zjU`P2fnlzsQ-DWyLg0~IawR+g%4j$uWUdgus9^++R>HY(*sd@tMQW%*u~?`8R3 zmhWZzylkJB?ej98m+`!e=Vd%^36JgbvVA_r_c6YY@qLW%V|*Xu`xxKH_&&z>F}{!S zeT?s8d>`Zc7~jYEe#ZARzMt{^jPGZBKjZru&(C;%#`80tpYi;RSI_e6S$;jsuV?x7 zEWe)R*Ry@~Y+pU&)U*8hl3dn5!17gG?1`z**hE==faM2Ret_i%Sbl)*2{2B8?Flem zfb9t|Zh-w4VEiEC2id+L+eh1J=`+74raoH|W&9xH2N^%e_(8^3pFOEO;|Cc($oL_~ z3o%}Z@j{FjVtYf37h=2+Tij6!m6&n#{ zd=(o}n(4rkLEI_?EW+g*Vu{*fiP~a`+G2^?Vu{*n#sX?sCh8eQi)?b)e?isA zRWn-rZcAA79foLY!?v~r{UvS0h?k~Pt^W^LsNaJgqr$d5jFJ@wOvls zZc;>TmlL&z5~3_oO?{NMO(*J@?u32;)&1$3vNNKlKT0b*BWn7iUSkg@MD1oxlyy+k zAEiq{Rj{O$ngHnvqqB!2?BNJ|IKm!|uxBIe(TJMpVi7gL5oIe?h)-$z#u8=uYNDfb VgX2HeSxt3xg+1(N+x#)@zW}(y8Djtd diff --git a/Output/PartyModes/ChallengeMedley/Fonts/FreeSans/FreeSansOblique.ttf b/Output/PartyModes/ChallengeMedley/Fonts/FreeSans/FreeSansOblique.ttf deleted file mode 100644 index 733f8829d8eb965234d73ac7802eac9781c2e460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110740 zcmdSC2Yi%O_CNgG=b7GHW|B;jnaL!X^fpN*y*EMvA%!HA&_eGBtk^*W>KA442RS~<>QX=v}PzD9ZfA&#^5A#cg} z_N?5EPc-Ckob4@?pEzsrjAg2S)W>mLL^{U_2WG8a>E=BA8jg!H;dj~G8D}jEh0qfh zWy7;-?xHnw*4=k?FP>vK(o#Kd_Kd!N?tH$TBXg$X_kwxIQ1P-&c)k(O3G)`OJp0R! zF8vLj|HyIX|1MfOYsL}ztyLU3`?qNByTvokUM72mI5@KQ7L<1{nX!2GwPROg;2Gr= zo0ly;Yo+Y=J?C&_6Yxo{<|ytuq-G?Z(*Uxg$orc622bCT+c-jQCwFiHxs(5eBYZ#K z&+&XvR?87toop<}%bI0pzymT)R$5d7mg1!uq~eKLvP{C4!cfYq^c1zat+fIFMJjr%RPlY5;QNFJF) zR+5{^z2tH79C?F$M84!>_*A}-6J+ktUuE9V-(|I-t(=-m2z|o^LOZ#l(BHV?(0{qo z(Cyqhb#CRTUebJQ0F|N@0Ig0ul?BOowxMzm!{N(k-d8bbf!+CuxePQWxVbcpLh z?Viwg+$6Lx1%IzYnM;s1AZ-lY8-@xLDgvd8IXn6YjezR+tkiQ{05mMZ-^E-6N(E8s zIkfd0+IkLcJqh>{@Jk@{FyMV0816%R&p#CeU z{}Sj`8v0gN5qcH$5})42(|dS&ll}HRp5DaMi|nZ%Pfz3NUiS1Oo<73U?*^XU#nUUC z7Sy=})VYL<4Lu+$4(*qfgg!<;cgo5_|CE)7-a@@^WtE{1QThc|_b24Mji!FZdts{D@%~2$%R=~kqBLq{+J|A^W2oGdl;chEE;bPy2Gx$zo${Wp4j z2^@8hyBKLb(j`b6kT#rrkq(hW#kk!}hFi8b^sI6fitHkSriGDDxEwJ*`a+o<_A zYQBw{Z=u$gsPQGIN6A;YjL_G>_9gWBGWy)lm4IhT!Ru@B+d8C+k=7$!g0ulC7IeEB zbo(51yBaM#iWZ(nKLyR!+T90%I(gvihD6<{) z?nc^ybPs5?6K(89{u4-hLI;Qq&pPyU6maeZoO>CZrI?*-k+%-%Vx;v*mmqCG+6X$x zP-7o*_915QNH>k81(Cr0e zhXC0jK=wJHdIwOw!#x%H2(*5UbE3tS;3O4VeFd%VMXP^9s|Nw;HQ=8&0PU54b{8mm z5n4WsmjB4DL-|XPHXv=pY~F-A*CTC4x&dhm(pIEfQU9sXVerUY@W@iE5k_#C87TqO zO~Q97aLom-wP?8!-)-RLZlrbi{Su@NNE^Yen^0~ue&33;9cAxE+JSTr#(pRAcB9S{ zNP93No(g?0@lXI9Q3MJVL;jWkztYeiv^cIf7ok2G(DLwiMIPfazgidKmQk4847Z-abQbpP{$I=uLE(2I^1&ma7 zZiN({$Hh@TfQ(2252Qk}W`s5a?pMJJA7OprvA!s|QuI(8x&iXz4#0ggWXE>Qm2WUt zz5x!mVy@hV_3bv`avNmG7RZpBfYWu5A?v{DHv)T)!?*QK$LDB8N?=4v>Rtr6#{s0hv1W4cHT0xBoz`7md-ihyZ$h#P6 zJ<=se8;~|)^r@WO4qV?t&F#Q-H*kFnE$jlWuL9Rsf#(~*^DWFICGgt=+@1k$F9Nrt z!0Rt){cphO72t9ZxZDd|cA>Xj=xrBz+lAhCp|@S=?E&EO25@-;xV!;e-T*Fd0GAJe z%b$SDi@@Un2GO&C=nFvfEFgLo5IqZsUIIi10MP+J^a&usSYme7qJ>8AS`+YYhSty) zdLIzI4~X6eL|*}-KLa8vXI}zDF9D*L0MSc;=p{h(EFk&>5PbrOJ^@6Z0HRL-(NRG3 z4j}pn5Iu)+H345b_H@kifNw3NcO$;r(7V{vQ*2x)H7`f$djR|8fc_4HkyD(mVMvG5?LtY2$7XkL00sGB>{bs;^Ghn|N zu-^>WHv{%(0Q)n5{Taai3?O(0u>TdX-wD|70qpC+n>`pix>m`-iQnPr6L8)U9?YFd_=S!i&y5ZJ$c=+OrNGQMGEjOlI7_VYIcEjjp9AjCxG|91l;$m%L*p5j ze+dr%f$M?>u^naZM%saN55{39%J0Ui^aRqL&=JhY&(Z%6Y|e<%Z9L=D?~g0JctEfp zb-nX)Y`s);M*qvy5JJMZ9cO&gUx(9vTi*z58 zmxsCg@x2S}?M8YG=?SDgqRa#)KY==3p|9}Qf6-nn^qe@%tOC@jMgLSs8jJE&N7|0( zyODMv-2+&5;>HqaR4|R;C_pAH_{HId+_^xD8CcwexzM^-i`DG(jFw*(~IbdYJe{e>FE>n zMET@%^z^mV(_zLdcY<%WBi)7cTco>@b|BpY$nHb=ok;g1?E+N0k)A*TrNAR1{0GqL z`+)mj7@LDA{XT=?VZiWT!0<3&co*2di_-4{hJz^m0pr#2jDq_C!y#b%K45qsFuV^K z-Ukft1BUkj!+yX(*V7LG!v}z2KVaAo81@5(18mpu3wk*DE^bTax zJCIH9LAvc@9A5}cV6=Ap6W~4!PW=k79|G)DJN_Kl9s!RW0tbGMxiCyS#+d(6mI_%$ zcQvODU$`{Y65f_z+XvX*m0){o7;Ir|=tzgLp}PLbu%Ws>#pbAl$xuE2i(_IU>hiBM zE&2b+?t;-Tyn`TEN#26Q4r^{yW0NEA?SUMs%hBB7Wrjat&pV<x{~dcksy`?( zUdPua#4@TOW!}Qx>4#BT2VGqT)*H6goZiz{kij3Fw4Nw^r$CRO{S7`5CY|N%Gn_BU zXh=2e$2cD>Eh$_o_ zZnR|;@{**PnceAVk zCC1C@@!2e^!{-=Qk6O-JkQAH_HE4-Od^WS+(ou$%C0L^fgG@%PXjr?baDi}{aD{NE z@TzQ@>^a#>vR7o^%6^njl=sRv$}f}ekv}K@RQ`=C!WHYPbG5j-Ts^MIuBoo`UAtY+ zx!!dB({G87@U;eJ@yFY#R zm+#*HS@Cnh&!s2ZM8&D{xT|3*F}2goOY_8am8{{sK6zzGUL!=SYa zD;c!w0qs@7T{2E~h3rMyUfJuiALKdmN%9%;OXUyC{~&)|e#FJOB3*7*qpMYdcAD!V z*W<1iT<^F(a2<7h=eD{d-7#)AgSKcGv}OivAD}Igpyhs!{kag(R{mV`bA2cj`Zn}& z=+B{tLaRb6Ln}hdLQ6smL-T`A2OkPv8N4ERd2my3V{k*z7xV_*L1!>J7!{1{|4;uP z`uFrd(Z9R@(f)J$&+cE{zpB5re|&#!f5pMPgSiK@4`v=rKbUqf^(p7WUuCG%)oJQfiDN+C|9|{P6qq>IK0<-LjR@TBPm3JSaTlC_&V?(_n!5zg zf=sSZs?-{-PH!-p%oeLH!tRKSigw1t#<|>{cyB^tk}o+WH7z|OGb=kM*PoYP5GX7v zE-5W5uc)l5uE7aIL*tmHvCS>x#9Xs#-n#wH zyYBw&j(d0BcmD$q{_dfNAKks{u_qq?!|(t26t{d<-#qR&cPw4Nt(wnmyop=EadTEP z`Yt?|yJycuGZ)i`Mdxwc+VxvlK0co0o(cbXHvYKy@^x2Sdezm}T)FuM?)q)F+>ESc zNNdD0?7V^_m=`?$c|emT{LPr>YM~UvT@IZ<5~rtLDz7XA_T**U5|g^QfW4>5Jb;ycL9g243!s3?!2$*eCz| z(hVDyBGDQJq0jkC`8}{v+bN=1YX+18{iLZ1upPY9rhlI99{%+JFw zWNV3bg-6XR#uJifj>zwE7m`A~v2KOE#C}DjLN%TU`PSItE{80`uhmy9sP>m9C(H89 z6@}-zHF@a@fiFfV_6T&Eceh8#QY&xH#?e*wE+FV_7UiY@V4a~<{w zVCao!$Q3x^MfCi+A_>Sze&@fh?tia()0mXVhKljcN%p$R@}d-HnkAw*B__*EZamHp z{PX=j{!al<>conoVoyq2MM-r|yw7h}=f)=mY|7xf$Nh<}UhSbn{CeQxgAJmV;z6nJ z@cQr-#v>3O9lwNt(ox`(#wOlK*brK21v-`#Sw4TfrCyk&@#=%myjWLfiD+`Ds&H&ZxZh!JB(S+5 z&WykdgR_DDzC4sh{)E}4r?~QFo5L%zVgcD02n7Q5N^(sx=G%+GhiQKwbaSpG=N;%pOex{?H9XJpz1OgR0esSH~#70sQytiGk^p5DL=bk$c{oRL? zxPPFgf%c~iIFt^hPw5Nz0uEA99=k-nJij=7Le`Xdaee&0Wl81E$%)gaC3m|@l2La` z=v#g~*+*wN!HgAWs$a>EH@=o$pZ*&AB>KkJUvGTn6^dIRw1|6$n@jtmQ;UwEH-Pa7 zco)x)w$)o~yr9amYLq2&f72JGNXl@e&{{LNBV-!E2_fqxK&BZF8%befBmJ!lV(@LW zh~EO}|84s``&=r6Na&l;=j2h~MQefg$+>~xngGAA-wJ6n6FfB$V_<_W%~7s*5jOFa z(!>a`sWHeebly`LLAI|>GYX_6GPe7i7JqJOWK8?=DaDyqdATK`Dn#;2=d_$Vdvm(CH(EJYqn)-nD`93NUB0;2@o^MzQ2Id(v44KS zOP1cQU*wICm&uB^c9S0~jCOmCQq^CA8u1X8i%c=EY=IdhsAm0uc&q``f31`y3kh{pbL}`Nl1+9M`E*q=_tueQK)2*cyBz3H|Z41QsT>OQC(R! zLw8h4^99SY99`ZjjZmyojl2AoIHkOs7s{ht^YT5-DN0o&sT-S>SXORTR65J1XLr_l z(w9`)Jp~5ylxDSh;_|52$RvHFu{u)Ilv!SFRbWgjK$$W?tD!R|(GwtkfvzH0tO!{U zeA`CusGhmNyda@FzbbfO=M?gE&_8bH4Psr){Y-99 z9uV=j@~bStx9aQbm*zxQ^Q8Oo-r}5Y*_s(esS|8bCF!>4){Xr0T`#0Hrv#RD5q@P( zN~cD5c1v+QWUbcsyXzV0l)GvIJeyJ~TU{rj#0o4v>x-(HYf6vgX!fy8>vykJ^h zJ*{JGN?=llT(P)4qkQ9ym8my0C1jg+*2Sgfj&U0sikfO;b>N0eLEqZ}Ej$nir3>S= zfG5D;Zr*;`gru3>H#98^uC?;dPq^db4GUlU^NjPmF!!2(;}q0#W3O7paaOFeY#kkt z)Cy&`a>$}YM&c%nSfdW9oA;RBydjKW@sR3_Ho6P>@y~5#1R`FNobf#lRCoqRQKvoIhpq;y`}$+*{Vy zX|>gKK*;{O!iJ7WWnDpib-ab@OiM5l^}G&LR*KTk3U2=#67X433X;1;ZERd<5!MD; z4%Hy11DF^?WiP2i`JUkdnAgpn8=O2;3U`IR=g%eYVZX>#kVK`PD7%b&ggH2g%rL)D z_uBa1-bHuPP25s`2AL(ogqakOBk?ng!B_)%+7OH}l39(74~Vim8!dK-EfS?XkU;`` zhq3=NGuaWm-AuFtZ9WNPSM&ddCga1*4$Db4UBbdBmyUy|yg_~Ap`4yINvDmCZ0t13 z3mkECd>UnE=Ie4rYg#~<5#g+}Xq0jGN%j{5xvr?9+JMDYVAsrujz6e~ f-ZMFI1 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 - - - Normal - 0,00 - 0,00 - 0,00 - 0,00 - 1,00 - FreeSans - FreeSans.ttf - FreeSansBold.ttf - FreeSansOblique.ttf - FreeSansBoldOblique.ttf - - - Outline - 0,10 - 0,00 - 0,00 - 0,00 - 1,00 - FreeSans - FreeSans.ttf - FreeSansBold.ttf - FreeSansOblique.ttf - FreeSansBoldOblique.ttf - - \ No newline at end of file diff --git a/Output/PartyModes/TicTacToe/Fonts/FreeSans/FreeSans.ttf b/Output/PartyModes/TicTacToe/Fonts/FreeSans/FreeSans.ttf deleted file mode 100644 index 6de62ebf6718daed7c4eacc2ce45b9db67673b68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264072 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 Mb9-ZLZEcSIAA)mzIsgCw diff --git a/Output/PartyModes/TicTacToe/Fonts/FreeSans/FreeSansBold.ttf b/Output/PartyModes/TicTacToe/Fonts/FreeSans/FreeSansBold.ttf deleted file mode 100644 index e75685be37c70786b9d13bf0cec28be06044bf0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91432 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%0DuI~XD&CI8mFDv7_cQD)v(~) z_9RQ%ker^@R-c(IfAWd0B&~S5%fyy{KgFQSol!Bqb>)ZiDo^nErj!pfgv%}b68R6^~uFHZ+`wXcD`~djF2rx z&fRFE5UVqMuj!36RtFJj#R(0bdv3WlXWO>hA9~01b@ppKbnC6J5moJxFA)LoeKA@& z;2^$NIX{VsDbHv+iBYOP?%0{I%uVM%txHZZm`o|=fKHd0RPJdEre>$5UTD=bQ@*bw zza2psrkmiLb~o2stL=Kd&VW7Grj$Txpf#+Vn67so7ihBC-X?gfBVj%OcylpkI!C7o zEOxYiYpdD0+sry^uFsK_(&jGgG8rrLc+&Rmt+wo-$H(7b z8T$h3VY9~Xs;nzwL>0l3^wJ9Rv0N~J?B$y_55?jI<`8q?AC((JjOnc5)T=sjjX7pp zdQOV1Ak)&sZrc?~*V!i8D_3osQ{-^Cvjg7af~nT@%$5zs%bm=W$P6>edZ&e~R%eRY zUf5n$U_Ji$;sjS_oy%}+ojc%9%`hc666`)&CCrh}xtC``FN^9Xz#!3+qy``%6_Nf5 z?;~}x3hwp#ea+3iJsbnbY@r?)Q3S?B5W6tfDYhds1@z4B5zjV1?tQNxR&i5)tTIE3ww$@fz0{k z^X+AcYH@6ZV43V$-Q9PtY*ii#dkZ4fJ3M}~KI4A`{SFSBuG=AkZ z-HZi$d)IrN%>P<$c5|yIx7VFj4_e;XIdIYBhD|bWnLpUwB`cryl@t_IP1uxU$tV5N z3@tYaGlaBz5t2qAmuRUGfch3Xwe5L?2GJ!NxH06dGr5v#0zs=$C*O*AA$KVIvhbBN z^X3F5r#O6x=_!RQc`e!(x(?chrm1Qf@y&{vPPkT=UCcUcruLalsY&6Y1M&tHZ8ht)*O19hWwPyuQ_CUiDCS*`-sbgB-v3-f@zTh=JWn6B>yj;7oY+7Af#^hkh(bvzg zTKp%qOg9e6Tl-rQc%O&q`U^9aS0{N{cv)UvN#XSJRCdqmWJl}7O9w&^J~+K`NpkX< z**-|1kDz-EW`PWki7vzfP8=ehnHdVso|lrmQOD78ViHjX}#B7{ngo4 zot&7ITVl)%c`}_xoptfEn@k4TDw~aY_dBxP#XCM@$A04AvTlQsr`UpzeXU&lUZO$f zNx;1w+?rJh3oXyzQpCw4oxMF3r2G)d^3Yp|^I_ zC0Y2cUB)%#t*k}av%n+s1esl}9A-eUgsgG!sb=sa_=3LYh^jR@YKl}=`Kg1&%_g)XB9GUk;7Hs=s0z9 zo_*hSod&(Lt*vjuF-wmy=)>8esr3!xn~DS6z|4;H&pr#JF&-#x8tCEZlM(zG8TO*>8xSD!}pZ|LkovclqwbpLzlB$Pc7r?vaU^BW|qs;{HG7`<9veLu#Y z7v;sdi;TCXIGcZ8yfwx73-k^;=~*lP0&BJ!XANdTQKMjDM2OAs-jN8t$`=&jBNoS( zFBYLbNMD@KzlHV^0Cy8BXECt>#UhZT`k&R>aXh2#hY`qd@x#m8tISEMrFCITLRVwE zm9g6NotHk$Ef2Bp+A73r;!-vuPq=o+$s18np-S zOaU^THLB5r|40XouWx1>cI*H!v3SZP$u(1C)x$~XIGQjA^J(g=!RTXql|8n@vvUs= zNm=!QJ*G0ngcF_GU*=oKMpGtd*QI`%;{Pfg+?BDUDR zP;96`2oaP2a&dlDDmGc%^4pWf1?zLli)!x}>P|_M*;2-m`TR$ehdNU(kZn`CFJa88 zys@}(CR?=l!H)_{n z_l-@0Rv$w|n4-WNi1qCI#g1>(iXz4``;Og8wUU6OhcKs&6d%DCs1*TULz-8SxRM7e z9Nud5+_h%-`aABp>&5uD8}G7x%FS%ft}*X8IwLFjg}?`Ndy)w%nlYR^PDAWqKSKB8 zkQecDheO~Q@$O8VhC;IjJlbh8&eUML!N4KfK2`{tEKbX<*wV4VyE?Oq6O&p_P#&T{ z;P*{UGd3Yg+zY4H)=zA4B*GqG^EsPeMfj)*6(y(`g?amO0R?gW`4L?2o;veDx4pt~`Ci zH#@$$L3x@je@OWXe4)I@HnBy5A7VU#Nc1C81#eaz6q;Q%z6)rA42ad#2%)FZ=}Z*6 z6rb&%z1!O}{9BXxP}QVse%+ec(r;j6f-Co>IL(&B*&Qnyo#th>h4ll+mA5V^D_LSm zh>xp0;MOymC4}+oF*ck&k8tN+l`}D?G_H*D!1eOgzyk5W7+$QYmDRZc-ey0bYeHpZ`bYu^!h2a>~}mB`kyDn2Y{o+&)Cn2r23pg;S zNa=*Bt5FB@N4!DN;>dIJf#S%6w}q_;-j|B^{u-vKzEP_WKt)|X88Bkz;T4NE)3%`0 zPsBLi`!B~h2PDO?{YShBK!PSNJ0H8A^8?6W;DMzZsmdV@AQWZHX^- zryX~huDL0R>C-Q}NkWPtBttV0P{B}lm-;VQGqy*4zM>!li5*g zP273uj(6Is+E|D3ICK?uqPPtJb!7zbrk)DK`L*b-N`Css%{$)Q@nKYGLU0l$A!ErF ziZB{qngEm^`|-3LAE3rYu&ofZBy0gCfFp{?6j#|MP9|x!67$Pv$HAdpybPh0kZq5x zgdeh#)K!qZs;+^E0Cm#H>L=5f<>S#Jj4H)^rFj|GE)G(oVkICSzhn4EYWeJjS^;k_fTm~%R(k6UDHek_zTJ2CYf}I_wzW|jo+IqT29dVq z>P0_ls9bESMoGikFId2}Feh(Xq0@Svv2frjqw(&!o$F_8xp79F{zA*VOy7oLo1WEf zJ~=NjoKZcy?il^)OD}(J#e^d}m#)e(ug|Z<7|7nt0qxE!PHmz7&@k{<#8WWhtXk}o zL!|On*@L5*I*%QjiU_J_&azm<#RjuZb8VliH_WhI2$A*v>PpXylBQ!Sy$cK2{hRui zPctV(uQym|U~}+V@?2G6x#y^+nZIoHFK?c8TN8vTVqR-_O`;VT?;Rb{ojQbt9oLIR zpE)Zr8%G&YmZWlt~g+3`@pz9pcnzQb(^Eg5N42S{T9Rw0%xG7O2~w;Y{qF% z1A3|zhn2LYqjydkCZZxfoU9(B(*JV2?*Xk{?7<@(dUMf0XCQN`uIOYD%Y0G$(qGmW zZc0cDu1ilSG_%v=gPO}G)}3KAdd(J7az(GqXNdskS4;^XK5>vamYGd%>>2chdgYce z(avRxw1G&B9-OmNEW6kpE`V7`AF?NqW0S==!r+a}GEh<~=O;N@QVk`h(z&NDY)H@t zgA12+Shzn4F|@xHY-30q8 znopO#2!E{A$_zXNM%|Iq`3`&)+DVY!f03F+p*xzGkJcAwD(~z+MpK1!M;~+zl=NGo{lH}B7Y%5<;J87`asb|@?abu$xr@L*bFCG(4@mqBhR+pwt&nZZ- z*7_{LiKAl}7ux6sM1e_Ogb_jKK%6fM^@XLkap>`D@DI^{?_&MK?;~d0U4&Jlc@f^4 znn{X{lpd>pRM%?t*-0_wgA9G*TI2r{Q$Wb*M}q?%Xry&$vBg2xs@>OJ{Mzt?HzTt6 zA{C1$L3sQY_w5NPIA}5oodeO5#cRhS*p)+P&ME3Jnd%c!2+-f&qzv~4aYymW;={F` z7NR!v4WDWvplTd!bu|k?w=p& z8xU&u6ad050U_xJ zvE_>_jc~jS}n=13>6#X0~E5oCLoo}C5ShuXi)l*P+WJ#hiF7Ub4 zNMpmCrl{5!+dP$GkR9t(T9Y;-{z7;Vt!EwswwM8`O?a2?>!A5SG7!=LToKb^!a}cU z9LlmdHVzG~zakd_7+(t^x~gIL{Tr8M;^dHO$_;8C@w$oJFwBQ;AKD3y65XIH!9$VL z<$F+iKTQVa>K#9Rj~aIkZH$7Zf(Nd`yC;4rY9-UYl^E6sDID7^hSVFj@&b?E&T3bk zSDWECTT17ick~oPhs6r2KQO|H!MdgDbt<9^3*otVQ-1EROYP&2zmlU93(K^XiYW<*XAE4a>GztvI-Npe~ z8?VPikuX||dG;=oExoxZ&1^W!vZA{4>K5Pe^;1u23mDHzEwec$W*V^m6lauHIXq{C zGq!XrzQ5ByzheB9Bwc?pj0I^9e=HYc4vV)OLC6MN-$Lt6d~c3X9FO(7^zfmf!`-JB z*W6d}oNrzryhX77MW3q?e4>$ofNNKzpVvVH#p~r@NL$oI1Zbea zN%N;7x}l~cdME>c5NGjqthS0k$1M{m#&^#j*icSQrgWSC^Z@75d{RI zU=g@3hfXiSXLM$16l-r2S4E6bM5z~A48#l_TM|={Xt?NVtjx(+nAxu&b8IY4r!!j$ z2hKZsTv7thwq%p&sZx~5>T125UG~;|S7tUV%GDbZO}Q^EwOSnJ9N3}2dW6ngb6freV}yI0i) zqTv~`XpB`ZfjVMTU;0zlJ0S_f!X=%4M(g&jE1F5xtg`nT`n0O z1N~5!&l(n z`C>*Wx3XDKJ!UDl%B~%tuj=U~BBQJ%zv=n0RghwiLgOLTnf6`umn}c$w?ls%+Pqm^ zp@!clj`(lxK-F=0&~u{Lf73otSSRCjG5&C~@mGEWqy2;OR#cp^$)~t8Y0JPp@v=;V z4kLr!jqz&ts^Is480ka|VWPa4^dFpe=_&T)+dJ6G9du-YI}LvXb4jiE@0Yl*KBgm8 zh1oA(9NNQw@psyCoJ?gzJK&1gd8zsaMVyz475@-BmjAT&Po0W>e&485(fgFo4|OW~ zpY3v@H`e{%ai$uTz5h4uxrkF>-#q4oRl9CdeSRt+`o`N z_N4h=+4n)qr@IazD;tHZq&5zDyAa^`Idw*zDWi?Cdop@o7Qu|cY7~FQ%zilF8FM3c za9h;1OI@|_zqW&09Ni|VJ2;}w;b<4{1I1fqGSj2K0rujzQ;I!1zQK*ODXcs@#HJ|^ zvWemp8ki8fK5-VHmZlwFi}PH&Ay{r?l~gD#FLn3{;&)5Iz18-PFA zDhBX0D|fonm7Q#&@*u{lavSYiX>F&%LQkr6bAvVnW>EggJvXkQ)$%{(x-oCYNq5rK zi0DeEvn|qHu(bF@tjg+|^A;>HPM1C<4^0kP_rEL6FuMP2UjMIA7LbXzzVg+uYRQG2 ziV;{rR6{&h&yEotl3)k+PG3b-QcM3LS{hzf@YIc!rZ|oNcE8srcTTJS9`8riB%R1^ZOR<==H#qJm!Qw+ZkFPHBQCYrc)+MX z?!pl57#UYVM0dOFWO3D~Eq2prZgEET_NFX7>w6-l+-h%5H!%yN`$h{`^uEzllYU8g z+myw)gtZjjcIsG#U-FTNxPvHi`~-m+6`tMTwIh#)UpMad5+?>?zMo0n8SE74sxk9@ zH$9g=BR_DO?`U0(#3IVW51-0^DxRx)oM?R&m4@sBAOAmH^N{EJ8XsRT&jp?-ChZ{b z`I*2ctzt#|O7VPKV8I(u;iFqvh2o3~EG>{o{A-AIDgG6CZtZ zO=pPFw|wG2PW6eXp)0J#n@4?gGO+_(T+Wsz%`2#0RhwmG=P9eLvx@7Etjjs@1?I}_ z+pFD+Dm(kmsPoK+5t$r4sfQFylYC$%?QAr97UYgX5c3Wgb&uzpw)WJt3I0Ug_unVB zxH7r}w$ZnFetTG^d18jIZ(+8j+XKADqE&$3-x0IsY=Lj}eZfD)JlICjcKCMjT&%mY zN{17P4jfV&?ZnNpMMMQaj;E@Pl1k-A1eIZdhUe3G zCp1pNC?y)>X#)eN5(Uob-zs{6HB&zu7-@wKXfT|s8e%ERWs z*}^un57w>~qX0a+N8s6w@1mu?$Sb{eTiL?*@Rulu0Xn`N zV|Yo_S91WL2-b)(}A7sfD*PhbaOcdAdazXLsbs? z0#wrBw!!EQuS?91Bb$XN5*Mu1Z<8-=^+moa(8rr`7v72jcMx%vmotbgbf+LXM;#AHe z+G0F4=!s6w;1`W!ivXLge8lz*3=)x*Oz?gm$}Hn^uyX`Fj80C)uy_>7=!#^5M@}}gwFFH{Zbh2`S3)mPt_MWu z4ZI_`jkbDygM9YzEh?mJtqLi^J_$%KnaQeSaEh9Mb2hzgVWWT)hAAUpjs|hlAhY*$ z>h%J|D0~K!h3SYkN+zEz=W^K*sBDE-lQ>Hy`a>?V3cnFf1hhiZUyZ#~>l;E4fTt~= znytQ5q4z4pivoXwsBC(s!f}fD$Qmc=fz1zTaKH% z6J%h^%vpk2XE5nxxhR2sVBMrIPRXrqH5e`)UuH1mrW9*GF_w!el5G~4mAg6G=2nA_ z;~qM*{xsq~Vh9%mHj^f>ROuBJ;|`;}>XpGkHn|?&noMej2Zaea*uUsiq7%@t3yv{6 zMrUW61;xRA85Ne_JUM{-;??2o=HX~hNoKCmnjjs1jQX7fzH*^;oc;MK(4>l-u_zkT zTNKSk1G7K*n;M6~V3D~jkOH>DjmoPcQ5=~Nshcx7E$u(eOO)?$(6{ZKF(Fb#!1 zyimpH0p9@sT*|>LjENHsJREmBg)63zDF!3^#h^)Nv}ZME8F0ZoQ`Qf%?Rtma=xtBa zJNfeEM|D`z)AECMi!0x1YG>vh504KdSju2XlbMTdL`2`^z=fG&o8X^*eVn(W;eV}Aw%BKg~i<*`5)+#v;IM6}q$GpM~ z$=ZxmrTK16nu}XrSD-h%%PwH(K;vs%Qb%0xWo(7=?nT5L23tYN+{yWlLIYD}pUIrI zw#1#?7{;>9rAd(pKMd{UkhOxZLd*=b1q)Se`i!1m2W1rJ$b@4vOT+bfZgj|!yK(P) zFf9PT3zZrACdfR;#nV*IfnTCo0d@-sNwE^aW-|PJ_YhP5Sx`mRn@>jL@1>zs$-b5v&Z!^ zJh*L{j*Ai!eBricT`;?XN#iRghnzabcJtaoy{yYIC0Y6cCevE%Fw-j9p5^X9yFY9; z3_ngB03yxAD4-+yD!@r`1ZbjFK;^4Z5QK2+T@;2a7M&%15$U@!2nxSdpJ0OR+9<%9 z^ts-0=q6nifK1Pf`lQh0g7&qTPH?X>*ezb8;fzAPP8Oj0O=baVNh_CQz@A^5=57z9 z>Ih4jz*3Hid3f~F-y%-4_C33T&J_77XI?)`f^zp zv?uD77WN@)pcYBPScn$M{vnEiSeq181R*TerRwyMvUaOzG<)1l!{4zSJK%V)oWYG| zfbUeE8C)0yvmeh)dc3qXq!*a4!ZwcTM z^^_D>iplQxu|DOV{G$Bspx+OEvpUp3*ysFExY z=10IebyJYd=V;5g|)9f^_@f^FSvhT#|tiGB_vl=+}>Tkl^;q{A`+2o^F-T14O z3zp|pHdmw-uNpVw%n6lkT+Xc{8!^Bt!=FI4HcY_1l;q!lfBcQDn>K8H{_54MFJ6E2 z)x3TfhV8?D;r`*b5GVqp6*pzTo+wvv7Hs5+o5cxqrNr{*5J0E#V|r@pT9noG*n?t>Pj_4Ke(r(&CIdBPL^l;OQ6Ib z5w^*#4!82~$Tz@*xQ>673vu5SkjM0NU6^J+Q{{yVbeT-pQwiL{i#OCJXHALPE^Kf#jF?B+iZBv8s*h#6}hXEjftra?g&|`mUxqW zh^X!f{$cIR(!!ZNHQ5dw3j|WEV2f=Pk>ZpS^tf`)Y4VDbyR&>8qAxrrHs$qzeOFzFe7AS~#O8obAvX zIL|~>jb$ArdBGxYcR>jbZPh+`is&@%hm&}@(WpZVEeY8E`Og1_enr&9IBY6|&23c>n+ENq1 zD`F&k8Ze3Vi)bhRtnsW}y*h)2e`^Z1w{ zvA?cSW@TsF+-^r{QCoS9PF9CyGUzd^9vW7*(VgY>!zfD~)*`bl!JKN}#AE|EU|0?- zQK(hO=LDH?8QaD79Fy1{&=;-4cTy zyHImOnlHs+Pd%!-I5{oRma(`j(c=rIC8r#T?R8plo!5O>hSg-ng=e6S)m@&Q?B~{w z)SOI%(cEZEPLcJN1T#L4wJZ!xrVT6`{84zl zp>OjyIBA2-#Q4>xpNbl`$PeoH)x5}3QR8nkI@YG;q31|amyJ+f8CzSWd{G?beFtd? zW7{m~{>|7n1l^abbhnJI9XSspKMph_j5S7xYFO0~Zz1{|xLWazHdc|N+$U;$LiCU> zhKp# z>yBYBz8oS-02hy7wg853(U?|pMDE2>iGZbE3aZ!~)zc$lUaiF&BVbaxNP=g{sQhO{ z{z_?&XyZ1iD87xz8Nkv78VxH16^aB6qt8LZ`BA)!9OV{KL#5$aaWtGhQd_x9l=&F5 zW!I(=3LY23zS`1`Sl_#pXEh483ks_FM~Qruf>&u2>=@I=P0=)+8d?q>w<)hL-N?k|hsK0Z&yefbFPBV%i;xJMjg(I4=@ z{0C_XbMIua{(U>P4T1R;>iTCrU~N_JnWxUZ6UWw9wVrwE++$aaZXq%S(rXxV4_L|5 z=9n6TR9PZ&#QfnRjC0~cwSIJeV#{kxLK;!=oX)sN&LZwqrZ?Ml?uOzqr&+yEX0>9 zCmsTYngkS=?*|1zw~KM9o}ghjYjhvo*F$2hdlmN$&`7?KyklTd*UH~vt)w=FC2#zQ zB9PdK){SW3z|b7hBGqW!i26;>KPM_}RJ0m*3GPQ^DG}crIFRnr@Q&KbNs%w3wUs}J zGC~KHZXeM>uZ_+~wWWQc6wP9qN2)e+JxM|p1|=f$_lW$;$XQhOqaB7XFSPgZJj^?4p zAoZa>Rps{Bal}j8k#VR`RcWKv*c0m`UfPHnh17@oRGk^gg8TENY;7Fz{G3d*k{*__ zQAd5A7Rf?fVd!*hP`X9RptX9`UT<_Rap?YgJ}N^rR9gV0_`&vmR5CECMitV7?+vLONy+$f2i+seuRvO^V1xWpwyaf}+d?=Ty=)xo5FQV(cSJet9Y>WrtCJ z;A6i%s3VdBpEB%&*xm;Uj7GQgQ~M(-?bBK%emu}F ziON846L3?RgYT87sr(_eAkB86b@>QY;Xs0He?@@n}NN-qw?Lz#jRVo;ce8p zt9HNHGvaQxT%iS0JOMhT1r^!M$XBY?qn*`8^RRZ|6g93TtV6F0Tt?SyEidu_UnNbF z??^Uc54cXwz>CgNNvSG$ML-C#yZ|lN%FA$h{ zn%xMKv|w%TME*rhquXNQJl#-c>tr~==tKMW@Xz2Ivo(UdaPa3F+`cqR#!Y;9qKMny zjuhik*FWfZVjZE;?XR0+W#G{@E~=ZV_0qI@L=n7!1McJXSsV2xZJ`(mvFEhP*r?Xq zNn>*(lYnD7Ri&A-Er#QKf-{zfIU&wGqbIJds6(fCSO+#osUps{BGDYGL1%2*4M)PN z`X-Go(N!m!2Yj>N;SNba0L;rOl_7fp0nvgzMfXbry0dAl+Vf02-z;AyMw2VuPR~0D z;y-U#HG>hIKi09HY;N}tjwZLbU#6_KM=uxmYpzpvc zmDt5$H=XU8=bbB9rN^pgEE?Y6e?d&QkL&b`gr^Wyma%tY! zegstzRYy=IE()^^{5-75rN0nWv~vpe`EkN0h3;L9-m}$5@9I8GIa8cC26wep>U4<}2%Ra=ve9FFESk=GX}B}un{#_IEa z-oY}Um32dQoTt9EKuf9ylMKp@XdnCU7O|Fdya&+AM0bm7U5Z2Jw|YUXZ zfgyi&IM5!e#b4jAR^$Y%pqr@{{4&%vYHY2|qbhN!o4v~J5j|z?2cdg3z|Y6JelPZI zH0Yxnmtd`h)^S5GAfnbs!!!oO39&Z!#=ean;(o37L{4CLi}9lMG0lzn*%NE?o!GZg z?Tz{Y3V0*UJb^z+-p8=wf+-LTB4Fjn6Ye|fzWdH%9~?jY9Irb5?YD_q9+WkqtV5J_ z!fgXqUsPVJW4aGjkVL(|qSEp7AJwdscCunv%#cC z^V-=U^2g;@PAbV3`R2T&l!8=qFqthnNCtneF;vx6oYRnB*;C@3nhQ2BOf}^u+Y3{T zQ-{qggzWBO@3{O5k&WJvEB>E)&>T==02Vy|Wbe>DEw$lVr_t>kxOw^VH`ZLTZq6L? zk)MkEeQG|e0K>JR@IK_TzO@&N0+0a%k?!9>QD$PG7;49bVS`Ipi=&`jaEs*rbHa-@#+ zNT1-z8tq9^q=-!rPu6NrY$!8@Y9UrWYN79`k%;_1u!M99uU}Y83c(QY2VlH!S8bSa z$BBr2HT}(WcWYTL(W6C6y$bj~Prz$WR^~WPco}t@wzoR?cfJXb+^b zP0IH=gCp1R_dR>kEeXO=q`V0DG9V_UA9w0i5H|9vYvH~VHMBFr9132ORmOlJ)s6p! zRgDmf!g3IO-q+#@Se>Uf>)23dn%~m7DTU{lte5!Poayb0froBpm#>8^GLoG>SrOBm zfvF?DY0;cn*`l-A(X3_RjCp6zoPPE^K8UdFo2E>`|8UA-yOrzMLZyx^Ad2QkKI6B5 z+G74evRBqpJOR&%lo&PpSb<)O(~k++Z$c%PgA)RI-XHQh z+KY1=6O$(v>Gdi6s%p=Q!!9`WglyOP?r_(liF$oymNjicXmziwt4^{h=eA5}>^mk+ zzc|qbpg26kCEP8l-RN0`;RJn%zN*{Bbi+TgmTSm@ax?pwB$qvM4S$e-2ZD%h0UCZyZM|+IwRAkd6K*pim$-W<|sGU z*YPi|>2=zbE0ufgFdp|=?994yqgjVL{~kA@&wS|)p2Gq(!x*igHn z$rpecfF^+%L$waJC-<^17N%UhOTIw=<5c!Vsc(XEJV9O=`7Qiyl1WVTsX#PxK+OHZaaH$lL` zoQcdC40D&_W*@`$^JK+6ZQeXydi0s6AN%0O1Jr1O77>O&3{^N86+TAsiK6rgD2*5s z?0LQy_Q+;@bHM2$lf%5)_WR#A|Ni$m*IaWg->VEML+p5V{P1*E$Lf^bkPYN{uIH~n z7sR;mI~$ag#cxDV(eicTH}p6B*6fr~9(Mfrohj-+iQmY3T%qbuH zb^KQEwWj`54_QxSFRb3^w+A{Y?nhRhlRkkDCvfCe*Zpu!IB?vidQY&Uqj5!lzLS+E z_EJloD85OwjCl#HV$|5>5)T?h{6@@ATHkPWjF_|V-@z<#Vq#?B!nL8Hp=AR@y}jED zLMg613Z%+CzuUZd_X1c}-@l-3t9+zfNG~YKvKjJ-S|z^)v~oF>o7Mpv&MLSfH=!?-veZ$~NI$$}eV>atZb32nbtSH7q~mT%a6QgP8KmmRSrY zdv>U(D3onaF)T9}lB$y|a!I)}G25P&X3x$Fr(04|5&-iAX((pRj`f~;C3|+*BvQ`| zHtoubaQh{HHDTAToJBCqgw=m1BtKwKy>3SQ4FZ00bb#~6!o-vu8+@ts4sT;~3+LaS zc+9!$c|vMtx`%{($e-Qd&m|WPwATdkoPqYRq>)`WUFJjTEd32t315(y9|+t_XV#~t zTZMmVDh$ydeViRT$z@bsO!La0*v+O@ - /// Load default fonts - /// - /// - private static bool LoadFontList() - { - CXMLReader xmlReader = CXMLReader.OpenFile(System.IO.Path.Combine(CSettings.sFolderFonts, CSettings.sFileFonts)); - if (xmlReader == null) - return false; - - _Fonts.Clear(); - - string value = string.Empty; - int i = 1; - while (xmlReader.GetValue("//root/Font" + i.ToString() + "/Folder", ref value, value)) - { - string Folder = value; - - xmlReader.GetValue("//root/Font" + i.ToString() + "/FileNormal", ref value, value); - value = Path.Combine(Directory.GetCurrentDirectory(), - Path.Combine(CSettings.sFolderFonts, Path.Combine(Folder, value))); - CFont f = new CFont(value); - SFont sf = new SFont(); - sf.Normal = f; - - string name = String.Empty; - xmlReader.GetValue("//root/Font" + i.ToString() + "/Name", ref name, value); - sf.Name = name; - sf.IsThemeFont = false; - sf.ThemeName = String.Empty; - sf.PartyModeID = -1; - - xmlReader.GetValue("//root/Font" + i.ToString() + "/FileItalic", ref value, value); - value = Path.Combine(Directory.GetCurrentDirectory(), - Path.Combine(CSettings.sFolderFonts, Path.Combine(Folder, value))); - f = new CFont(value); - sf.Italic = f; - - xmlReader.GetValue("//root/Font" + i.ToString() + "/FileBold", ref value, value); - value = Path.Combine(Directory.GetCurrentDirectory(), - Path.Combine(CSettings.sFolderFonts, Path.Combine(Folder, value))); - f = new CFont(value); - sf.Bold = f; - - xmlReader.GetValue("//root/Font" + i.ToString() + "/FileBoldItalic", ref value, value); - value = Path.Combine(Directory.GetCurrentDirectory(), - Path.Combine(CSettings.sFolderFonts, Path.Combine(Folder, value))); - f = new CFont(value); - sf.BoldItalic = f; - - sf.Outline = 0f; - xmlReader.TryGetFloatValue("//root/Font" + i.ToString() + "/Outline", ref sf.Outline); - - sf.OutlineColor = new SColorF(0f, 0f, 0f, 1f); - xmlReader.TryGetFloatValue("//root/Font" + i.ToString() + "/OutlineColorR", ref sf.OutlineColor.R); - xmlReader.TryGetFloatValue("//root/Font" + i.ToString() + "/OutlineColorG", ref sf.OutlineColor.G); - xmlReader.TryGetFloatValue("//root/Font" + i.ToString() + "/OutlineColorB", ref sf.OutlineColor.B); - xmlReader.TryGetFloatValue("//root/Font" + i.ToString() + "/OutlineColorA", ref sf.OutlineColor.A); - - _Fonts.Add(sf); - i++; - } - return true; - } - - /// - /// Loads theme fonts from skin file - /// - public static void LoadThemeFonts(string ThemeName, string FontFolder, CXMLReader xmlReader) - { + private static void _LoadFontFiles(CXMLReader xmlReader, string FontFolder, string ThemeName="", int PartyModeId=-1){ string value = string.Empty; int i = 1; while (xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/Folder", ref value, value)) { SFont sf = new SFont(); sf.Folder = value; - - sf.IsThemeFont = true; + sf.IsThemeFont = ThemeName.Length>0; sf.ThemeName = ThemeName; - sf.PartyModeID = -1; + sf.PartyModeID = PartyModeId; bool ok = true; + string name = String.Empty; + ok &= xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/Name", ref name, value); + sf.Name = name; + ok &= xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/FileNormal", ref value, value); sf.FileNormal = value; value = Path.Combine(FontFolder, Path.Combine(sf.Folder, value)); CFont f = new CFont(value); sf.Normal = f; - string name = String.Empty; - ok &= xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/Name", ref name, value); - sf.Name = name; - ok &= xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/FileItalic", ref value, value); sf.FileItalic = value; value = Path.Combine(FontFolder, Path.Combine(sf.Folder, value)); @@ -819,16 +635,57 @@ namespace Vocaluxe.Base _Fonts.Add(sf); else { - CLog.LogError("Error loading theme fonts for theme \"" + ThemeName + "\": Error in Font" + i.ToString()); + string fontTypes; + if (PartyModeId >= 0) + fontTypes = "theme fonts for party mode"; + else if (ThemeName.Length > 0) + fontTypes = "theme fonts for theme \"" + ThemeName + "\""; + else + fontTypes = "basic fonts"; + CLog.LogError("Error loading "+fontTypes+": Error in Font" + i.ToString()); } i++; } + } + /// + /// Load default fonts + /// + /// + private static bool LoadFontList() + { + CXMLReader xmlReader = CXMLReader.OpenFile(System.IO.Path.Combine(CSettings.sFolderFonts, CSettings.sFileFonts)); + if (xmlReader == null) + return false; + + _Fonts.Clear(); + + _LoadFontFiles(xmlReader, Path.Combine(Directory.GetCurrentDirectory(), CSettings.sFolderFonts)); + return true; + } + + /// + /// Loads theme fonts from skin file + /// + public static void LoadThemeFonts(string ThemeName, string FontFolder, CXMLReader xmlReader) + { + _LoadFontFiles(xmlReader, FontFolder, ThemeName); CLog.StartBenchmark(1, "BuildGlyphs"); BuildGlyphs(); CLog.StopBenchmark(1, "BuildGlyphs"); } + /// + /// Loads party mode fonts from skin file + /// + public static void LoadPartyModeFonts(int PartyModeID, string FontFolder, CXMLReader xmlReader) + { + _LoadFontFiles(xmlReader, FontFolder, "", PartyModeID); + CLog.StartBenchmark(1, "BuildGlyphs"); + BuildGlyphs(); + CLog.StopBenchmark(1, "BuildGlyphs"); + } + public static void SaveThemeFonts(string ThemeName, XmlWriter writer) { if (_Fonts.Count == 0) @@ -895,75 +752,6 @@ namespace Vocaluxe.Base } } - /// - /// Loads party mode fonts from skin file - /// - public static void LoadPartyModeFonts(int PartyModeID, string FontFolder, CXMLReader xmlReader) - { - string value = string.Empty; - int i = 1; - while (xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/Folder", ref value, value)) - { - SFont sf = new SFont(); - sf.Folder = value; - - sf.IsThemeFont = false; - sf.ThemeName = String.Empty; - sf.PartyModeID = PartyModeID; - - bool ok = true; - - ok &= xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/FileNormal", ref value, value); - sf.FileNormal = value; - value = Path.Combine(FontFolder, Path.Combine(sf.Folder, value)); - CFont f = new CFont(value); - sf.Normal = f; - - string name = String.Empty; - ok &= xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/Name", ref name, value); - sf.Name = name; - - ok &= xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/FileItalic", ref value, value); - sf.FileItalic = value; - value = Path.Combine(FontFolder, Path.Combine(sf.Folder, value)); - f = new CFont(value); - sf.Italic = f; - - ok &= xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/FileBold", ref value, value); - sf.FileBold = value; - value = Path.Combine(FontFolder, Path.Combine(sf.Folder, value)); - f = new CFont(value); - sf.Bold = f; - - ok &= xmlReader.GetValue("//root/Fonts/Font" + i.ToString() + "/FileBoldItalic", ref value, value); - sf.FileBoldItalic = value; - value = Path.Combine(FontFolder, Path.Combine(sf.Folder, value)); - f = new CFont(value); - sf.BoldItalic = f; - - sf.Outline = 0f; - ok &= xmlReader.TryGetFloatValue("//root/Fonts/Font" + i.ToString() + "/Outline", ref sf.Outline); - - sf.OutlineColor = new SColorF(0f, 0f, 0f, 1f); - ok &= xmlReader.TryGetFloatValue("//root/Fonts/Font" + i.ToString() + "/OutlineColorR", ref sf.OutlineColor.R); - ok &= xmlReader.TryGetFloatValue("//root/Fonts/Font" + i.ToString() + "/OutlineColorG", ref sf.OutlineColor.G); - ok &= xmlReader.TryGetFloatValue("//root/Fonts/Font" + i.ToString() + "/OutlineColorB", ref sf.OutlineColor.B); - ok &= xmlReader.TryGetFloatValue("//root/Fonts/Font" + i.ToString() + "/OutlineColorA", ref sf.OutlineColor.A); - - if (ok) - _Fonts.Add(sf); - else - { - CLog.LogError("Error loading theme fonts for party mode from Folder \"" + FontFolder + "\": Error in Font" + i.ToString()); - } - i++; - } - - CLog.StartBenchmark(1, "BuildGlyphs"); - BuildGlyphs(); - CLog.StopBenchmark(1, "BuildGlyphs"); - } - private static int GetFontIndex(string ThemeName, string FontName) { if (ThemeName.Length == 0 || FontName.Length == 0) diff --git a/Vocaluxe/Base/CLanguage.cs b/Vocaluxe/Base/CLanguage.cs index c81900b1..e832ed42 100644 --- a/Vocaluxe/Base/CLanguage.cs +++ b/Vocaluxe/Base/CLanguage.cs @@ -14,14 +14,14 @@ namespace Vocaluxe.Base public string Name; public string LanguageFilePath; - public Hashtable Texts; + public Dictionary Texts; public List PartyModeTexts; } struct SPartyLanguage { public int PartyModeID; - public Hashtable Texts; + public Dictionary Texts; } static class CLanguage @@ -31,7 +31,7 @@ namespace Vocaluxe.Base private static int _CurrentLanguage = 0; private static int _FallbackLanguage = 0; - public static int Language + public static int LanguageId { get { return _CurrentLanguage; } set @@ -41,13 +41,18 @@ namespace Vocaluxe.Base } } - public static List GetLanguages() + public static string GetLanguageName(int lang) { - List Languages = new List(); + return _Languages[lang].Name; + } + + public static string[] GetLanguageNames() + { + string[] Languages = new string[_Languages.Count]; for (int i = 0; i < _Languages.Count; i++) { - Languages.Add(_Languages[i].Name); + Languages[i]=_Languages[i].Name; } return Languages; @@ -100,128 +105,54 @@ namespace Vocaluxe.Base if (KeyWord == null) return "Error"; - if (KeyWord.Length < 3) + if (KeyWord.Length < 3 || KeyWord.Substring(0, 3) != "TR_") return KeyWord; - string tag = KeyWord.Substring(0, 3); - if (tag != "TR_") - return KeyWord; - - string result = null; - - int PartyModeNr = GetPartyModeNr(PartyModeID, _CurrentLanguage); + string result; if (PartyModeID != -1) { - if (PartyModeNr != -1) - { - try - { - result = (string)_Languages[_CurrentLanguage].PartyModeTexts[PartyModeNr].Texts[KeyWord]; - } - catch { } - } + int PartyModeNr = GetPartyModeNr(PartyModeID, _CurrentLanguage); + if (PartyModeNr != -1 && _Languages[_CurrentLanguage].PartyModeTexts[PartyModeNr].Texts.TryGetValue(KeyWord, out result)) + return result; - if (result == null && (PartyModeNr = GetPartyModeNr(PartyModeID, _FallbackLanguage)) != -1) - { - try - { - result = (string)_Languages[_FallbackLanguage].PartyModeTexts[PartyModeNr].Texts[KeyWord]; - } - catch { } - } + PartyModeNr = GetPartyModeNr(PartyModeID, _FallbackLanguage); + if (PartyModeNr != -1 && _Languages[_CurrentLanguage].PartyModeTexts[PartyModeNr].Texts.TryGetValue(KeyWord, out result)) + return result; } + if (_Languages[_CurrentLanguage].Texts.TryGetValue(KeyWord, out result)) + return result; + if (_Languages[_FallbackLanguage].Texts.TryGetValue(KeyWord, out result)) + return result; - if (result == null) - { - try - { - result = (string)_Languages[_CurrentLanguage].Texts[KeyWord]; - } - catch { } - } - - if (result == null) - { - // keyword not found, try fallback-language - try - { - result = (string)_Languages[_FallbackLanguage].Texts[KeyWord]; - } - catch { } - - if (result == null) - return KeyWord; - } - - return result; + return KeyWord; } - public static bool TranslationExists(string KeyWord) - { - return TranslationExists(KeyWord, -1); - } - - public static bool TranslationExists(string KeyWord, int PartyModeID) + public static bool TranslationExists(string KeyWord, int PartyModeID = -1) { if (KeyWord == null) return false; - if (KeyWord.Length < 3) + if (KeyWord.Length < 3 || KeyWord.Substring(0, 3) != "TR_") return false; - string tag = KeyWord.Substring(0, 3); - if (tag != "TR_") - return false; - - string result = String.Empty; - - int PartyModeNr = GetPartyModeNr(PartyModeID, _CurrentLanguage); if (PartyModeID != -1) { - if (PartyModeNr != -1) - { - try - { - result = (string)_Languages[_CurrentLanguage].PartyModeTexts[PartyModeNr].Texts[KeyWord]; - } - catch { } - } + int PartyModeNr = GetPartyModeNr(PartyModeID, _CurrentLanguage); + if (PartyModeNr != -1 && _Languages[_CurrentLanguage].PartyModeTexts[PartyModeNr].Texts.ContainsKey(KeyWord)) + return true; - if (result == null && (PartyModeNr = GetPartyModeNr(PartyModeID, _FallbackLanguage)) != -1) - { - try - { - result = (string)_Languages[_FallbackLanguage].PartyModeTexts[PartyModeNr].Texts[KeyWord]; - } - catch { } - } + PartyModeNr = GetPartyModeNr(PartyModeID, _FallbackLanguage); + if (PartyModeNr != -1 && _Languages[_CurrentLanguage].PartyModeTexts[PartyModeNr].Texts.ContainsKey(KeyWord)) + return true; } + if (_Languages[_CurrentLanguage].Texts.ContainsKey(KeyWord)) + return true; + if (_Languages[_FallbackLanguage].Texts.ContainsKey(KeyWord)) + return true; - if (result == null) - { - try - { - result = (string)_Languages[_CurrentLanguage].Texts[KeyWord]; - } - catch { } - } - - if (result == null) - { - // keyword not found, try fallback-language - try - { - result = (string)_Languages[_FallbackLanguage].Texts[KeyWord]; - } - catch { } - - if (result == null) - return false; - } - - return true; + return false; } public static bool LoadPartyLanguageFiles(int PartyModeID, string Path) @@ -237,6 +168,29 @@ namespace Vocaluxe.Base return true; } + private static bool _LoadLanguageEntries(CXMLReader xmlReader, ref Dictionary Texts) + { + Texts = new Dictionary(); + List names = xmlReader.GetAttributes("resources", "name"); + string value = string.Empty; + foreach(string name in names) + { + if (xmlReader.GetValue("//resources/string[@name='" + name + "']", ref value, "")) + { + try + { + Texts.Add(name, value); + } + catch (Exception e) + { + CLog.LogError("Error reading language file " + xmlReader.FileName + ": " + e.Message); + return false; + } + } + } + return true; + } + private static bool LoadPartyLanguageFile(int PartyModeID, string file) { CXMLReader xmlReader = CXMLReader.OpenFile(file); @@ -253,25 +207,9 @@ namespace Vocaluxe.Base SPartyLanguage lang = new SPartyLanguage(); lang.PartyModeID = PartyModeID; - lang.Texts = new Hashtable(); - - List texts = xmlReader.GetAttributes("resources", "name"); - for (int i = 0; i < texts.Count; i++) - { - if (xmlReader.GetValue("//resources/string[@name='" + texts[i] + "']", ref value, value)) - { - try - { - lang.Texts.Add(texts[i], value); - } - catch (Exception e) - { - CLog.LogError("Error reading Party Language File " + file + ": " + e.Message); - return false; - } - } - - } + if (!_LoadLanguageEntries(xmlReader, ref lang.Texts)) + return false; + _Languages[nr].PartyModeTexts.Add(lang); return true; } @@ -299,25 +237,9 @@ namespace Vocaluxe.Base if (lang.Name == CSettings.FallbackLanguage) _FallbackLanguage = _Languages.Count; - lang.Texts = new Hashtable(); lang.PartyModeTexts = new List(); - List texts = xmlReader.GetAttributes("resources", "name"); - for (int i = 0; i < texts.Count; i++) - { - if (xmlReader.GetValue("//resources/string[@name='" + texts[i] + "']", ref value, value)) - { - try - { - lang.Texts.Add(texts[i], value); - } - catch (Exception e) - { - CLog.LogError("Error reading Language File " + FileName + ": " + e.Message); - } - } - - } + _LoadLanguageEntries(xmlReader, ref lang.Texts); _Languages.Add(lang); } diff --git a/Vocaluxe/Base/CParty.cs b/Vocaluxe/Base/CParty.cs index ce82f067..0b17b4e9 100644 --- a/Vocaluxe/Base/CParty.cs +++ b/Vocaluxe/Base/CParty.cs @@ -360,9 +360,9 @@ namespace Vocaluxe.Base if (CompileResult.Errors.Count > 0) { - for (int i = 0; i < CompileResult.Errors.Count; i++) + foreach (CompilerError e in CompileResult.Errors) { - CLog.LogError("Error Compiling Source (" + CHelper.ListStrings(files) + "): " + CompileResult.Errors[i].ErrorText); + CLog.LogError("Error Compiling Source (" + CHelper.ListStrings(files) + "): " + e.ErrorText+" in '"+e.FileName+"' ("+e.Line+")"); } return null; } diff --git a/Vocaluxe/Lib/Draw/CDirect3D.cs b/Vocaluxe/Lib/Draw/CDirect3D.cs index 6e668219..a11f9798 100644 --- a/Vocaluxe/Lib/Draw/CDirect3D.cs +++ b/Vocaluxe/Lib/Draw/CDirect3D.cs @@ -631,7 +631,7 @@ namespace Vocaluxe.Lib.Draw public RectangleF GetTextBounds(CText text, float Height) { CFonts.Height = Height; - CFonts.SetFont(text.Fon); + CFonts.SetFont(text.Font); CFonts.Style = text.Style; return new RectangleF(text.X, text.Y, CFonts.GetTextWidth(CLanguage.Translate(text.Text)), CFonts.GetTextHeight(CLanguage.Translate(text.Text))); } diff --git a/Vocaluxe/Lib/Draw/CDrawWinForm.cs b/Vocaluxe/Lib/Draw/CDrawWinForm.cs index 7edd16c7..859c8352 100644 --- a/Vocaluxe/Lib/Draw/CDrawWinForm.cs +++ b/Vocaluxe/Lib/Draw/CDrawWinForm.cs @@ -274,7 +274,7 @@ namespace Vocaluxe.Lib.Draw public RectangleF GetTextBounds(CText text, float Height) { CFonts.Height = Height; - CFonts.SetFont(text.Fon); + CFonts.SetFont(text.Font); CFonts.Style = text.Style; return new RectangleF(text.X, text.Y, CFonts.GetTextWidth(CLanguage.Translate(text.Text)), CFonts.GetTextHeight(CLanguage.Translate(text.Text))); } diff --git a/Vocaluxe/Lib/Draw/COpenGL.cs b/Vocaluxe/Lib/Draw/COpenGL.cs index 3ccfd7a9..cb04e34e 100644 --- a/Vocaluxe/Lib/Draw/COpenGL.cs +++ b/Vocaluxe/Lib/Draw/COpenGL.cs @@ -534,7 +534,7 @@ namespace Vocaluxe.Lib.Draw public RectangleF GetTextBounds(CText text, float Height) { CFonts.Height = Height; - CFonts.SetFont(text.Fon); + CFonts.SetFont(text.Font); CFonts.Style = text.Style; return new RectangleF(text.X, text.Y, CFonts.GetTextWidth(CLanguage.Translate(text.Text)), CFonts.GetTextHeight(CLanguage.Translate(text.Text))); } diff --git a/Vocaluxe/Screens/CScreenOptionsGame.cs b/Vocaluxe/Screens/CScreenOptionsGame.cs index 1dd242d4..80c4ee3a 100644 --- a/Vocaluxe/Screens/CScreenOptionsGame.cs +++ b/Vocaluxe/Screens/CScreenOptionsGame.cs @@ -24,9 +24,6 @@ namespace Vocaluxe.Screens private const string ButtonExit = "ButtonExit"; - private string[] _Languages; - private int _CurrentLang = -1; - public CScreenOptionsGame() { } @@ -39,24 +36,14 @@ namespace Vocaluxe.Screens _ScreenVersion = ScreenVersion; _ThemeButtons = new string[] { ButtonExit }; _ThemeSelectSlides = new string[] { SelectSlideLanguage, SelectSlideDebugLevel, SelectSlideSongMenu, SelectSlideSongSorting, SelectSlideTabs, SelectSlideTimerMode }; - - _Languages = CLanguage.GetLanguages().ToArray(); - - for (int i = 0; i < _Languages.Length; i++) - { - if (_Languages[i] == CConfig.Language) - { - _CurrentLang = i; - } - } } public override void LoadTheme(string XmlPath) { base.LoadTheme(XmlPath); - SelectSlides[SelectSlideLanguage].AddValues(_Languages); - SelectSlides[SelectSlideLanguage].Selection = _CurrentLang; + SelectSlides[SelectSlideLanguage].AddValues(CLanguage.GetLanguageNames()); + SelectSlides[SelectSlideLanguage].Selection = CLanguage.LanguageId; SelectSlides[SelectSlideDebugLevel].SetValues((int)CConfig.DebugLevel); SelectSlides[SelectSlideSongMenu].SetValues((int)CConfig.SongMenu); @@ -70,11 +57,7 @@ namespace Vocaluxe.Screens { base.HandleInput(KeyEvent); - if (KeyEvent.KeyPressed) - { - - } - else + if (!KeyEvent.KeyPressed) { switch (KeyEvent.Key) { @@ -143,7 +126,8 @@ namespace Vocaluxe.Screens private void SaveConfig() { - CConfig.Language = _Languages[SelectSlides[SelectSlideLanguage].Selection]; + CLanguage.LanguageId = SelectSlides[SelectSlideLanguage].Selection; + CConfig.Language = CLanguage.GetLanguageName(CLanguage.LanguageId); CConfig.DebugLevel = (EDebugLevel)SelectSlides[SelectSlideDebugLevel].Selection; CConfig.SongMenu = (ESongMenu)SelectSlides[SelectSlideSongMenu].Selection; CConfig.SongSorting = (ESongSorting)SelectSlides[SelectSlideSongSorting].Selection; @@ -155,7 +139,6 @@ namespace Vocaluxe.Screens CSongs.Sorter.SongSorting = CConfig.SongSorting; CSongs.Categorizer.Tabs = CConfig.Tabs; - CLanguage.SetLanguage(CConfig.Language); } } } diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index fb5bd244..e76db2b6 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -1012,67 +1012,132 @@ namespace Vocaluxe.Menu #region Elements - public void AddBackground(CBackground bg, String key = null) + public void AddBackground(CBackground bg) + { + AddBackground(bg, null); + } + + public void AddButton(CButton button) + { + AddButton(button, null); + } + + public void AddSelectSlide(CSelectSlide slide) + { + AddSelectSlide(slide, null); + } + + public void AddStatic(CStatic stat) + { + AddStatic(stat, null); + } + + public void AddText(CText text) + { + AddText(text, null); + } + + public void AddSongMenu(CSongMenu songmenu) + { + AddSongMenu(songmenu, null); + } + + public void AddLyric(CLyric lyric) + { + AddLyric(lyric, null); + } + + public void AddSingNote(CSingNotes sn) + { + AddSingNote(sn, null); + } + + public void AddNameSelection(CNameSelection ns) + { + AddNameSelection(ns, null); + } + + public void AddEqualizer(CEqualizer eq) + { + AddEqualizer(eq, null); + } + + public void AddPlaylist(CPlaylist pls) + { + AddPlaylist(pls, null); + } + + public void AddParticleEffect(CParticleEffect pe) + { + AddParticleEffect(pe, null); + } + + public void AddScreenSetting(CScreenSetting se) + { + AddScreenSetting(se, null); + } + + public void AddBackground(CBackground bg, String key) { _AddInteraction(_Backgrounds.Add(bg, key), EType.TBackground); } - public void AddButton(CButton button, String key = null) + public void AddButton(CButton button, String key) { _AddInteraction(_Buttons.Add(button, key), EType.TButton); } - public void AddSelectSlide(CSelectSlide slide, String key = null) + public void AddSelectSlide(CSelectSlide slide, String key) { _AddInteraction(_SelectSlides.Add(slide, key), EType.TSelectSlide); } - public void AddStatic(CStatic stat, String key = null) + public void AddStatic(CStatic stat, String key) { _AddInteraction(_Statics.Add(stat, key), EType.TStatic); } - public void AddText(CText text, String key = null) + public void AddText(CText text, String key) { _AddInteraction(_Texts.Add(text, key), EType.TText); } - public void AddSongMenu(CSongMenu songmenu, String key = null) + public void AddSongMenu(CSongMenu songmenu, String key) { _AddInteraction(_SongMenus.Add(songmenu, key), EType.TSongMenu); } - public void AddLyric(CLyric lyric, String key = null) + public void AddLyric(CLyric lyric, String key) { _AddInteraction(_Lyrics.Add(lyric, key), EType.TLyric); } - public void AddSingNote(CSingNotes sn, String key = null) + public void AddSingNote(CSingNotes sn, String key) { _AddInteraction(_SingNotes.Add(sn, key), EType.TSingNote); } - public void AddNameSelection(CNameSelection ns, String key = null) + public void AddNameSelection(CNameSelection ns, String key) { _AddInteraction(_NameSelections.Add(ns, key), EType.TNameSelection); } - public void AddEqualizer(CEqualizer eq, String key = null) + public void AddEqualizer(CEqualizer eq, String key) { _AddInteraction(_Equalizers.Add(eq, key), EType.TEqualizer); } - public void AddPlaylist(CPlaylist pls, String key = null) + public void AddPlaylist(CPlaylist pls, String key) { _AddInteraction(_Playlists.Add(pls, key), EType.TPlaylist); } - public void AddParticleEffect(CParticleEffect pe, String key = null) + public void AddParticleEffect(CParticleEffect pe, String key) { _AddInteraction(_ParticleEffects.Add(pe, key), EType.TParticleEffect); } - public void AddScreenSetting(CScreenSetting se, String key = null) + public void AddScreenSetting(CScreenSetting se, String key) { _ScreenSettings.Add(se, key); } diff --git a/VocaluxeLib/Menu/CText.cs b/VocaluxeLib/Menu/CText.cs index ca81bd1b..35a99e9d 100644 --- a/VocaluxeLib/Menu/CText.cs +++ b/VocaluxeLib/Menu/CText.cs @@ -181,15 +181,15 @@ namespace Vocaluxe.Menu } } - private string _Fon = String.Empty; - public string Fon + private string _Font = String.Empty; + public string Font { - get { return _Fon; } + get { return _Font; } set { - if (_Fon != value) + if (_Font != value) { - _Fon = value; + _Font = value; _PositionNeedsUpdate = true; } } @@ -264,7 +264,7 @@ namespace Vocaluxe.Menu Align = EAlignment.Left; HAlign = EHAlignment.Center; Style = EStyle.Normal; - Fon = "Normal"; + Font = "Normal"; Color = new SColorF(); SColor = new SColorF(); @@ -295,7 +295,7 @@ namespace Vocaluxe.Menu Align = text._Align; HAlign = text._HAlign; Style = text._Style; - Fon = text._Fon; + Font = text._Font; Color = new SColorF(text.Color); SColor = new SColorF(text.SColor); @@ -327,7 +327,7 @@ namespace Vocaluxe.Menu Align = align; HAlign = EHAlignment.Center; Style = style; - Fon = font; + Font = font; Color = new SColorF(r, g, b, a); SColor = new SColorF(r, g, b, a); @@ -366,7 +366,7 @@ namespace Vocaluxe.Menu Align = align; HAlign = EHAlignment.Center; Style = style; - Fon = font; + Font = font; Color = new SColorF(r, g, b, a); SColor = new SColorF(r, g, b, a); @@ -403,7 +403,7 @@ namespace Vocaluxe.Menu Align = align; HAlign = EHAlignment.Center; Style = style; - Fon = font; + Font = font; Color = col; SColor = new SColorF(col); @@ -442,7 +442,7 @@ namespace Vocaluxe.Menu Align = align; HAlign = EHAlignment.Center; Style = style; - Fon = font; + Font = font; Color = col; SColor = new SColorF(col); @@ -511,7 +511,7 @@ namespace Vocaluxe.Menu _ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Align", ref _Align); xmlReader.TryGetEnumValue(item + "/HAlign", ref _HAlign); _ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Style", ref _Style); - _ThemeLoaded &= xmlReader.GetValue(item + "/Font", ref _Fon, "Normal"); + _ThemeLoaded &= xmlReader.GetValue(item + "/Font", ref _Font, "Normal"); _ThemeLoaded &= xmlReader.GetValue(item + "/Text", ref _Theme.Text, String.Empty); @@ -531,7 +531,7 @@ namespace Vocaluxe.Menu Height = _Height; MaxWidth = _MaxWidth; Text = _Theme.Text; - Fon = _Fon; + Font = _Font; Align = _Align; HAlign = _HAlign; Style = _Style; @@ -612,7 +612,7 @@ namespace Vocaluxe.Menu writer.WriteElementString("Style", Enum.GetName(typeof(EStyle), Style)); writer.WriteComment(": Text font name"); - writer.WriteElementString("Font", Fon); + writer.WriteElementString("Font", Font); writer.WriteComment(": Nothing or translation tag"); if (CBase.Language.TranslationExists(_Theme.Text)) @@ -658,7 +658,7 @@ namespace Vocaluxe.Menu if (_PositionNeedsUpdate) UpdateTextPosition(); - CBase.Fonts.SetFont(Fon); + CBase.Fonts.SetFont(Font); CBase.Fonts.SetStyle(Style); SColorF CurrentColor = new SColorF(Color); @@ -727,7 +727,7 @@ namespace Vocaluxe.Menu SColorF color = new SColorF(CurrentColor.R, CurrentColor.G, CurrentColor.B, CurrentColor.A * Alpha); - CBase.Fonts.SetFont(Fon); + CBase.Fonts.SetFont(Font); CBase.Fonts.SetStyle(Style); if (!EditMode) @@ -766,7 +766,7 @@ namespace Vocaluxe.Menu float x = X + rx; float y = Y + ry; - CBase.Fonts.SetFont(Fon); + CBase.Fonts.SetFont(Font); CBase.Fonts.SetStyle(Style); RectangleF bounds = CBase.Fonts.GetTextBounds(this, this.Height); @@ -813,7 +813,7 @@ namespace Vocaluxe.Menu SColorF color = new SColorF(CurrentColor.R, CurrentColor.G, CurrentColor.B, CurrentColor.A * Alpha); - CBase.Fonts.SetFont(Fon); + CBase.Fonts.SetFont(Font); CBase.Fonts.SetStyle(Style); if (!EditMode) @@ -877,7 +877,7 @@ namespace Vocaluxe.Menu if (_Text.Length == 0) return; - CBase.Fonts.SetFont(Fon); + CBase.Fonts.SetFont(Font); CBase.Fonts.SetStyle(Style); float h = Height; diff --git a/VocaluxeLib/Menu/CXMLReader.cs b/VocaluxeLib/Menu/CXMLReader.cs index 947877c0..440952eb 100644 --- a/VocaluxeLib/Menu/CXMLReader.cs +++ b/VocaluxeLib/Menu/CXMLReader.cs @@ -8,10 +8,17 @@ namespace Vocaluxe.Menu public class CXMLReader { private XPathNavigator _Navigator; + private String _FileName; + + public string FileName + { + get { return _FileName; } + } //Private method. Use OpenFile factory method to get an instance private CXMLReader(string uri) { + _FileName = uri; XPathDocument xPathDoc = new XPathDocument(uri); _Navigator = xPathDoc.CreateNavigator(); } @@ -94,7 +101,6 @@ namespace Vocaluxe.Menu results++; } - if ((results == 0) || (results > 1)) { Value = DefaultValue; diff --git a/VocaluxeLib/PartyModes/CScreenPartyDummy.cs b/VocaluxeLib/PartyModes/CScreenPartyDummy.cs index 445a4c3a..47b1d37a 100644 --- a/VocaluxeLib/PartyModes/CScreenPartyDummy.cs +++ b/VocaluxeLib/PartyModes/CScreenPartyDummy.cs @@ -31,7 +31,7 @@ namespace Vocaluxe.PartyModes Warning.Height = 100f; Warning.X = 150; Warning.Y = 300; - Warning.Fon = "Normal"; + Warning.Font = "Normal"; Warning.Style = EStyle.Normal; Warning.Color = new SColorF(1f, 0f, 0f, 1f); Warning.SColor = new SColorF(1f, 0f, 0f, 1f); From 6380c739aa3706b0ee7234d735fd6bd161273a24 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 19 Mar 2013 14:04:39 +0100 Subject: [PATCH 16/31] Simpler Screens --- Output/CreditsRessourcesDB.sqlite | Bin 23320576 -> 5701632 bytes .../PartyScreenChallengeConfig.cs | 15 +- .../PartyScreenChallengeMain.cs | 17 +- .../PartyScreenChallengeNames.cs | 17 +- .../PartyScreenChallengeConfig.cs | 15 +- .../PartyScreenChallengeMain.cs | 17 +- .../PartyScreenChallengeNames.cs | 17 +- .../PartyScreenTicTacToeConfig.cs | 15 +- .../PartyScreenTicTacToeMain.cs | 12 +- .../PartyScreenTicTacToeNames.cs | 17 +- Vocaluxe/Base/CDataBase.cs | 60 ++- Vocaluxe/Base/CGraphics.cs | 8 +- Vocaluxe/Base/CParty.cs | 2 +- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 12 +- Vocaluxe/Screens/CPopupScreenVolumeControl.cs | 7 +- Vocaluxe/Screens/CScreenCredits.cs | 351 +++++++++--------- Vocaluxe/Screens/CScreenHighscore.cs | 7 +- Vocaluxe/Screens/CScreenLoad.cs | 6 +- Vocaluxe/Screens/CScreenMain.cs | 6 +- Vocaluxe/Screens/CScreenNames.cs | 7 +- Vocaluxe/Screens/CScreenOptions.cs | 6 +- Vocaluxe/Screens/CScreenOptionsGame.cs | 6 +- Vocaluxe/Screens/CScreenOptionsLyrics.cs | 7 +- Vocaluxe/Screens/CScreenOptionsRecord.cs | 7 +- Vocaluxe/Screens/CScreenOptionsSound.cs | 7 +- Vocaluxe/Screens/CScreenOptionsTheme.cs | 6 +- Vocaluxe/Screens/CScreenOptionsVideo.cs | 7 +- Vocaluxe/Screens/CScreenParty.cs | 11 +- Vocaluxe/Screens/CScreenProfiles.cs | 6 +- Vocaluxe/Screens/CScreenScore.cs | 7 +- Vocaluxe/Screens/CScreenSing.cs | 7 +- Vocaluxe/Screens/CScreenSong.cs | 6 +- Vocaluxe/Screens/CScreenTest.cs | 16 +- VocaluxeLib/Menu/CMenu.cs | 120 ++---- VocaluxeLib/Menu/COrderedDictionaryLite.cs | 78 ++++ VocaluxeLib/Menu/IMenu.cs | 4 +- VocaluxeLib/PartyModes/CScreenPartyDummy.cs | 19 +- VocaluxeLib/VocaluxeLib.csproj | 1 + 38 files changed, 384 insertions(+), 545 deletions(-) create mode 100644 VocaluxeLib/Menu/COrderedDictionaryLite.cs diff --git a/Output/CreditsRessourcesDB.sqlite b/Output/CreditsRessourcesDB.sqlite index dbfe78bbe06df0679d2cf15937d114f70455252f..3f960232776480f5bd4ffddbc3a2326c0ecdab78 100644 GIT binary patch delta 150356 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 z zyb*80oADOB6>r1a@eaHb@4`Rh-FOe)i}&IE_y9hL58=c32tJCB;a~7^{3||zPvYP3 zDf~M=jnCk-_#9n*{Rh5)FXBu1GQNVZ;%oRizJYJzTlhAdQXML(I>mM3dhthka?(BG58?)K zuQ-C9Yxr|M zZl#Rnl8d!f<)+#IWwxrnT(7A9!b%sbh1E?}ccoiuaQ1paUvV9RC0E?4PQ|5D`@du;t(l6G9dc{hr|}tLJyYAb)bp>^sb&j>Y@w2^ z54TX}PhrWHD{d2I-7DR(nL#5f;EdpZ$p>KVc&**lh?sFIEuQ2dwRlLiLNVtycMLn( zO1aeR7#irvR46(D$0N-hV73>tK*5A=HhWTFPi7lW3MO>3+2(?wa`qfq z7;K$0s<(A;lyBR6j3I49{~=Hhq_IFFq>v5Fb+YxE8z_3DZSL6fierSpToa(8N7P*M zUKQzIV4kU8GWF+;snS*&BLwD|`Xv+Kk~31S)+%KhYM3hJ(Jkeh=d<%=c7DEbzU+|+ z^9Smsyi=(U7oB=-LV2tdSZHjZzDcgMEgS>eRv9A%78)BWhAc9*svc=wG#a{A8Z~;z z=sww8FBL*oG|V&-SZpfSJfarshOFs^Tw)rsZW?k4`%-6LmKa~^9%))qp*g9kuK!P1 zGS-s`^|4a(5^nIip{@Im+SR&h41d5Fe$6N!SY|w2>yegaevfTg>$6QXP35b`yH1;F zJJTrB7}Ge@1k(>aZ-`MOw)RKj~LVxYfZ7%6l+bf))Z?^u~%ufKFwOwY<-&bq!TS2x@Aq! z9iMIPNO?ugj_c9Z`QC(W`0^<4SrrZ$?ctEo9uApUghM74;gGR195PmhL&oQD$oNb* zwTvE%>swskinT2oGbGw*L7+vC=dQ(Lh1wXw(-n!C_KCzy`$S^KhDa>cR4bRt)d{(R zTXCy}swcH{6h{Uej~(xnXw@#d1*a`FQY}!I^NPo%YJ7Y)&GlYU+k9FuX@)n#k})T@ z%pZ31=A0@sE{9aaIsTwW=vc#P{2<5TTm^uX*~_!HsBK)a*N};+2)S1cN`gD zoG&z-+qiCyH>!Gvo4ooeL#H?8wKGjQw^(zUSr?@q+DJ zvQw7oa&@7(Z2ZE?Ksi9k(XeARc?4_Z8{^{$`IV(VGN-Am!`i0RHq6@K2WGahPSYlQ z&=Xp`${y>PVTVHFo&G|>qU(>52G?%+T-fJEkJ^4&yU#^^F6MJ_pG!2jsE-ykW6}X5%Do1K1RgHuzd{M$FO}2+sCkdjM2E*K8EdM*gl5sV?=$cqJE92UnA<* zi25~RzEv^bmY8o#%(o@xYmWJvW4`8?uQ}#xj{BP9zQ1uFBkp6weT=w|5%)3TK1STf zi2E1`A0y#oBz%m7kCE^(5?(oEBa{3PQi89&MRNybkyekbF1GJYrHcQQU_Z+0i+buwNj>+fX!oQ2t4tf!0h za295Fu^*g;*_?&hoQ2t4jh+>^*+b65Y|g`M&cp03_Js2>oAWU{#h#?t0?yCu6nm0l z3sM}(6yv1WGtSs-&e&|u*lf<&Y|hwh&e-e}M>55cOfx=bayDmjHfM5nn(@<&&zYT_ zHlwvY7E3g^IFHu$Se!?&=FGU&=b3SZz|*YUULoHIL{JVU&DfEyXg<@oefK((NV5pQ* zw0$I-^AI|p^AO@V`_Nn?o_5&7v(h22=Mwcs4pDFH67@z7QLpC`^?EK*Z{!ed)c5=$ z*|V3ZHwO{*<_MzR96{6@xkSB@L)05NR@!2Gi}B5;3@T@Qi}5YSH}Rq4jAt>P#dsFu zS&SEE{bAN0X8*#hKg{~WtUt{DHR2Oy|H6zHX1p-tg&8m0z+?Zy>|ccOBa9zm{0QSm z7(c@J5yp>jd?Sn>Vf+Z=M;JfC_z}jBFn)ybZN|45-)4N9@omPp8Q*3+oAGSMvl-83 zJe%>_S${k0Z)g4V&UU)aVWrzye>>}MXaCySzjnrHXZ`IBy=;G!^_zU$N}KB@L|K27 z^+#EMl=Vkhf0X@+GES8Ji85Z4{fRPel;am={21fM*uNP27h`<$3D!!RPq0K8KgRem z#*Z<+`Gia7F@B8kV~ihXyg1{<886OwarQUP{>B+E&UkUgi!)xF{f#r8$;+&?$;*hc zzj5|A!T1TrH#wP=HaQtl#y2?`$&7DuGLjiT!T2U8qjJVKIT^|9ugS?sW_**AS!t7# z5oP~PPDV20o1Bbf#y2?`$&7DuGLqSUlarCm@isXb$?U($$*i==$%wN5CMP4A<8N{@ zk{Q?JVk9%J$;C)!T$78D%(x~OBbjkcE@q`oE=H7bO)f?<$?@)F zT$7{GamMZBcy}^xC&%05ZdTglZbUiWCU+y5@l38pGUJ&mW+XG7$<#<@9Fw7u%s3`P zv(hF*Bg!}?LnE2n)nsTSGp@AbvYs}>R=XEAn&mt*h; z8&B5t7ix67OQTR9H?@;iij9bwWj>uW%O+8;I}-Jpi>MbqqF!?m^`;@BUKojbVI=A` z7tuzF67|#7sF^zGnDHTLmQIq54@t9h(unh>BBE@ASvpB(8~EY|B~=Zp%;HIBFgiys z$$)`8Vu^^Lv0xVv zS=R!H4OiE;uDY%-x~^c^Rcu(+RlrJS{@;6_nG{Gc;`{zSfA~BzndiCXoO91T=iGD8 zJ&!;HK`;pG1W{O2S6x$U{!>IT?wr9@U)S0);;#I=*9!uv76ju*bt6Vq&VTXhZv?@V zh}g9E z`Tgigh+ySav*%qhYtH(QOY!@lKvA^#%WP(CJ)$8QEx+(q-3 zt;!!aqZ7ZU0_bh?7S5P9Y@KSnK&t*L2+CLHPg}J}mQTzAX*`VbF$<>6pQ(#|?FfFq zCkToU7A;)5>>K0M`vua5=doi1hPxJ5IW8)w0NJ;=_nmMOzfOre1R~xbb_!IyNqi80 zKO{bizYmEY;qT+(agwi`l;{QM>^nWW9`=1cjRf|5FQd-OsPnS0*?)wWI*3x=qSP6oP>`e4S15H5r4FLhL6mw5 zJZ12|Dj5BL0~`+vb^ecpHo!3oB}e-|5ytpW3*&H&M++1EKcM!*sQoZ%KaARsgEn#a z^rA!|`YT3X>+yRdu1&Z$11p9fEAf*s1T-uZG${4mIi(aroS;OhM*!;qVDt(~-381| zy#8x=vK>zz!IKy8* z`T(49zyDwO>#yB)zQM0|`7b}7oy4!>fYRW<8&tVRi1I%n?(&}&cl&=rA5V(+`9Bu- zqM!TG(mwz9DE%d?%iH}Hzy8fz`WY>qz^{+Mw+7JG=>NNTum3Hy^fFp{HPF)QXz2}< zd>k$PkN5{%5Bhh3N@k2os9+Ses$I2Dbx`$^>fb6~h$IikT`bzb88m(r9W|uZxTdiH9{a80% zH&wSlw^6rUcbD!--LtxvbRX-!&};QJeWE^JU#)M`Pt`BbU#h=azYXJQz}T^QVia^j zg8w}s*?&yP2BmZTM=_qeg#!FN#D555`WHUh)!?EU|MxHc>l-X$A1d*{BHY4cC4CZ!puI#!P!cyx#v7 z;D|$wZ2y1I>k;(&5qkYIIO(6l23%L*+K6ituFZJ19p!f5x&c=wuABYekTA>uHCp*V zNP)CS$DGLapF#^Cpymgt`2lL4K&?}#aSB++`QH)JP|6D~90G_6flU$a75kqP*5P|S zt_`@Zz_k(ACR|bAmj^&M8F=PFv~UxrKdbHbwS=J0Xw1FO@{O^M%|3+(v z(b{3Ob{MT4Mr()B+F`))xo|h??ZUMi*B<|;0_KHq0Cf-HdffjxG5P-sE{#KrUQl%i z@Gta#1{j|~tKXp2Z_w&DX!RSk`VCtB23YoodvnN2xaa9t(&kV$^rwc_*%2c(xnY9$W|T{1C3g{`W!azX?{f_!U}w zA1%Iv7LTIE?*Qe^;GOpY>8*hD5kR_y^Tk9+o6W$4@xykM-GS={TsPwC#C03$9OgW+ z7(6i_a^C=%W8^aITlC^bFFy3*6RH7oJx00>b8##%T@Q+H#I*_6W<1}5vODnIiR*5Z z-Gys6E;bkMN4*26cL>+x;Qqt7$9U##!2NH){0?CL99-}ZPT}>qzY*6aT$?e@7L5Ka z!1^bQ{!Y|-0;B&L==UAycM|mb0`bLDJqVMEh?7*7pL|cR7kH9k@0q>76>)!*e`$5Tvf!|ka6Afjk6Up}^b-?vKJ14IJWte*$cn+3EQ~#9 z_i_KbfapbVPAFPTz+BA+WpjbABsu;C{2A^{a=d|>?{L`vfYN^j><<9;J%IgQz`h%` zUjXb({yY!Zp=n^VRb#Hy`~L*k9|P=+OAcbZUPX(40f)Q?*lz;ty8-)dz`h%>?*{C< z0sC&i{t#e)9FLfdk`$X3VJ; z&JF(shkq}O!Tr1Od>5|Wxc1<>AJ+j$^h3BF_x~3&@-*mL4eqRmL~22gqwx1GT)T1Y z!K{RxjT%3q#*ctY>it{%#bgA-#0Wm=0GzClarv(M|gT16#5!%j^Pw$^sEJJV{v5w+GhdnJAn4j;Eeac8SesWKT7-zyW$tn zfr6q2VDJ-0f$39*=ShslkD$*f%;+C6qrV4sKLMtnV0-vLv+sfF8BpB7u^opwIv$jn z09iB#Uu0yyU_n*Qj`NS=t z48!OL;C2fAL_rfrW6tJ-FZlQYcE&Yrpzhtkv}X)|0kxSt{ub?hi`rdS`D_6e&~V`J zP&_kYrbz9vIrSxI@fk+(KYSD!&eBMJ1{}Ub+g}2QFNJ$??ZUMi*B)GZQT~2h`*7{Y zs0K&(as17CItD2LeF}<8R6mBEPNSz&=;;^qbQ0A4kwZTkklux7cjLMT*S)x4W22|j z=;;)Ck}%qb@BJtnzzmf74!ly0xl#*msOPrfM;M!z92Rlz;+CH7=o+Oui|EkCJ!_W2HG&G{?}sf?;m znHq5U*_KC8!*HF`t#1bR>r3#_PvD~yyq=_sn4V&7_WdPEVMt*9tmhZOSe^uh`jOR; zYFK*-9{5p`gk(s$G)QTMkR{|`T=RqyX732Kuzl-=CLux?28kLatP?f~slpcg&la`| zohW;=aGOvd+y#rf1Qz!mp$rmrpHM067Y?HSA^fl7o*L%ksTJl4BKPr_FPb@hi4em* zJ*ns${~(u{H>bb9;q&6p#P)e}W(($v*ryF2(}bA76ZTvxB?Govta=>4jkT=8lf=OH zu)z1h!1oJ*@3&AU0e!1cj|ej6wGv`+DFm%}BZEo2f!~qfi$$5~sHq24YK2x-170r* z`UQKA6%xe*fM=-CBJStkP2wXc(IP&K&nEF9d=BOHn6IoE7whQ&zFB#c;LlP~hLt6- zIS9u?#(ZedcFgZJy3hTC!TY4F&wcpW=(VgoU5_i29tMnp@G|~OpVD_0fgg@)lrlwVhO?F!Lll%$!3-T}Ir<@jNl(WX!>>T49=bYf2@0QzU_S9`L*-=7*k9{j3Xw7LpKD_)%AkT z$f0WobVCBr3BN@BQUK`6f2sPV*6;V9_8<5E+5fEnL4T6(a^FHuA^Bu1mXCcdhDL-nI11(`OE!dF0Fk$L~IV=keQ*?>v6X@tcp| zbiDKUjmLK!-+ui1n~pC&zTo)$;u3g0S||OD`bMvNRadd%2y z<0nj&B9_qn6;eK^WxRQp2shrKA-)Vw?+`wU2!A7kB`TMXM%sO#2*{3 zUVqJ%*KWP8W5*4`_FH$}f?Er5t&+;{eFTAk&nf=9K$8XZR?JeRkp2h}GK%*rWy06l zk0|8t74H`*{uCY&*=;$yyDxzquadkYU5B@CXTJYO;C-*6M^QtA z8V2I_cwPLHjB(Ty=p1AP|Ds1XtY5!@T?}^rzv&J133yMOf?#!f-QFC2w z1@2!xXGF7QTIr1N6?Jp#XX6@UnOi!;vU22{5wj9!m(GfLt^MZqKjI(0Uc=v@NRfX7 zT}FSwe#8*$903Kl;PHJi&?2qDgd81!IO}e>&;PE%vLY^E8m-6MslPwaxV%g z*&`)x=jGCc>%>fTN^@dSjm=d!JiOX^eUw7AfmEdL9vTsySFfqo4)bLDjwQqyljLMZ z@(6=SzH?~v4D_!N(P?$l8lu9SA#>&!F0$HfE|b1d_mAYwldG%-hcZ83=}H}DnenJn z>&TYNv+sYwRHf4ugPQB%6WKyv1U4pU!CdHJf#eXkDO*Cq9n0a*x5jcf!*jA3pcy2A zoVS1{fu3saI@+{-R7zxh^{C;gwz}%F>=?5rG%P2^oM=^$JNkbTN?+{q(ElloOCMKV zRuZ2vrn-E3s@<6srcAX*Cxt_2}>mpb_FnD1h%?8_zGeojY19w z-$3vbq?ZSVfurXYfuSeCEn!TjEY??tg-yOIeqy2By)oT9H@+&bp>otTk1 zr#@e9iISvPB9m%DwDwkyT$yH&N08+cMp}$_6<2EI;}de0)!Uqn8Ka85MK)JWu{<{I zs)SNiYLq)WBqYzFOH-&wX>w_-f+T2lVJQHd@jDsA`8~kx;PYCq&LJ^4D>2evKwd!! zLjX^(QMlF3d5p|zpOn2QRiSEcz9*9&y?orOFD<&sYJ24R&rZ}}W`BvA?NUvvn{%Eg z!IQ(8wxxY~#^R(9O?&Hx;+Hp$eC4J29Z~Lwcf9%9MD%z)xruy$dV1_jdc0Q5A+J?w zReF@3?`Ou(jHr)Xu3VN;l`$rZ#>CacEn5~>>zwG$r9ObhY6Hl6SIZ8S* z@-fd!&!Nae_#| zq0?kukr|N@YOKA|Msnj~V#3n(p{21pZDI(?)X}#lrj;za-J5W?nNCP6TYh_f{7rWG zq9HkZr+bS{@)}3d*3|}WsZkCbu!~ELn59a<;`U~Hb3`{8z0dr3@uZtN$cagpcNO7* z5RFpH0CR#M#4BBZM*1J*W+fYIiSe0iVl<^Tn=jf~nmT$@tU{h&s54B6l8KugTkQ9F^8Y8%%4AgNeCJ0$u&iW$x;pS>WtDB4ap36M8)+&78lqJWchlQ6VMWq{QT)v97s5P$Yf{~uo*%L!lQ+0GiM)`(YtCQ|( ziLylKUn$Kf9AXVA&nPOiC_$quK;ip9BSv3|!x+zj%Je?#oIC4nmaWZ~*39o4%~p%E~pG zk?S{m?M1QGMRGD?*qkN#(Z%Mi6>+9aqq!;}JUdEJR+ntcu-Ka7!}E+}Ly|YtGO$s;5y%@C7$f8aCLcnMzK+Wal-x{ zox#TmoF?gfPJK|Im*5D_z~GRPSWt=yZ)w(e66&{*G=r($BZ?+NS)SfFH^n?|)XF7! z&WbS0guNGK*-1r($Dqs78*5UX`NrLHWxP&Sr%e%??@-TTtW@)8`!3mp@te`9k1M(yuvw+)P2@s5*O2Uz>fPlo>(%;6*shPy@ zC516{yxV#tF_E)cL2*n~s7v6F{hqEM$FP>eY|#;AyqB)9`yL>14qvH_99zG5;T4B2 zK_4YTE?q#_Dv-%G$Zk0?quW{cFO)tg38G{H_r`rdPp z=WOck7WaY&@1mc>Qvt~x&-srF!aib9l1EmvWT-JI&Wts3$7)rJHM&qQ%8ePO$Pw`& z@+)oGln%eVJ+DxnDifne7wEMN-M@~hHCqxba#fVm8?GL2wJj;6bWCbmvqCYvOfE~x zb%%$|kSy1s{*^KnJs}JiW&nvCv3sn+7SI-+SS}<1L4XIWT*Y{DC1bH$a7rB1NBuBP zvhrybWFOun{m=L-O?HJMufm|KCS@%fwc6J<84VMZWZH-|BiCscT=nFPaf*47QP;kl zk@4*8s%76Gyu5YB)$`WqNbS(lnB;LY74nPB zvJACWq=v?!l?7pPi06?NS#oy=Wr+CqR=g}i6p7w6w>`8g|zJ?H5cb5 zEw7N1BDHq-wo$uEBIR;Nsn)P-=Kh)}x!gKoKRue4QaZOer^49MpwkQ^kA=$=&cr+w z@wr^kWS$zvhZiF!J6v|MX+wXLeD+i^*OMs;0sN6UynznESElYZG8s$DA$%Zf5C=3XP6^*S9>ll9e2+rr|s6ZyaotS=J63k6}P$Uy>LY@ z=*J@=%1})q%{xidfjs*(rE2KKId$_kPsuTcrfJ2iw$P*V^2hGGL8G2&)2%HqIfgBZ z3}<#xOMs4SJq3N{GU391l9))Yv3LDzCk?gxHoM6r8!3ExEj_w+H{>)C;OU{C03Nn( zgW?R-aaVQjq=Mbo=_ciNQs{fByF8;+4rrCm%lDRpfhoug0ykv4Gz+>J+3gkWBgZR8 zPmXllJ}hsf$-4IG8yllFN_w?=MudIc&`d3@N-dgL8yB|6POkK=7(dY%#w^&6eG z>qoj$BJFa=B$Is6&^eZ{$vLsLv4tFZtZu|qK+kY?0sI`%h09GVeE+KL+}T-3VhV5C z*-09GkJ6*QZ-}wWgM#o=3S<##!GdHslSMm$Em#t_@Kmx3jtY_Zf!U3b;cF(g$_q~E z{5^Zr$1W?0ilWP1k9BcTo_F3Ue{~#Tb1Ho2mU<(P!JxOiWYT zfqKtmy(6u?S-aHetB7lyP9)GhFMlW{y>w-HZySUS6D z`0(s`^>emw1ZvCU3!64v=Dl**&_%Y$OAS2HNftpnb{6^b}Y*F?GWnVwmDil}$V9`bTTyqr>ebdx^{U zFM2dRrKF`iMCo$d3S6BAjahGx3{9Avsq?N)a-~O^E#QqN*gpRNMS^~i?gcc&^4Ydr zUqczDo8)6)0)dl`{;h+~)#>KMs6DoV`CIiQU#S}V#MZh3*>*a@?pl%*nqteDzR|9( z(&|QT|Kkw7iu@8LZ%~n9b409BqX~D+RI4X8szYW~BPvK|N-FfOc3DC@Edvx&8w?t+&&OUAySSwQEssC3rar<+|s2 zK+a=scF%J!-O)M6Hhl6`H~&%Ys#U=w#dHT zl5?l{?>oc~@1!YR|3H-wXl&PeG>)|$9%!4%JCoZ3{VL{Q-A+#4c3}L|50U)q_qROu z5LxEy_~|FIkj(w+E7UoJI`QaBCDB7b{faJ&Te+xvE30$FbFde07QudzcL_*`q(l7BHeTH$^8J8E!y4+ulLk-vv8zICzX zV~0>a1O;`-ToO`xKnCD>BS=~ha&?GybQla z`lWW=F_DYOQmQcYhXg0UF-1h`LeB9!MdFO_4Zwaou zxl4^Pi^r=lFil}GGYw7+vRjnmxM3CX>7-1fO{*)c(~0tES($pMO?O4q^6c7+GT<6g zl!p;UW>|TMsV!&46c10{>l(SY-Z+Cbr+uJi7qgyW0 z>)T_r9b|Gak-Y*t)P8y^R9B z7*k5hp09ZZG@0n|%|va^8J0-n$CbvZ)tl4Tq~|Zp&n`BF58FD`n@QR-!(78<4Wnll zg<5x{8%w+`i{`s+Q@oiKV0G+`p})hx&dhprd3#A`ZgrS)G-u;SZq!y!pPud*O2x7n zcH4|tZ^zEv4->&`5sUw{#CM~ZV~!|~SIDm}Tc4D=q|j4ti7c6IF)#9_ zT^C{=QkFnTnD!%wu_QbsLm9FzPScv-uw-7G4Gx)_!nz@m29GI~WKe2NWxPKgA8!DE z3%-?ZF4c0FO^g+T5|);Mko(PTlR73fo163z)50D4vhX-Xe2A7BC&A%ya8ku0lT4f= zOUVOXHh%)$2E0-PHsQI2!z7>N*H#ABt!2!e)MNNcJ)OluRI_Pi)HOwo<8$*hRNO{V zP1crFqaw7{YYHEq?Jn0FhtAb$$0S}>mYI%aZ(Vk3ZWwiR9l0{iWV7X{Lv&$Ur(RJQ z;TT%35$m(7FP$H0o}eWY&5d>AM}{jJDo2m9V;Mn&DzLzEU~lci*`PvxoHoDB*#4fDc5FX?oL)FXshCMhj<;v5>|^Thiy7Y8aFuk`;Z9K0*5kY zQDB4Sp=*q_)uF~_NYa++a~&#Gb4R^gkvlv_A*<R}sL^+rj1M)YYQ&mYx!iXc(899DNX0Xq8iYp@lD)@je@9sD1hr;T zyipphil#(88!boM2qmeAN|1)j6Pb%?+iF)^X#qt8bZSGZ&5ZeM-Nd-Bddsg0-n;{P0L9Xo{$)1iAzLaY@Im z_+Ood%8t7`imPU~XGGP@WOWytO|zrdR%NH<8qL*NX?f_gOHFKJM`qWqTcA)(4->~( z(Os)e)l@T~6`e}!q0i7Kb{@J%jfoYo$^H&&#aN9dL=_!jy3|&JL7LmHqhzaWjqgL$ zWL~~z)MS!`?UphAl2%E~O2qQLN3!(t3o{Fm>s9XXfJIB|w}=J$uxg_iqccxkrkGPZ zdt!mtAj+;H=4fw&RcSN0TP~G*RjR7hS7qpAge=g@J!&yt8Di1N6^^u)r9%>2F@<`a z+8kvJk5y|dI;AEuv#F*yL|N2qv8&agfOaMhemZ67}HM#)3b4+Fk_EYQ&EBFldrvIfo3myw3G@ADFFuL--g{Y3@&0&vE$T4slf(BJ z*tkjpFwetG+^%iDTNB*c(DW+1(W)_mtw__Yap1fSH5Qe^D4S2cMvDP}V7r>Ic4!&e z>t$oQy|gUCcaVfd_{t;5u%9BRW3lh0#fwQHb8hmzv3DR3Gx0;oSd4qgq+M5Tc@(kR zOof#ZrWCN7Ttu?*HzXo?#}Xf_QOc7-v%_6ZeXKlL?r~e1%OcdWG`S*ECo{{mmD;q3 z31Mb>bcR`Dd%ht&L?%}nl0ze(cW5JLq2?s^mJZ2EWzk}O+am2t6x8_)tDco@kc8szloDFZB zWms7REItOX9suhC0KeQXymqzbEP#nHP1s6n;8NhL9j?JJ3;9CUEh!DgsN~1ym^o@q zMs%jbkr=9w5A&?bh{|#}5<-)^Sye6R!g4K7XL;%ny$ufZZ=3LGMk#&Qh{yt;G!|GozC?Jym6ulMI@O* zZXKHIl*u;7&B`sZREEc!>m0fQonh!kQ>7`^Qft@BHb>u4pBSDULK5WUfNzhkGDN+` z>kwyMqzJJOi%q!rVw+`-dh{5X%2Dlz*2GkseFw;Bjk9Ww!B8E6B?A$%Fq@atSNWcW z(#==f=sw?@&14m5Bzbc|I1j*wz=P1>3vq5Cao-p228E!N{6)K(Hb=OXsv3t}VMOZTA>d;9Uc9$_F-GuR|6x!)V%3}54DJR&=W$-X( z2J>KflpelS?(teN;C;0v)Yj>7`4iLy#UqN!Q;R$zot!^e<1HOg;w|&GRmWSggH)Li zksd}vht@Q@>@D?8)s0caPU*0kW|y<2x~00=Io<0@_J*tSW7#Jtc`;`BpXjq}&5Fs{ zJ2V69JHBeArMhjJZMtm<9SPfY+cn#@9qXiU>{qFcnsdg(~S4OB5-ilmviUg9&3u@ff^*G^dJG5-Z) zf2O}MD*}%CKEp~R-%kcbQQCYtDa|q~>K4^_?0J}x-p0*KQ^G>75Gx8I)S>FA&U}w8 zS1wN|ree+FHE~+sgKM!_6{EkrfW{~_Lui~GOGu#rT3&`(z3AD-gGh*(2EgMZsAG%|Yh($m1Z?|O#uxy3AYdz>V($`%{_diFMs zFH(h6rzSxqj&V$knx5{R?FlVVDjSwh^MozGcI>dlb8pVe>lo9rXzopU37Z#QY?Y6! zoW#FJRg#Blm87h+WrUiHo|kNDjZK?7S{*XEEGkY#oKr?#dg~Qy6ZH7LW#gqDef{*w z>l}_1bp_KWuXi|B)_Q^2RH7iyb19sHlStq*mlxhuHgdtSMRX3IsJ%p;nQIKJ*_D|F zs!;NwCmo@_kBx9COq9`FZ>dpMZi|Uc(V0`T41~5sUO6#LCVEJ@T&>WmqYGroL(G(n zZf&hnt5gbgdY0Z$`eHh@GvcMdU;1 zb!-NdQ3J6mrOz!9e~Dbx7SSwy9b0na@^RyqY?r<;mu3s2=_;~{d4WwX5d*!B{8+Lw z&UZQNh7b0!Gt%C`7)N%GGV?NLLjYhj4Wu83VFrsl;8GUz;ryda+T*8A{?CkQSgvU0 zv*db3Uc;;mLuib3*5<8an=!(BRu4fh1!G6Ikx$h#`I7_aZ+x5dQ4GLZnjOA6dsXl(mmtM0i6fiJ!TD_3IlE+r0flD-bP%rF2uvj2SPDtVHeB(QBso-z7fH)q>YN7`bP zX_X-p%nQP8vm+FVQI%~bGOx8I#TuCv8J(Og8+S#dyxOiFlIcv$VvcZO2lnT`Kp#xA z1}rm#bwTI_qC|KfOdkY?y0_4ClL(zmQE8OL=#oPfvN6_4kxuOK)ul9Kl+CuvWfN#Y ziX|jnXC(hDBN>W=9S@!3LC9SwWm+ah^jN13>K9-BO%n}VJjyh`~Yv;yOOsJ z6!VgI@2H&xcN_d|1gokzdL1l>c-Ti^(_RkOZmU@W)C22)DX;BY?&+vgW@!z>;Z>?G5;hUxU^&@+#SEoUAfugHhRXRe&W zREcn%a0uQ;o5YR4N*_KaoY>mi@yvhHA4l|vPO=FC?9t#NoDsbDh}@c;6k#e*lG@nx zqK4>__;jP(sS9_OD$?bO3Wq)_CmO49n}X=j+YxZiA^1$0&I`r~70=Zziz^#HnU<6^ z`o>@pAWVc5{3n-!5rJqHuPHbey2l$Vcg}pc)#!WE_~~SaiYCfr1=GhyYf`9K*qRk> z_JpW2o%m!zj$Bb4rPdBBQOFxABAhK{GO@n0AR!}PFAhma$0z3DY{)fBP_BU!%ZSG- zm%d1?B-6;4z<0~i8@OaPMz4Xg!bp$2h96c^+rXcCPxgf8H6{ z-CsTL@00UP(4OAg2cD@ioLgkrvYDC>Z*w)E>CGL3o3HWb5@wJyn3i!o{@sUegPqo= z`VyAnyi_ht#XOGVe3zquKIO`lo63@P-!2(2i--g3ufncXE8-$?s{2$G*B_rBxgB22?k!*_`aYO_TO~gUyp?kH~g}+9UGg zM@G9vG25(j_37-IJV%ly(vY>B7$~t|87|{=d_lZ9K*zA&J+o*c*EzKKbI{D})AE(v zxj&*nxlJ-BEXvUGxt&-}P~1 zgw6NIM6$u&^?6ZkaTG?Z9 zvvmfyxXC7)*$OpK7n@$#7+n^})qut2U0;^eUql4Cs0<;4$9$138&y5W^jXBaC zA3_(f(@+Dpz@yC0i7tu86zSap=11=~z*(eMbP9ul?M|K3%uUi9>D3aOAYuTTn>jw* zBi{?70H2=Q*mXf(?P+c@XH+W1f`C5VI{_X>7Zwo`&$b7-r~U672NpGQqIXFaX~#_sxE1?#s5SaI@_2Za-3=Za-V|9Y~uu3gK6r^g;Nb`)H zC6nTb!dUbYb7A%l7EridCMD-MW^lskgjINFv$3hNcW9CC_`lM7qKiBa8p)_ulG_tw zL`J<6j52zR+1$`rVkRV12tP|A1_Mq4%gA%&Q?GcEkO5>9N2xo`4*>9tCqD@UR&(2zd4}b{Zr+o#2?>@GuYQ zZ=w&=PQMDREc<8bO1XDB4UprotPcin+Q?;%C2CSIC4ENC*y}b& z*|xWhPn%XV`ua`wi0xG4yFYi%*i{Hb_jQr61s9E6VlcQNS$ISa=2awLDR=Ko!<*A* ziO6Sl|8Y5&a+%$KYz}>zX|qB0!Dnj!eO%3j{eXRN`QOtE^Glo;6E^?)?1F&f8m%AN%jl-OYmo1UJz?26W~jXn=T(lZx#C$8u!W(M?% zE&4ka{!;Yb|G*jxV5l5yw6XanwXxY`X&J6mE(;;bMZ_VKW!6r|oRi{fWq;lng&@A0Ys z-x(h^uP+cKwKVa64^{yU% z3A;*B&aoSgUEbe~-LI_96E2jg)B0b?%YFwDN(Nf@W6{rcy-tXCA~vNGCrl=SF2QXs z58M6=dch(2rLB2(c8A4A@!(FrZV#^Adm{hh`-FMM2g6;I^gmbUEh;FvGz;N3^;Ww^ zyU?YnR)wV34XHEG?!ZrD61D@cT%0*{;yiD9n6FcrV~(thSNisK2Z7d2bBW~gGPQP! zi;|n?rG<}FshW&(La_Zex>%)f^@#`_ks#8NtgM=Xp+l;pEd}AK3{`!CLM8^HLg%QL z+MBg>K92FTc+EH-uUYwPUW?!+e9&*f4{~sqUbo`{!GEovU`JN+ zJ*+^~0rw8EI8irSY4AAFquk0X-Q+Fl4{)|rb?&NZsl}IG6k%#q*vq!GRCpcwSSa6eavve%5e<-eFF&h1y;D6~pau zl%|=qu>(eUNBH5x6CE58o##eCA4;K1>xElc4?wDp%w;cF& za%OTNA+i&xbTWAz{AOZ4WO(Pj)&Rc;$Jcb$Z#p^Br;2+ zgtQ;4_PSK+_y}!`D#R0^C2j1NRTmwiPKbodKoqq8WAsIu1}{J&oBO?dP+Wocc%hh~ zh73GGKa||d{ZJP3mT|F@ECm|f=xrM9;^I-U6T)(JhLKx!x{FET4|eacOqDXy_x;Zf zZ(C+UTtnipw7i8gEXKtlqzor@Q*&odk2E9Po6P=u;z)gHL8)r{|D=tnZouX}4aD=F zmb_4|0V8_jnN`t$RIl$*O!9t1dnH{VMGXIH56q!5Ko2#TzXNo@HB3(r@IMWV1JhzpJl;eA{nlk~*V-IAkW3c@%3uk;rytQw)}>f#|lMbHZrqkec@PbbEKC|6iZ$j`YvQ@lD^! zaig2dM-+KtVN31^%7`522=PCy9VbUPr@f-*vw);8&RwIIx>o3@vwgu)m z+a-Ta+!WZ|?X?%nW_#ZaS8@r9uj;eEx*V}ql8>YcaajLrJ|Faafh*|87>K`P;iv{e zz(|T6*u$y9{E;BDl&>IQaY#p^q$BKS5vej+SDBDnZPzH0^VRC+KIH0bNwVgLJB;C~ zOlkF!4UJVvzvGk}iGBhRiWlmC2&l3?&|M%Q*Y!o?caSu>57I0)+{!aS*tn-xqAZr( zeUDrq161$i5To3BS&ql0Nld&%N2_BB8oQH4xQimflZhrbq)e$Q%Ze}sl1E_HW}_c= za>>5acpchJJFy|FHDK2$V;+ET5F6=yKZEXr*ZkbYa!3R5mAP)i5bz9OW>`Eyj1K@^@RPX)PKl8DkN&(neEp23{+WL^K-S3X3{c%yG= z`Xfr$uQExc`_PnG_x(g?oI_J=P2eQQ`N{g2q%hA%Sv}L6$N~b1Fa_(2IDW!^FqFlS z76!nt5qEt6g!9n%zkxL+>^|gR-HTj6c6Mg?tiS<}WO7Mi174}~0aKDZ8?fQ~%S`fw zWGUbTueby|GwfU&EWW{=;q6Wo2SM>`2YShz)s~R5gcNmdgpyYM%JE(jH?<+%A*P39 z8A6%v|9>Av!A>+I*#|P?vID+2HIu_4QhUPI*`5?E5ClH-c(sx)%8F(B_>(rEtge&)P2gC9XJd|=4?7QK8Qs&pBqV& z#58YD6ip+y3?whukqh(AaSLRSUK}!sbw4;4&JKVEX(2@~y#~2ZCww6sg9J$A@`A%G z8Xy>< z&H|I+6up&aT0&kyP@Q?f`MH-~&hTJxn1t#=gP5Pl)bWZ?rjC7yeRBwv4$*28q2EfB zAr+YsCMiV_J2!9T=jL;Ta^`LB@wE5+CGj?M^ql3$l^`-P&$@@jt}B$}DNTCx0<$dB znw(%+TIeaW*aFAs!+M>uk8f`&lVsqzOwbk(xj{Z4?@AJnaoBLkc$Polw|ig%;(m~< z@R0<=;JCpJ_yYPhN96jID7k)xF2sGF9{~E5>D|o&)36PEZt%=cc&}PI_7d5yKhDqe z8d0`d;x0u=nMuqQ2m@xp+dYMIB!hbJ>7X9&Yorb?I~0xXV~{dypXWXJj^{mqt=JQl zAsN!YCG$Z)=v+uLgj@R}h85gz%Z)%v`rz0-rrZi5a&86n8dF$7%sSdAFgqwProO)g zvU#x++`ny1k?Dm^P^PH7?!k}d!QN_maAWB!?yao@BPovNBMG_vdqxuamBG(3$+?g* zoVePoW>!ajxDxA--#UW(B*fHN`cRA>i>yqQW~6Y6&&U)$BjNq08v^$a^ZPi(hujoD zun*V}CYBik>B(4P5Em}#Xp##?g-hw8&%;(&+*!*qqAkXs_D(yAvETHp@83oeL&sEg zeZ|wGnX5Kz*zh9WK7jY?2-J;MUGT|Ec1d@fGk41e4i7RPz1zD1w#a7vW=G@9`lM)O zQ%9{lORcHF+2QJr%Zl{e1lc?$DaPw?B5y>4U7f9=1y;N7FdbRNWDVN^P>GL$FB^fy z-@%u#hH#(lcl?X~4DHL}&deGKkV`$XYCaZHpygEZsL8wVeTY^>@ zP8;zyi(a&X1;c2y4`zczs;6NVAZ7|B!MP~OB!G!$L6OK47$JsjpOHc46#Q=DBgM1j z1$gr+&YRdF2;@z9Qk;yq`yidLq>>K0c#)?-+8U@iD{acKz&gUwCv^&`XUp#|{v zZohZB7DeyY`{Zsp^JTBbrQ9!zKxH*r_U6cW@-9;j347%R-}iqyv^Ke8X$P6|^eNvv zFTI3PJO><|jMbTxQJ-i2<2#DM?0-aL?o25KpcGrj#__FxW|SU+j3k!80d%;RUa$?{9(pG+0P6{^_F@c)FT9&uRsev=4Ct*s?hw z=T;ZT7ANR>jcE{~pU-NGWkBo$52!$6(2~e9T`+k1w!_Hr@>y*Fo?cBr`Y-{4oQt6z z=RAB9D@kJSZcP(I3Ij_@qWUIPU^P0BKY(QSLm{8S3h)>zPP zZg1%%yBADe@XA`ED4ASBmZN4isxL!Lwx{bgFmR=ciA~0)#*R{aHg%8#X>Dn~J4r(3 zhzv3fT?HcW_aXvc$8ii~Ze-^LdPUoZN(|zm-I4VYpD>xb9Cj)9Id|uKId|6;tqrup zYGO?fkgkUx@dS*RtC_$oM4JD>Qv!WvQZHbAmz^^x-C*}&7DzVCQYps}{6Pc5Z|yy2 z2S8+RpH2rrsJHRaoAwfa1!x~|&-B7*TF@r~rPPf|aX^ywj6ux#a3InuU;yaJok4Ng zf8r!Mo%i;Cm6hqY=MVkAf+TnXViR^!e&Y!det!Gck3al@`5gv#BqN5|AHlu*BY~aX z!SD0Jp!t=(``0)uzrMd4)!GV~C7r?Gwhb|I+XgZR_xVmVY#Zhm*(NaSrVX-8I`1$P zT128GJas)g)V-H`R=zs#&hE=oXRyEnwo^5T^9~c354ey?kwKkzsM>*l3_1q&OWko9 z|NHyrtGeO(b^4ZbpeWwcc0x7+u{qI9OEA9*e4D*V#aG544Ery~adVy@JV-fuFp-S2 z`NFm3OoRBTmIp z)T?q6R%a#qsH7OWMt$*orS!D9TiXr9P~V4$ntYL=}lg zGPa&@iWQCqWClhwqbTLa1&^})xQymdo322F0>I-*4nW`jGvtCl2azSWi1ERoQst5+ zX|IIY+o!;p{G4gGRtjWMBV3pE&7?*iW$fQ8otl&z0oXxvVlBh5EBI~L^|ifzH5qUp z(|B;`c3srVRHA|k)}NF)&e2Pc1+a!oyT^jt-w|FqMyunAf%JckXnYMCMuL zdaK*B#+q46zhSHcyB5Db+^S%j4{}=ty#v5msB<(jYXWr1!+~#jWL^aF3gvj#qp97b?i&)iLc@z_b z=sDws6fMD6a#jp+X~7dpWP&|BJYN;e6_Su9Y;kv+TrkyM?PZoAxQ9*fB9 zRE4rnevy#|t0;P>A))rb0~>!%9`2bfmQZZDvfPhxJon?M^HP8%Z(+(N2RN}U#Xyd& zzWE>fApkgqhnY*r73{sH0o&X(;MfJWkk3C=X{00)lFk~kUK!H+A7jx1$z)uf|si*9!t>rkBlE zybVpqvV4Xn2&;ZNfxAeN1AMpQ<6FpAC42V`(<01P4Z_}?9{#z2fDUAd56F7t4W*T0 z30BNt1L*PrGKWG7^ys^R(ul6=qxbsFDN0g%>Da;Nv;RNHZVD<(r%NRd?f2Y63!4P@ zrO3aZx##v;f%$01aym=pHw7cw0?Cq@1n6^ym#@3}KZkk?U*8OL2K81fuYxg}N2FfP z7j=jjv;HFvb6GF_MjOH@+>N*76aIm(n|k3LST}9u>n4V`7@*S=fGCN-)oZ{rzrS+6 zYJjuAy8cg3!Q)nCHIMeASK;Y zl}?0XKcZ)+=UjdYtUdeZsr>GB-9Q9;ny=<0+B^Zd$h>3d@qD}$=&^tP+7axrU!;%n z-q<@Rto$7mnf>pS_nk6eDVDDg|Jk-Z9imBdt_%}1B8w^#Zz*&2em%vU&N8pA?Sz#Uee&lqtM(*6cZkjN}g z(7gAiuLK+q6Ee|lOP7X_JiL7-#eU6=75$_-W;+T+^$K|s3y2$A*)LU?T-l3depz5w zdOEkl3c0*l1;$+**p)ucccsVk`-gBpKCu7r9xsoa=xB%MES9XcrOaxBod$lAO5e;+ zu1o$q>Fhdltuxm}&-r!VE5X3p-ly25v@4XqnelyS6UhUsBy7=7c<#w_-jzWfW9z)` z7iLI4SSbVY>Av;dEO+JEd63CQR=qnJ@=?joW^aakAG3<&I?+L!JgYEfHcz0L^ z=1=<8@4x?iR=vA_gkm#oD)rCsXH@LLKM=KW*6Tt@AVi{v3PC?;4;^~712_Wh^i2s( z0=7~QG_}mZ+4FV;Bcj-(-A~D(!PlXmp7U0OUhhKy@UR!+=zg3hVe*CPcD~5+a%0uY zw^Dl=LoUz>ma96_iVIrO6SM4*@eYmtnl+ZIt>tqaF^RdUPD^2ufgEr5ZCI0?8NSq# zYmFnT+KYBYtBgxR=Oi)8HNkr=y;leEcm1r8e#<(qk2C#zFWKqeg!C0%BJEx0v52_~ zUHWzH>Se9Kt^|HkMtHU}|2yo;zR3O7rJ!$9Z#(M(7KOg@UT9(5wgN9$o3J0vz$;)s z_Jy(Aiu74~cOHD@P#@O`S}cX{M9M~gUaPXNPY22A%j7IMy(KN>y}8JWeLR6hPZUW#!;gJ}e7Twv4;A54Jn*C{@gNbJy zK*aklK>P1NducB>sGNGNnA6ODz*=WIogygc=}@ImB1@08m>B1^@ zhtve_B+>=Kee`qOX$;&MN;e3b=@GQEFmPufogu8I-=R!h;La{OUr42&;7)zuPA%?S z$?gbq0(Y*W!-Wb_jxs|7cjV}OH}AbEaA!R3+|2LPvO9G&C$J8i>Yv9}!Q^7z(tP13WMO@V z>u0u>ha1M5n{~Eu)l;6M8|2I)af8o$U(g3MW3Z3nJ2K!Z;pn++HTw+EIS zlgtK^$`E<(?xqbdVix_$A81+4?Nq%IPJVFrtN6_asNFfJy6JTq` zWAcJth=k=4jX_VGlr>1?{wtQAh^N(4_WemGDnb)$+B$sye1^nV=VXOPh(xJRwAqQy zJ71J3Bitn`lddQWAL5cJv^Gb@wOO|~dH28IfP^~3I^8yJ0-yZ|a4*_Ou^bi+wiPLL+m)^ep85&NfbX`e(j4D_8 zKc!1hM#gwR?vWF`Bn!ScmiHWcICM!z*S+MkEd|+XB9d%_DKz41nNgT)># z#=D&!-&%Cwe+Rw&9W5bBK^}|{hQ&)`x*mUq7R36-CX)`AZ&?<3Jd*l0@7w$w>ihw9 zUP2wrOgU_0_ReU$ixibiT{lOQ6UhqSwpf}S-SwrG{4sJh`JY7j<`upW4Ql=sHNOb- zCdISyw|df)Z6keu8oBM6Z4IQdVOu0pJU>W%zGEbT%@+T=BBdvxD|kMl?sIhAo^clC zCxxi;0hQj=i>FdnGigo50$8n*-IwnHxb#~`ef5mV7maUjc7z(k(=$p+ni_`J4Jk=X z(#Uq>HBX}1>PpDW&PYj!cSIRAM6{aY<1#9S6ep&beV4h&1~O~e#4)*gx$nNj|4d|t5( z|2$9jBw!B`vnSwM(HW!?-n+rFXd@Vk&VTyuc@-$uO13`hTM|hoj`sZwGCfC1eb2Fa zn?T)psE5cAxm)DyfP@~HFLd5r)i{imt+FNgp52Mr5=qWX(WQ#v*|l9iNPWJHK4+pX zEFd`o#iW=H6Leb?Vd5@_?%BG+_sQy%Ra>8VDn$lyMMFu>A0o+nzBuxcFPi$gzE8Bt zWHK=?isj?>KMPnsL3=n1DGvsS`<>%vEn*))7g5^r-;6iu{Oq`Z`L#h|)|a zvUnMckQlh=y^GirKLAX-(~2R&77YAGhz@yF=?h2ZoA$0r`xwZL#Id5ReZ8i|Jx|{ z7^f^-g>VUkR~<{+nt`}#4q`y=(1${klbh==x^w8ZXNadQuGAT$ptsA@?0I+Q+})BC zM|{=!LtIYZd(@}Y#L^dRHp3u)-EIX`523f`@IDA87ce(HY;zi%?<8z~TG{+e z+Y&{yUA}E9nNl&+_c@!RYe>vDD>jEJLv;In-(#LacYQ|Rk#IvAUG7k&hyHW>w%fmo zrE|F$TE%!+DC4r8OOFtS6BK;7wTy`AzKN~dTAzAoVl-)ag?{3z@;yT;$kWG1&DiLwv1|4HZ&-k3tHndstSsdT9hM3 zsD_oa#wFRTX-<#cw?mhlGndTQdoqUE9qCR4Rug{*a7zOXV%hkL(69*qf^g-psvgyM47yyV|0@yIQS!ZIxTZ6Ftt*;gbErP9`xT22Q?{PQ52rYVH zcD=KnKjUj2Jt;Jqh0YGK-kj3R46|&WziT$`74rE;v8_9{vbwx%hbv|Fne6B#jiXad z=bvvf=Va76QUhgdt40|LxC~Zrij{q!c&uh$RykXxAu8O8p2DmxVJ}heF6@rg4ibJG z2~t*Ig_qR{ayjNWz+d)_DXQO;quiUlwz=7Z+i;xDykPB^`o{bM2QKuQnyoyNvo#N% zlKdD>XB$>duF5;%*rKuBv%=vNU1cEPas~4m8^;zDg!8%!x1LZ~7A~nS znKOG%U44E1j9@_>v>TGDyXA{u-?uXITj_S_5kgy0IaPfwT_TZ$`f4J~<$spDK;QbDT0jQzTYQDeOr2*S*9zgwBj-n&cqxAcH#p!dEUGgR3*y!hF*eodmKJSL zi=!bIqasXPh^3wcis@Gd)~dH5mmP&g&8-s}3v7;tU3d8MGD3mU(#p{#ea4(_43e-r z?LwV3cig0$v5kQ|lg8rCuP*fYrfEH%x}3~(uj@}O)wNlO4{mveUp1%7pXIToI73r2 zgL5hvv*+ZLWag%&dM#PUWM`FFtZu8@pE_IlU4|WZ4Et!|CXJ7@@}0bhR&fa62y;r@ z2NY0U9EAFi!<>Ala&OD_)={#S8;TvwWOk-m8l6s^{~4aGq<;Ddn-sEf+Y+70q|tdZ zsy}3%pw{b=?{FW{bAVeP>&Fq@L%n>cz7FyOnk$W4BAd`c6AX25JJ$|9)A~Hs1-T)2 zMv8HMeO{j1bNVS6?BSf3=ar=vSiEIr87F-RU!wG)8UsZuSGHPRk zcE5vL*xJUz#EK4O?_?DfG&c1And|LE4v$lB)1{3Yd!n(Yw8CM*wJzzobt~-5;v6+T zt9!K9V`cN|!(qoQokfL?)MGsEX1~Q^HK*k`J$(g*EH$+-v&fXC(fcj7I;|czEiJd% zay7bQn@z~#&mvX4j=xSG1X^9}dM+q?j{Z*Bf)&17)a8t1>wYI!+(Z-reohj_~xxE#|;5V%8q|dpZydUE3uXMJc z*JW|cVog{(d_1jUOfc23^30`BDs^0|byVAO3Or$Kub!=(WRel{PNUOtPGdOoZsapQ zkLQThih99nHExyGvgfZ|9IiiO@QmW;exrP7{W|+aUV6g~f1?sZk?(Ln&nv=~ERAMw z$g%jWWn)n)5xY1^QnhlDyXCAB*QV*+4_(OSFmBM=^iHkIq|sWkE9QP35-W#epOCYl(MUf*o|4?9hgmEznt6Cxq0^pP;nd5i-iqp~TxPA` z`M}Ppnu3(cy_^g%qU7W(Gj-R4!ae)#Ww6Sr-cG&xlYS%(@;-*^XxaxYZ#gLko7S0LU zjj1|oo`%bEb2hss`vI5Bo9fib4YtbFncKsKfgGPvMvvs=_WR1L#_ZP3B`Y1WPNUUu zt0m&cK2G+DgOjb#RYhxQEY=wK2&>!9}3GGbqEmg(e(g7^tTnEaCXL+SD}XSewo?`L{=( zv!N@C&(3b^(Gs7^<~)|F(G^cAgiB)_=g6xb$jUI;ci zYlFq)uBqzko;bd?!EUhR&7VJz<6=3=J0_lDbUU-NeVI;=-34B9H#L-&v8(b*!{K>j zI`e|L!H(=edChqfCTNsb!+E(Lx5;car}?rA1E8zBsEB4++%x|+pNz3jyYi|b3?w2p zUE^J?;z_KO=a-mLY}0r4SUD6A zqa!bvYPUm`u=nhIq$Q9Wbmn-yxvAN?+CU4Nr99pg@aQbEUavJ{A=tv|p?3$s$)E8c zY=zoTztCGjZkhI$>zGIIwYtKp#vOYxMj{emfu6J$Bbi*skJQQftjyw`%0S5HQ|_*7 z_v02by)ieZ^ys4&HrBfgCVORh_xP#$@}1>!dv!%-x`7#O{@m)ozti1zYhIdLc|0vG zFNbxk2p5!O!^nDrkh6i=Uf4d-Ce49aSr93QYZj6R`yJre&|*u{y_-;qh804nBYE z=sL}#k80`)I)h=HFg#n3lcLSEnq_u_G7Up2C%1`}qTSy{UgK|I98KPjchEm#4$UVX zQfpQFGOF;1M|AzHkV`;L^fv+nQ`AiS#MPgFwfZuGp|TRJN?j?QjGD%V+&rhlV)5q` z6jyKV&&~3snoSy0QI4!nP1m)Y-oni$1J5eX^gE2)Y$@H9>#(y=o62f}VYfTW?(x{O z-0pC=QdeGG)z(~7=Pw*rkXIQh4F%oy5aY7NmHy2)CY{}Ch7=B!w1-Lyao1*Xpsudb zT0`qc+8JK~E4YLm@z|+%-6d6Hm3d*p8dR)IkEfL>)}F{Ms2E+{ zzAaX_SBf=hFGT&f^0UydNYy2`hJ)THWXn*t2id&zyKsav5+max@<>%7Tr40s_k)4q zgE=W7)Cv2*<*-6kj$ZA`Rjq(9<6B0ATL0RPUq^4KmF zhQRK7m)2yC0lnYL}H=Uc(f5W~R6Dq~ZSGljl7j#;n zYRqSiS{)l*VV0HC_`Kteqd9LFe=a~&1eta*Y4Fpoo!-xGhS|oYLl+|umNFz?Gc>es zHmo0jYc^~NAIFYSF>?D!hKYqz!s#iPFfLMPQW8Sm&t6krk>$myX&W0XhI0!}p1JPY z)?7=;SxdKF)-KC#&2DDP?OQ+IZO2w_ecd*S&Ja-@C;x>Jp^I8cIAs;z@nYLMNu?X`lgtBR|$-G#Z?Ijn)3TJFI`sd|>y zo}ZRgTE99x*zHU=%iMh=wl?_O`<1)Lrk*3)ddB@66Rh&m!a#9uh%GL18jV&~cel}; zZ!of@dPY3^H84ZC7U-&w%nX=d3m;>K(7;#*U2))&p`LJ&&rg1kzgBfrM@_PHw#X~JDx23CmaFbgTO1A-?vTt_KlaZTuU5OPM;^TPmG7BjuzP#3HFL&sv z%P4Y)u%f_PZ)Bvx!5y3x-9pCTJb?zMrgNx+X$rhI_g%1U|MAF1yR!`Yjlu847$n^>468J8I zq-rEXka#W}$}@gRj+I9r8{0Sf*LWmLS?^$Ceg!3280 zjbo*YzGv^>gb|$DZZ=OiR{6~yE@db~!SsT?>s+#CHoI$cZl2rK*JLu(iugbG&Cec# zkw~z=1MD>DiO@dO*kT^B85rfXD9a16BAB1*>fgi0uB!?&jcsD#42`|roHAi+W$>z% zsa&qKyWfmf%3rK49-ZpwuJtwbrMh}Xn^E`NU-skP2aWQYKme4R01Vy*1~?%_Z$cu! zF{I*7Vi;rK$;c`h*M?&bgAE$umsDfgsdmyC4JaUv7UWgS>Q2tVbucH_Z9H}Ot5Ibg zSvPeS6u!3XC`B0>g1lR!eDU)90>_aL+^;~}QfD1!n2rrm0S0+J3hMlw@u*RimR35SlZs_Mh`LcAlu3o2o8>OF?yAW z8*u&%$zDsmNF69<5cQs6b-e=zIk%V_4<_Mp@6O~&yVAH80W8n<54u|CUU7S|S?3zx z%y19Eh+H?GvXu>(pWe~vV~;okN*uW(o1M5-6LU-APM#3uJnxe3T65++XWGD?OUBij1M3Wifo*Fi zrDs`>-K7)ORo0xk!kxNw>G-u3RhO+c=$CFgGF&sJD72~2zNl?h zY5wsc6WywuAfr@U1mOQO<#h-t-m?b;8@`%mXu=ygu^yl}2_*l~Tt8+Wb>0!-2I;s6 z4CtsI+QZtfcXNIAik3-N3?Advbf;JcahvZx4Bn!Q+`+c+@oSv+F-E~rE8*wr1U0bN z%Hj%Bd}m?5`ypbgm249l)8_6xhuM}pe?x=Sc%W9r-h#q(Ow*LA!m41;Ja1OALRC#0NYp%tWts;Z%iseR4;SZ0QuF&FGAp+eTxVwn?*bq%?W zs@`ryU=u%ct(`EvWR_RIS@Xm=-!Zv5Idyy5e1rcIU#8WL6UjMqta&?wh06Q$?_~>} z`Rjw3N9(oe7i4(+(;4t5%yNJkajFPj0#SvdCidB$+ou2iCRTIKZ9RA2#0HeX;bFFp zt@`8>;ta^x8nsLaYz@X1lNfhz8#;Bc{^Z=@U+o#%Mzh#?kf>mit5IeUJn}8d(At7} zleVf*RE!G#)uf=EcMo-a*+ruwm6f|Qaez8Sxsy$Zk3`M2YK?_-_8FZsH7WZVP!*HW zG4zM(Qu{{5QggFfV`3RXSL5DSmROFk9w|#`gR61oC(lHA2X@*?<|ZmrIMInIc67nm zzetPHMzyGu{+`Z`>n|Hzn}Gw~BiVCMp3?oKJn^~gIH*lW>U2&!i8S)i(pXS~3=4*A zmCyF82Sawj942k>E*ULPWP1Bbnotr+M}<%p)JQ! zGPvZ#E823g!qCsMJGXSDVV!q;*{U>6ZFC*0_(lb=8_|`-@S{D9U2*x;Ej4)S>k4P6# zxu4d9n2VgPOx^CoX(9Vod3rA^T@tVgR$}dYhUzooj07=>{l@8mV!=$%Q#HrOd5PjB zf56)i6+oN`!QX%eSghsZDkQPz5$zdBOWehwcf)2(OeVBM#CvX$FEncA%$iu>)a3lK zvCF~bbbZQ{E}z-Bz2@cnn6{1cqYP<9mEEZtoPRXU$VYRky-m~>UO&r+k? zIUtryViA+d$k7Nc63OS|R@l9c@=4?KY}T5J_Qg{x%?7W*e{|2{3-hh^#xop_qOD$Y zNh0v`n|;lhZ6z8_nBBCA1`s zTKd-U$G^ocZSK5KnZ_EcZ$@uYEX+yZIzP?QbbAwa(`e`8zUv)FFR+uSu{YmHOKnVBiqz5o+TPyL*?3SB;}ro3}SnQuiwb-47# zNu@J#!j&bJrrsi_L!1ae!;=@IP0+N#_e_LS#=#)P_`=Ukd-pQe@#oJi7%aH){C9`; zE+`s&M>>Fb*&?Fd^mDIsnRYaHWnGuZlH^%5S#EdrRdZf3Sde8gI!iR#jKXMto{N@Y2MUr)tXo;|=E3nyyJzFzc;&l2 zJX84;^q z`YDu$4ju}V1SdNfgwtZ98tV~Tt@m#Hsoyc-E+xVuDrb1 zY6@)WS$IKtsxj|p6T2o>r>E$wzQzgFBw$)?JhVAfQBZc-#ELbAb@?UNPAFYJxv(xP zy&$V{azSlw#_Tj2sL@`_Bu!JLkQ}_3y}fa8&J%NhBvC|}1|mk@N1W5Sz>*^PV0=Sd zLL-ST{YYMdD*NL}iZ^pRI+ylUq%!U^W-ppJZAotP;FbRvTak`KPFHg$eKuNoX5XxO zuPj%LD=gYIwQZ*IcmCB;6Cvs{vb~KH3TtvRXSiTPBI27*1rAXAf0#~=t@XasS)t9{ z63ln#JB+5$A+!1P@KK}3U7Vj{D%{c9b9#}D_4n9xWmQuGS#wkPD2L~``kYO{;)1gK z#^%lslsHlEQV;;_A+&KJ+2Bv-@ot|pIA^<8NH=!FdZHzH2cCg^&}w0rhXEjFl6tk< zYN4Jx*|%pa7l#8W_L63IhTCPY4Oq3T|KcDhebU%8z0RRosVjGRAe^d{&5-fkk$m}i z{uEl=L^}bY*vtg3p#PXjF*NC8zpmJiW2h(m2YJRW8@psFj^usaoHx&OI+x_s57u`r z?ya&IylQvlG!MGQmHW)PTDy~aP1j&$%fy#aR!2uAZmMXsw#}ST)fq0@)GPBbcFim% zE5ozutd4}<+&Q_hHp@5Fqn}t2_iJHMQ2bx<9U@b{{92u(g# z(fECzqnf?of;(xbh+0sSiWPc|<~b>;1ZF&W>b?&kcJ|I5oPFo)!FfP%q$F?zdeRd7 zxd)}~q$^{O3B6041XT(9s6j1$tNSmzkpDg33Z`kmmt9Y5jECigBy0@}vo71-oKtLtAt)MM0j2(5A|5 zx4^j6QmfO}%~4+6I9THGZtZkHJ>Z^@o@4~-+LUiLx0XUT!1uN53ymhP3qh5lvjW8d zwPE#1QNIpV6FWszA`}r(iPyWe%K`Iy(m_}c!56xRfM2XP#k3BJ-8CID0s4QazFO7) zZCL)t=1)@E;tCyEGE(E};gfO`K-*ec^U~Pq`5Q-d?#VYZQ}~p&-s8&C_~~+q#o1S? z(>}Gn%wjHUC}8Zgn)G7>B}J8Yboyt6YwY&PHqG1=p)1>uL^LB|r|(>W~BRNV`nO{9B45&GfU z7v|9557)rPVQc(*v@kYzD0=hbBv_xT_*DKVjG~I@569}n*s0<7p;j6_OU#Y*!@l7~ z!67({A$g2`sIP|gAQ(nZlB+V#GSNkmIAE;fzA}AILHE)g@AaPRQwCGIJY8D`J9N&1 z_A-Y~Q=B=cD&OkqT(C2ro%$-vNgtI{IAg<##>N%HkF%!C^cug#X?H%euB(8x7~2XhdzX6N9P)dX$C34&c)f{@4ZjY9^4@7hK4>=m3BxoH%3^NI_rkWj+DmF zff_dCOMIKGnoYZzImfi-n@pz{V6wd^Y&L~YZ|lQkD~sv4HQ=`0^i=)?ZL>Y?__~~9 z0wo3IzwHXpbnBwYI2)&l&^bQfPSiUZSPC`{;6Ra69HTV7Dn)_;n8sH}Ju8Gz6i11P zhl!9k+_s%*@`GA!yGzS7p=+i@HRD&Ae1=2Si$L5Ey*b!>wSV)0|*=#7# z^{c8o?3s;0t2>w7Resd&Je^KsgavI%N>%^jv^C8R3l>#!p4MSXA@y4632C;oRV7Q= zg|E)FrTCq&Y|`p1hP-DMWAR~x%`@x)iHhDY=O}A0aOv6yw{*F?_=}AzHq0n2Tg(u7cZ|!PYVp^k zXDSc#`W4h-jz4u`WX4V$6Jk2=!0@a>T<5PvT;~mgG)R?M39+5U`U?_SL~j^bv5_Bk z;;M}`&}n1B(oJ^Ld7}=x>uRxjD*#s}jPK~`%>#v&RFGJ>Z7fqspM5`hC1-(pTM)=7 z8I2Qmr@ba%)3PbhZj+aEr0QBo(=Btsl~HKAN$Zf9&ct(+tk^s)=<^; z?ComWA9^K&U;Huc5S@T5-*dvM^2yHSX@@_V9+?|{$bQ=Y-a1Ibqjn%2^mKXz zcjP?G{@Tbn7VWOZ73q=VhJ*<@x=x_IxBuFCGu<5ce`04Xc6#^!R;$m#jHyQb5&JKP zJl$W4d_QF0@lHsf5HwT+cn8d=ngP7pIMjH~wf#?Bn;2;f8Kjc{brW@C@|0z3yKgBxW$L=EjXVwHiWe@WIY>l*ShV?zI za7bpeQEl9}EU1;Cxy;$T6X{Gcf-2%u)a(B~R$kNIUxC1bn8(TPVHol1u-_*m{`_L}n+PFEMiP>Cb>49X6 zyxmJwKZk#g801x?nh$D{2R=*CkrHu;Z2-j%98|j>_4M{|hmYIa=OLM*H+hk^cel zTwTuz=tooT*F`V<|5fNuu%rN$NqSVsXM+0cq)()KK+oR^DytR~xElb^&xj~^{)Tw2 z=1&}HiTTxDJWKSVnxAgt86D*jyXeJ71RT|}K+V5fP@-E#pP{%RU5*# zMK!=@!~!Cl?oq}mVbZ}FZAN=yCwn@*M+CE=W4r^5Ag*D?c9UsRwNoR%|1C3(PO(g= zwjXE+@pWOJnfHc_#=h`Gn>^V|BjErV@_7fRA)havCyq-lX#SjdPUn#`q9g4jLGv%g z^Bo}km?#fCCwSlq@m#eTcpB1k-AdwseDDFFNZZ$@E224`wNk7?0>Ld(neNA5Q{UKhdlmpjzKxY(cDym ze$Pb-FVcDaj;R+R>7o$&@h`g{(I^Pc({VTg2HBNS+0!0#JjPu8j($A~HLC^oD`Ar) z4|1Y5;b2Q&mLYQ?3T^WAdzu`NISAiXtNQz~gSjfQA=)lc&uIcI+KcD71AD*r(p$os zDvs6~%VSP%YhoLzwpd+|%>+}e3vFpuaWIJIpe*^l62`_Tre_H>F;BVp`H0NzBy6`yk#Jzlfj6hxs$~4o=k@DruKsc)#Ir$=94 zG?O{bCT@VXkp-SSG)+`bjbngsHmHR_=<3N=U46KkVyLLTdUW>X3BFaDVawU&4;80+ z)3R1xaaKvXY!2+o3s%})?#$I!v8R&-I zNCz&f^@K>Ss{dh&DRhab{SK&%$Z45%OwTEFgzPOfU+=whN{vR7XLYmsxxV3lcsKsL z(ylX@;38-@@QtP{nY#idRhBem7(`}~yU^ULQBSUV`Y%i#W3`1xD)YE-e8t!=e*Mxh z4tTk0buwxz(`mcC)B0*O+JN1~LW4VZK6q`t(P*N|Y(~a58ne0V3>LQ9w94t!*J#sd z)CF#2h?z&n$cXFuo|k>?ow|G%^|}J155%FvpJqM_Cwa8gqm!}(0-zw4mns3sxSlul z?wX7XF=d^Wac`Mf`Oe4eQ4$RAnYe2r+obGdYpU!zy$Of3L(}suNsEV?afCm|}!tc48j^el^ac zDgjgIG6$hmQhjlX>o0oPclRidR+mEKFBQZAFKYA{yBHpcXb9?N7k3@8(PRd*?oWvQ zFpH8h01E*|aZLCe{xQY(3sqwNNx~2oSn%@`=k4NN23DW8%adkGafQZb8C@2QY*jXm z+Lg<87P!0yb74;=&oJ_(OINoeP)$MDZuEpx4DHM~bZ>{>l2R6S@bo+b#vs;kybV+_ z(OioYR*FLlt7sd7v=INmrS)IK|2UDEXEZmb$V~J5Iwq$F!`piK%#xz<`3{GoWR*C4 zOgRe_#@YckS2KlY3WfvrF9A&5B0?0tR)!@J{SPwV&4V}3@v-8r%CSC^ZnE;3_mnz~ z#+IUUIQ{HhB?BVD7i>?@!rk4wH!9g?Q?3!Q3sJ+3k%rj#1^dWH+_3A0$D;E=@Q1oo0;mAy<`YZ2H)i`XUkR)cJSF-BFP!^Jjf0y3m-;(*+E(6I*z^Y4W5 z2{J|Qjy%pMqHS0gh6Lhtfv_6Hz{a$&{I8ZGWe&#E?UwFc6SADntn$e@%I&_(^=IyI z;9dfEehwnyUfrFZkzSNxp0p*8eGdN3i8Syc$aC15Y2jt9QY>f_@jfWFl1f0>^s8cB zFSFcZanMiwo_Zd_cra$lt@Dj(4y9*ni>1ievW^Us7Q?z8J_dpVdb7=p88#Y?K7XOj z_XPI@I(+HX!w;cFknFq?Ey5mBbtSq#u{+2rg&fO;c^e@jP^0MC2kA=v3lYipb){C8 z!-(u>hG@)0%uGv)&vBju1HhD9>mAd~^MGQB6zMF4ExpgI&2i{V_PVL19UCcp5$-3l znX~n}Q;T%E9HY(Dn{Ch-HzLT2FIZsnKEYj#2RhO-c=_42DXGqmfJ;N8KLF|#sC}YZ z=8b3>I@)8Et69EVqqBPKP%qNTWI0$E%w4!^#r8{aCANmAxQZ^hw!TW%->E9{SGjLR%usq3!7KPmN&I>t8jrqyXu9s1O~+}=P@nbQErp6*@UDb=H=kL&C0ZR*N)Xvghh z9gftj=br1WDA$_uQgr6jRKzZ{2Xk4ka%)@DxKJRF-xVzMcv&y{^HE5p?ZB-Tt(Vp5 zKp)VTGsw6YQkeQ7dZRLjBFrVtrmUgfk>d5%^tKobZk>;1q&xH`hXZD7n!0u`E9cIA1SVoN^pt4BQ~SYJhSg3%QDHV%VwPl$ZDACz~A4w0_Nu)yW&$ixHQ6P&G)wh=hd{IM3R zQF&EfK%b*LPH{mAJcr_}^1_V?bWC`UXudM`cRG$2{aBt|ap)V;$iky(0P1 zj(rYn% zqBk0-{klT*3wAxwuhE+hsC;B>QooA#$}s5tVYFXgiuT7~Liruyz1pv9lKP`Vq5L|w zKb!$&!$IJzNPx3A367dS1_yDo>1GC^hcZhYp~_uigsSz#-V>jlnLI*8{wN#~vn-oO zNKRy@1Iu#-H4w>+FXjqKDoc6-Z^YlSekub=Wu%g~CY5Ag%Mz8ma-<}3TFr^j*#=R5 z;DUpd|4c3ai^TE+Hzt?AL%v-|r{7C|ItcDP@&kmyHzN>8l07875XXVyj%QMTLdqT` z`VpIL-~)PoDdP&OR| z&QS?)mM6hc^GD$*&qVVPAIyvL!99Wx1itb2#0Tf>#|M-@hL0MLPLuNrlK@BRLNFV{udkJvfN`f<>e3}49jjJC`PI%8-F_ws?mr7zZ^(B=?L_9GX$BdMvyf;ZSp5k=~7@%t1!62Ng zLTDa=fSePO%TH6sqqGp?k>;BFliR@mi4h4}N<#^40MANCiZLnhh}}*>`N;Y?PIDbQ zLC_+4dxdzPmoz3iz}qBa)qFYXEf*qRdQ!dtrEnyla%w`p&i%%QU5pJCo*I2o@CdU= zxv1w#fe)U`bHJOxmuaQk1bpM~`5TyHL2ss$Y=SPoNiNS7%#B2s>k`US{xr#vSWgtr zfV4LX=TFISWNQ=-;K%U*PhxK0AI^1R4!uYE9pS@#VjRZtg{{cdqCJ*Gx}l$5l6J>h&@GXB3mVW9E;fdCd^pkJ}HbKZ{$m=UHPLJ0SA;b2{9643YpwCK0gioY0vL#+mm3W^axahOU zrV)G~Y3~;iJ4Jobdm+A~+3;8`N{_5pmgBZ9j1))wX*8a{$h(4`#q&);+gzw%KJD+-jR8_8Ba+zEs{o_tMRc%Fiw!d2^gzS zRklC<)^DOY zN!A^FMX84jz%6R=c7D&gQvNx|>WRYt+;Ok7}qFd_JTr|E8 zvEEFAM&tUh>&_(1i02Nv{yYHY_pC#c@{<;Ki1lbvJ|TmWCAugVU6*2PImN07R3B8= zHpy!vr&t@QZ;AH~zCv<}6;c!ic<jleqmYRM^9OEH*-S~DTW8rDoBFb}_S za&lTZMPY&u559hKiuKb7%j1dlv+7F9Pg?gOR$oc^(Eh`&!oF2L6*D}j@BfIXnXG3hp9(!g zeG6Cz*EW)297^XvF48&Tunw<9A@`UmhM{bK~?VYLte^SWqml8Xn`MF5j@kvL5D zJsOF8jkv3FKHsRy#bnJS=`C^NAvBbvd?XnUp{XS0qu%`4iMWr=C7l~#E!4`tAn1BrjYbb-BXosLEFYjmr3`dOu}xe zydJv9I_VLj=#qow%dZ<9Fh+u?=2vDK70m zJj;*4?#jo2GBGk=(gW@$+|B%@yc2Dl2$)yGK4&Fq-0Cbwx}ccF_SX|J!|{^nyAkb? z<~_O%jpn_iJJE!`*~#C+(}}(R2EBy78TnB8kkeC0`pCM-d;7hO?Pg-6h~3WE?qzIu z67&?im$B!uT{6m_uqzgc?Rrsu+7*lKPGMIrNsdOJ6J6OAYA^PDjOc4q1U=~KgW~DH zdm~TXcse9sOw@~9Dcu&!Ep+BN{1dcj-1%ffIHEHz;D^OuQo=Y5`3<~sQVfz|DRg))1ix9CQ9p-xu0 zI&zQT>XF^49V%A?1LA7+d2H8-=t{d%vFEW}B%&+rGDV+bhiW?he@S~}k}bZn(McU^ zz*h*TO!qSXo!$;h32z6?pMvW~(_8tM`@JP@eO$T^xT`A$LDy=cYvPJQ(6yB4n($Pm zYqg-OG*!?w@vWdMtPBKQ6K+rtH{3uA!fXlq-~eD=EY_iT4x3SRRs9bsFoJ*dy^5dc zk4ox~k-ECo{t!5zKl-D0|Dnxd=OHR(ej)nf1i^9Yb5+V*Ao@dnejY~bbMgh$tB`Jb z=!Ut{m4HLfKatNTPC-mC^j~x&-^>@Vspt>%fM|odl6q5&__HJ50?RAa=QMZnH^ECn zPk=l~eEV2@FRCMwp0Ky{Rs8utL`rxbTd@;ArzWh7N1hKTO7ioh`6;?0hYjKa_Oif! zfUrE|z1~6TDSkBWbdhnE36nj3w0rn*80f8l<_N2Zr!-|F?=)rZeU{j}YuR&bDNZ3x zD5u)};App+m2LOfrsjrB(=Aijb88lat#X-d0TrW^Sl zhZ6rnv|JNu!OhhVtC7^nj1NWx0LwS{_HI6X^IqTHiqp#3y92|2=G6mlyg?;`D6tMD zocN&{6~kDIN<~Yq^W9dl7wL5ISN#SEucNs5Lon7!HzRWKuP7E+%&uMa4T1SOZ^^MY z6j!%oTSpbLUsd|D+sg8)yxARPei$Z5bMfZ}>0EphHxpAVCx0|CN6t_Vdpq{$T=gIF zbw~ao5A(NC#wF#!c3`YDU0Q~kt69()3%VPtp2GFT!kJPS6Q?k{S7UsT{ga40n3y5- zeHr*!9m99Gf6*N@>)LAD#|E8kwH3t~wt&T2l5Wd0ztA0Yv}Kl*j}1g$_{EE03L7}o z8~)a?k$+Q{?r`-ql+|VhCpDB$4!eCpt2UhG$+v2i6YDbZFfF|{GcWoMF-O#QlMnq0 z{jyE!W((MxWCPO5VY;N>=6%$+rQiF~hMylZYt{zjScn|0Y7Rzba^ZT`s^($68_yS+ zuruEq`6v5;KOrOmsLalvHhj-C{=~2!GV(guN6Gws$jAU+Ou8Xi{Hf118u46{^!#Y_ z_`lTr3|>CS4}&4H-HSxzmthByM&1z=^IDkN1OpVUO;#FgBUv!8sfj zpS{*#?Gg23v>Ii5->!y_3hY&$l*aO1<(z2^>B<9St@^~&vds6`dS&;Rg7%<~ZB@R- z6>fQsPhWY(ZO|eXDr{COa!R2PGARwd4LkT>rAp|4s1~CDwlNeT$fHNq6j+Q5@5LWj zrHDXlsz(V~>@}0LBGdHjER3pnZr2ITE+MU_51k{n9V-5|j&j9!1 z$~>|^qH*Gk-~5dS?7qGQeP=k>8plWTO%vxV+G)P@j74)M@H3PhY)fAs{=#aQJ*HfN zyAK-JJiv5EK4pL8A4&Oi`>-=C8ky+WMMgoQ;jv4+5ZBp>Rth4-#!P+PvVxYb%@ezd z%_;30<~9_K(P*o>>nfaCrYbInxY?tf{eCm9sQeI@aCXdz4o@-(qV7t_Bd{8MI#}Uam$M-H;!_ zg>OIi6eW$dwv%7w@f4Lb@=@e6{tf>|*kG%%x)6KGA2lX|rI=2iA4HHyCcCToHyLi( z?wO+e`$6RbHf?;itns;ZCWEi4FsEF}Eex<=7>ia8@qpWvCQPqVoWMl z{w%!+ZxgH-;b{_80U$LNY)vz^<`v2u8dKbAft*!1nUC5XckI44eJY^EQecqU(;XbxfQ(TMwpNV?z6ZL?CBwG$q!+m=O z_v}14bP*Z<0MKgNFbh!ICLu18l-$Oo_q_*ykKX!+C_h7`4TDWA%27PZKk_R9ZwBrP zrdeb<%_8WBv!XWn7WpZg%HqUl=nAee=RqHdQrs}O$>aP@OFmB0b zR%;JM?fK@ApVpk1P2X$%zXu+wQ6D()HCRC=*)PW}F@u3(hEP+mUruoc+;#)zI&-KP zcNTK~m2a!=%uU?v%=Bc_#MV%bYrV;iRe1Zz>oAi-!J_!Q=uP4j@jqNmcC#ZEvmS)X z@5=D|qCP*qc8z?|Lo9z*UP{dEr>yQ5kFhD${(>>8-;b}D^S#RTU1Qu?s^?F!m!d(J zfdKWWlVlz2WXVg0j~V`#mw%e*b0RD#MLyL_2D~P$muXVLe-w-vdb-GjTdsxCD~mgx z=(Gx)Filaj*L_zcxyh*BC$N2uI}0Jqhw3NuS1`s0z^#gW0_y!SS_neKt1lc%s#|rHh+@QUhogjL+NdpNZM)Mtd>ou4_^Ac<9$W6>VowV^BwD*F$}~Kq zMtDbbmK#$G9ri*HfP5ol^20fVZ-igw@9q2aM6ONtjZjWMh;xM6-?$@cCSgkw;}B%z zZzpx2S?Tby#}6=DjyevF^c;8?mcjB#fL}}Sgd-Dor|5MB>df)OEV6}bpkn^9cG++y zRQ~XTO|$pM6+8$RGpJE9(ecA@C1=Ho|6xppMi`~4UTTcdl{`LwG`=crhv5SH=1;+T zNB>zroWcj-O*AH+_z8Fuomt?22ihDq5gTx`I@!Quod=yKczBP}pJC?Pa(J)O=6-g= z;rvRePJ^gZkF|=Vg>=NKOfMhSlU0gDU4~~KzH;GF{Jr%xHH5u~yIn+tMw1UpW8=jaGl5oU2z@zp$RC=0l2RoEgE!>*VI-FlEkNefi*jEvL z)rgu5Sr(V>n4|GKI!g-g+OtsWsfTy4MYWp`>toB~KDILLTTxrebquKf$;5YG9%JvHrD!We%k@Mzz}gv_?<| zD<9!wE0bIlGNKavm89TC)kjjHgs1IafZe7a;B3pT>i_5W`rE#S`pHLD#(9ZEW00a&FTLIhqvm%{8i<+ziM<2RL8&Ag7U;g0M?I*UaMcB#>>Cg zah0v@zyEuES0S6xW8}LkM!#rj(hQuWETp+eIJ5qw*;k+F#d^TJo8-qDTRV}giLRY~ zf}YHVfW(hh?V0|^==D7A)hg58rO@bq+6s0qkahkv|5ganpX}i(y(Oa8U?+$AREFjR zC2#64q1Pae&G1n%y++kfDFP4H0hBW?LJqE<{t1C_jy$Y>O5k5VoPr8%>RC`!jjj`& zq2-@2Lq7>rf7HNR_E_vw zIaPTAp$nb`^>F?Z{fBb$v&s|FY|SIeslzvGWdSMn7N7Dvh^UFZPk_hyBEu;HK96QE zNw;FB*pJjCA1j^2|02zjK9X+5yCYan1eRPCU;>{T{&D ziT1pQ`Zx0uM7QdZZU*csyeFJ{@Y##cHawq=@99V#D1#Jvj&PvwpieWNw<7f;nUT6d zAHuO2<(A_2Ong5Hcx}O_9Vx`VkkXLn2R*Js>3B!=RU*N@Or~F}!EXiF7RR+l}^pj^}@2Yoxg- zyIhka{Uw^tL%tf&hvvsYo&UQy+{Z;;+S03ewD^gg(G;GvJ1R7ty`yAfK!8 zya&$@^-1q~k;Vg-N+ZIR=yjM+&|@|7ryuGQ@H+9nga0LhevEt-r8Tvg=$`ngXE;gQ z|2gUgUxGhre9$;?AYq(P+2|+nXdm0A{ze{pUWfNY1FF0AfX{?y)W68nf57Ma(rk>e zaVXm-_+R}r#D7zN)A&Es=VIwp@ajJS`z&_87&m8umzSdaW;~nuLqBPp1Gg=x=T6iY z5}!2QG3Ed#=@am0W8D8EjuX}0BefuHN4gg2UZhWvo=5T^9fQ=5)z6Vg*CSyMHBx|t zQ^*K;$zP4sg>(iIB2PqSBf(}vyu-SaJ&w2$Ug>LCk{u=e46r7#8tEd$Gd`2w64?z) zxHbIb$PE5oq)&P$vXp;@6Z$tIwfKD;?7F|?`y#uM?=Q&n5`RB(27e^-H~hWBy#B2UV7I2f=X?{6c|Bmd3(7WBpYQmbr?d@b7|gK|hp zl~W?Os^!uD+b}j#BX99(lFX)}-qy%x{A@gHi~OATg5Qsdyulms-W2(qPmp9j0oDyWW$!oiRfFGoE!O8 zz@WMoAFWsee~Zan(2`@HEn2%TN;CLLwP#+ zlVa?4;=4MZJS*hF1bHa(B*D{UV=g$4#u@TbdK%;9FOfIpiRy2`-}L+p$hNW4O5#iY zTWN=UI?7#$^b+1(CJkzOq)yEqvLV*;LUzNJ?+YZ>x zkp1iAYXB2)`Mc5*c^p1hBei0D4&w7T@IUGjX}**T7r-mPk7BN$nw+po73=apWWR2>JzcGPNi6N%RzLBAQ~(67-}t5nT`VNwlT*?e{5Y zjrPVqiSDB9>UcgWI<8L=eL!@eejr+)FNhxdf5za%K8a`IxW;gc;ShsCJVX5!{iL~2 z%tyqF)OW-W2{^{##o8YGjKPh5%Bt*~vi~RX3-uZC7xnQ0pHaMszo?I;{zyNY6IsQk zsR_SVNzX>pWB8=hFS+PF-aUXcm20qb{1~1UMjq5y`9&J5GywUtp7KFXyvcWA%$7#( z;wMOD{QAfX$oB%f2f7Kq^GhKIaOW{%N|*Afk-wr3O85FNv87m6a}AWL_b&J^GQl1rw*GShe?(qailY& zpKDlw@)t@%CX!s-FUfV0VIiyQB7OM&9MaE`-WT$h^@vNWPe2KmtVp>Cz7Jz z^9=bV@wpP8Pm1(??T(<$YHE&tUKIW8#^*@8WBAiN82i2-|4}9J8v;p6r z#dz8jZv*B|^*i(nmG`!&yc7Yxk;mbav4No+%DQ88J>YYMkBEoXu-g!s^H#=D&*%eq zf#z3AF&+^-0i6+R2etsIT)H{dPvEJ?k-m=hxu6O1eJx!E`}Ptk2zeKRoV*t4mq@f; zxdG|dNFlsmLwOj@J?~3%k-AZK8`47Q+DNbF5$Io}gWVz>t?^;}l}KsG^BnsS^A2vL z;g3c>!n&Xb<9``GY3&z8Dq$Z;3y_!AkB477LbpX-#mILf=5bn=O+%WA`bhtrP0wge zM)HbPO4TH1AeUZ~|A4uDi&Q3G9eF|SiTqXmIb_l=BY%_o@$4hWrS8b0Okc%W6 z4<;YiMP6n1L|zoK@kr!Jl#L`8V=^%&4-X;>NyZAfOEQ&Y<{xR#Kq`*@@08}lLhBPY zgWb#ijNL;W&qLJQseBQvACKb?@#o=1zDzz%eo*7l)M$n@A8HhBrnW-crJbd{LRYRE zuiL5no$g*zZhM{^~TeTw;CTZzHa>1WH%L> zMw=#>=9!K*onYE!`lmT)o@4&G`Q;RrGCSpzlnYbtPx)KQdzNy`9Lt54r>!Py*m{EX zSJr2(@7g3=x~<(d$9A=CuWg?_-`-+B+y0TG)-l(y(eZc3zf+f|K9Kry>OY;coXeei zoWFJc(^c#0aGl_~+;x-d1=ojZ#c31LewOxoci6qceTMr6_tTyfPmO1b=W@?CUZ1zg zyU@GC`wQ=0@1MNy`~1GyzAJqnrq`uknEqY{%b1+8En{!S2bqD)*35O8_hbdLc4d8? zeQfsoImhIDmpdo-+T1Vvo&F2_H~Js+zwG}y&=oi@@O&^mxG4BQo-wZ@@0`2`^F9xS zL-Rvth8_uhm!Fk?dj4<2HQ^QE7Yp14(+U<9996KT;FN-g3blpJg}Vy>P-G}7D%w(X zYSHeZTZ@$9%Hp$&?5-*RmcCT__cBM>xU#8b^UDUxc9sp5 zT~YRU*%#%;a&LKVc|mzi`TX*;%I_`zYx%z_ctt_Q#EPRU&aJq#;`)k5E8ePPl{J-% zDle~msPf-c`Bkk|tE+CW`leb_ZLeNX{j2IPYmThBvF4fDaP7?6t84#MS6+8!-9>d* z*N5saZO}9m}np<71S*`i4<*f~^V_GM)&TC!Xx~+Av_2SlRTOVzGs`b^@_glYcbGGHQ6}Q#5 zb+q-i&1qZJc1GLVZC{Q_A5$}C%9zz-UKsOEyVRcD-qk*@eQWz&?N4;@j!?&_j%gj& zcD&hH)Om8}S)CVmUekG7=Y5@zb-pk*Z|v@|_jEbB)^zRd`f}X(aqGwJ9QS;8pu4vF z#_n&&myI77|Kx<+2}evgZ^Bm->n3iP`2NJtCn}RnlhP*nC$&#nHR-xZzw42E7WAy` z+1Yc)WInld@~X*$lYce&g~|Wu)%I5R4)mVd`|IAvdOzuF>zmQHwr@w@^?i@_y)~t9 zO3Rd$Q?8qG@06$dGyCiM`})`QpV9xT{+FiOr;eU_;?zGMAsunV5x5S?b>t>uX4S2J(XymRK=J5QPK zm>-&7JHKoG^!dx@@1B3l0%^gd1))p1JUf zg>Nj%Tr_9V1&eN2^uVI$7rnnIa-`$P;v>f%x!}mnM-Cl%%aKnV`N3ktV*lcWi!WLH z@)FOI{3TUOT9(XQa`cj2ORik<`z0?gd2h*QOO&O?rH-Y(rJDNh4{k)y`^nc2`?_jK2{8n7V{-@yZLRpJpGIGq3Lk?xb*yV zcX}YbHhp3G#`N9k$J5)=AEm$V9^JiPx3~MK?it;uc4xYWy3gyrrh8-e=I-aa-|PN9 zQ<>Q>Q=5roj?0{qS&-?^tj=7N*^t?kc{H;v^HJuf?C9*+tT!9W&dxSxyR%EPXJxO- z-jv;xeLVYC_6w`b+SM9sd8{UDw$*A`)=KLS*7eqX*0a_d){dN(8J%z1>*9%|tRP^lId(?eoz0A{nPt@+uzxr?;q?xqyN(W4gGiZZ|;At|IPmG{of6^25JWO z8W=y|A2@no`oM_;tpmw{o`K~9=L}pw@Zi9wPUrhdi|Q+ z)=XWqa?QP`kD<3puQ>gIwR^7}TKgxts4iF7wRU>aw@6R_3p+=yYlBJI47gV4}E+d7$|0Y32pRzArP6+9dHl^E!Rb{{{0dTF0zqp7tmp zohm0Gv>Gjj^O+y5jl+`s-Lwg~g){)Yf=Wqy6|d}7ys}sE%3j4Qdlj$jRlKrS@ycGs zD|;2M?3MgD^12(pwsFUip3C(;nWyslWz6rU&DB4mZ=p;rt@Ub2&7eJVmgc6XqU-3_ zOP(+BKH_2&#T)eNrrousU9zCX?L2wS)N*wHS}Dh(9kC|y^!&F|XAb43v@GRB=vtD> z&7^a~l2o#r>KT+jizLQr-(D-_NgX^?zmDkSe?wMs+>RXgze!RxLi9~^nEsR{z7d*8 z?f*9!8toh~$g(V3;-;rRW>Zd{(xp79m(QALaFICl_ey$yhj}*!=e^2S(`+^1^c&_FjG{omLzA0pG0+k-byA>ZknXl+V#7L z(#rEMm8RqCqjm)=N{-bHGUZnD)R6w@Hp}g;tMg8f|9$RQ#xUG-%r>hK&lv8QnM<|Ct%RAX)#Q~q@l;len90_e&B;V} z&d_GH#iOkW%k8PHb5G{VRK_jKxVaEr2u%!6l;Uk6ZYkwwCA1TaOqM|0<7ONAgybfZ zL{FW29Q6T)9f>-(!*J)ahTCj&TOEn4yUk2lZldj(c*-(b-Pv680;9!pTc&%;jCt-U zM#{*veJ_$O)3-$we6`~t(j?`)WR;A)Sgb(c353WO=5ND z5-pwX=8RcL5mt|TL9Q#Eb(?u3L->X}887y_Tg`TIX_|bSq&p=0begDaK{NuuLi($r zJdNJoCGU+aC0kmG?uxu~@($(f+OmB$+qrql%aROv=UVBio9>^KCfk6lDcjEfgZ2rh zkv199O7^y9Tc;xHA1BMCj#;wIu=`Xe+0j8)We<|=u#3LClzwrOhuSG$TBZ6AEeO&# zA79bmnKXX=4?i?F%DIjX&IdYRA6!rd;k*euDLO=JM2Mw z1NVfzU~kxmRziLW`@#O;h67+M?Xw*R2f{&cFpP&o;7~XWCcs3fg-K8c9`MqBXFt?K z0D`o+E)0|5a5w^vgrjH|@6pfz5om-ah(Zjez*O32dJG&3)8ROn0W)D191rxCBbW>G z-~{?Cej=Pirxg7bPJ#JwD(x6PO}kQCsx8y*q4OUHyH2}GTdi%Qw``rQ zeL-*7TdSR~t<)aWUei9;F45N0Il^CQUu##;`Mq1{1g;y&>n++D*caLa~YENie zwZChRYah}*c}9CudrG^Byt_j?Q+r-}R(p=_z{lElZ57>}1hp?Y%A~Z*=x%h=eUjsI zj_y^SMwgFhT#;i&AMKm(*Y40R*A{6DwZ-(#-%n`ubtA-~8Cswf3}~ZMU4DXg=zs() z(EbG)bV3rk03Zb>q@f!!kfjZZImkl+dgvt5Z?*5B2z}5G1F#Sl!D1MMAy@)SVHqrk z6|fRkY2Rxvz-m|nr^8xU2fv3iXgBCta5kI+=fZh#KAn>Kmi9LM5iWoW;Uc&gE`dwo zGPoSBfGgoDxEij3KWTraCl9WL>tH=>09tE?8{sDSGyFySLHm(TH+Yv;#cqaM;8wT| zZihSIPS^-{(Td4EunF#k``~_f03L*g;9=Mdf79-QM_>y)O7BB^PkSG>YS+-p%H!|^ zJgL2?y{WxS=SaV*y+J2Jz79{p)9?&DOXn>-4==!r@DgmJT`RA^tMD4U4sXDl@D{uc z@4&nC!iD$Y1Naa=f{)=7*bbk;Bo3kXaM0SAm?&z+BvD7t3wni5_(i=4h@c43 zdrc;b!)X=iNO2UMi+Z$Z5E0Qxr{F|IjLtrpDyE5J#Ia(!I8MwEGsP@%Je`&@N6Z!T z#0j*s^h9xzIGLWJJw?nHr;6W+(`YTKS+s~&VbDI+cF`dcVu9$SJ)~Wg`qK{Uu2E;j5U7lAW-V$$% zcW8gtdqSQ8`XQZM{jvB&Y!{!3&%_RTtM?b;OYxQXhxl52L%XfN6W@y;#E_SdRfZ122SOoQ#L#5%hM* zqwv>wG@T|B!A7KSI5CD(a4Js2WAIpq8)oQbpWc$|%Ma4ycn6Yw{9BA$dN(|K*D z;Cwt4e}|`G9GmGZvsN@{C9)kmFo6rO6O-75DKs&S-I&2FTA0H;7O)3;yV02o`GlLS$H;{gXiLTcs~9C|A-ghg?JHO zjF;f0co|-fSKyU+6<$rJfc*)t#p`fAZoupD2D}k(!aw6*@UM6?-h#K{ZFoE0fp_9Y zybJHfdvFupi}&IE_y9hL58=bO8UKcl;1+xoAH%KqcYGY5z$fu3d>Ws@XYo0F9$&y0 z@g>}bFXJotD!zuV;~V%UzJ+h&JNPcXhwtMD_#u9TALA#u9Y4j-a0h;lU*MPc75)Ri z#&7Uj{0_gzAMi)~C;o)=V1N#~peI&!?XPtD?QPoa+C$nc+O68d+7P|_VTHCq+pKM( z^Q7;lm%o+i<@zZ4+;lpfad@rvM>>)5YB~}09PM1~PQ6mE(yR3veYC!lzO%lIzN@~Q zK1SbN-$T1kyPsBv_tf{&_ty8(_tk%?@2BstyY&O~vHGv{ar%M!LHfb^c>NIlQ2j7{ zf<95N)hFq7x<~iwK3Y|-*8_S`59wijvVORJgnp!cl>Te|XuUy?=#6@l9@S&|6n&~I zn~t{_Wkyd+GTt?+J7-c1*PN_O<+_?>T-cr}Yc-R}c&0pUWGHmAD&k$lW#g&VD!Xtt zk!nvG6={lCQ!<{dw7E>8y~7$6&ss(%k?qve$z0aeVs>@K%Q||~9Y(5*WF*X1S2h{X zcIZVTW1^Wd&?=ZNtAm10z0J&J^tMFaz-*$&l{NB4%4JBQdMc4JNLJEJRb-8>gw5$m zBb#*@-MM(Oygg&Y36@MTvNCuUaqIsQCsZ|O;w_zqC2gu`Ce~K9nsaUYs^Zy}M4}~; zX~}g}QmjsHX)!Z~iz4B?F>-z`&CNV7|A$!_iWO42ArY}To~g7`Hd3XHWF?ZVMtMV5 zyd`6%%HxWbH8f|)J7sa3lsA~|QWR~imm9%VHQMa!Z}qG6M&DZ`3XwGZ=^Qyc-6 z?G9T##cnuC+3NNYiK?l?b*nmtd3`E*Pw$|AWz%e*l_iwxrm-anwq%;JB%xe4jde~a zDyAJH5(}!18J1hMV3@Byc7!6;oj*%Z3#7h4JtWamHa*^wvy8H&O{%AlESDUSD4VVv zl(dOHovhcB^sj7&s-IHzXN;&)of?rSo1yBbl!H_8w3)RsCUrH8rrOa+wU^Ii<4rbx zrZV2NNzKfTT&g{u$#o^;IjhDTnJSyDbfC6Lrc}=!0b89Jktmz3bjT<&N7c&Oq-xHv z>#C^N$Sxz>WO*)?sPhE8Onqf@Rb|U2`doPaI|26YQT2hl6nJS;hH$10k)o+INsw#}&Pa47Z4)bLvD+`M@sXWAfsK>+9$CTv-OSE3)2U$)q>axs~nXPF}&=(8YMAlAKHYC#>aht7(r)VBY8i{yy zG@VV56YT6!QH!rnqtVCCs-8(hIE^_fF>gfS%9&k8yDGFxf{OnP%VlHf5yOhRro_pe z<&2}BOj$@cE?PUV;<^NK9UD)l!A>~$o29mzgNvd@w1b0qs5U-%phpM&9ZFnkV%&%y9H z7=8!C?_l^H48McncQA(i;&(9o4u;>s@H-d*N2`ESBjD5sI5h%Jji94d(9tF6=n`~v z2|AL4j^v;tIp|0ZI+8<<PlBVG}f!$=zMsVmvz zsVmvzsSB&VSzqcK9*=_+R%5Jv?gw=fF536~}A7&lGtV5V}2&;L@-%zJ?YT&-!!1xVpLj&VCFn$B$ zH?aR3SnmeLZ(#fe#&2N!2F7n-{07F4Fn)ybBa9zm{0QSm7(c@J5yp=&euVKOj2~hA z2;)Z>Kf?GC#&2Z&M#gVs{6@xaWc)_PYh=7emfy(on^;a0%V}acO)RI09RK z%WW#PtdPHSg)M1fq^1%QThhdqG_fU7)*#9nL|KCrX zW&9}PM;SlL_)*4>F@B8kV~ihT{21fM7(d2%G1Xh^gTZi#3vq9)4~Do0OHTD$Sx)s^ z$*F!TIn{3^r#vY+)o*28)t6;ni3@SBrmH;O*9QYUdQ%>c_mV5&hIo{a@=6*6>XjAs zjU`P2fnlzsQ-DWyLg0~IawR+g%4j$uWUdgus9^++R>HY(*sd@tMQW%*u~?`8R3 zmhWZzylkJB?ej98m+`!e=Vd%^36JgbvVA_r_c6YY@qLW%V|*Xu`xxKH_&&z>F}{!S zeT?s8d>`Zc7~jYEe#ZARzMt{^jPGZBKjZru&(C;%#`80tpYi;RSI_e6S$;jsuV?x7 zEWe)R*Ry@~Y+pU&)U*8hl3dn5!17gG?1`z**hE==faM2Ret_i%Sbl)*2{2B8?Flem zfb9t|Zh-w4VEiEC2id+L+eh1J=`+74raoH|W&9xH2N^%e_(8^3pFOEO;|Cc($oL_~ z3o%}Z@j{FjVtYf37h=2+Tij6!m6&n#{ zd=(o}n(4rkLEI_?EW+g*Vu{*fiP~a`+G2^?Vu{*n#sX?sCh8eQi)?b)e?isA zRWn-rZcAA79foLY!?v~r{UvS0h?k~Pt^W^LsNaJgqr$d5jFJ@wOvls zZc;>TmlL&z5~3_oO?{NMO(*J@?u32;)&1$3vNNKlKT0b*BWn7iUSkg@MD1oxlyy+k zAEiq{Rj{O$ngHnvqqB!2?BNJ|IKm!|uxBIe(TJMpVi7gL5oIe?h)-$z#u8=uYNDfb VgX2HeSxt3xg+1(N+x#)@zW}(y8Djtd diff --git a/Output/PartyModes/TicTacToe/Fonts/FreeSans/FreeSansOblique.ttf b/Output/PartyModes/TicTacToe/Fonts/FreeSans/FreeSansOblique.ttf deleted file mode 100644 index 733f8829d8eb965234d73ac7802eac9781c2e460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110740 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 f-ZMFI1 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 CSettings.MaxNumPlayer) NumPlayer = 2; - List _Languages = new List(); - _Languages = CLanguage.GetLanguages(); - - bool _LangExists = false; - - for (i = 0; i < _Languages.Count; i++) - { - if (_Languages[i] == Language) - { - _LangExists = true; - } - } + bool _LangExists = CLanguage.SetLanguage(Language); //TODO: What should we do, if English not exists? if(_LangExists == false){ Language = "English"; } - CLanguage.SetLanguage(Language); - + //Read players from config for (i = 1; i <= CSettings.MaxNumPlayer; i++) { diff --git a/Vocaluxe/Base/CFont.cs b/Vocaluxe/Base/CFont.cs index 73b50330..25fefc83 100644 --- a/Vocaluxe/Base/CFont.cs +++ b/Vocaluxe/Base/CFont.cs @@ -39,22 +39,16 @@ namespace Vocaluxe.Base Font fo; Size sizeB; SizeF size; - System.Drawing.Graphics g; - using (Bitmap bmp = new Bitmap(10, 10)) - { - g = System.Drawing.Graphics.FromImage(bmp); - + using(Graphics g=Graphics.FromHwnd(IntPtr.Zero)){ fo = CFonts.GetFont(); sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); size = g.MeasureString(chr.ToString(), fo); - - g.Dispose(); } using (Bitmap bmp = new Bitmap((int)(sizeB.Width * 2f), sizeB.Height)) { - g = System.Drawing.Graphics.FromImage(bmp); + Graphics g = System.Drawing.Graphics.FromImage(bmp); g.Clear(System.Drawing.Color.Transparent); g.SmoothingMode = SmoothingMode.AntiAlias; @@ -104,9 +98,8 @@ namespace Vocaluxe.Base //bmp.Save("test.png", ImageFormat.Png); Chr = chr; width = (int)((1f + outline / 2f) * sizeB.Width * Texture.width / factor / bmp.Width); - - } - g.Dispose(); + g.Dispose(); + } fo.Dispose(); } @@ -125,29 +118,20 @@ namespace Vocaluxe.Base CFonts.Style = EStyle.Normal; CFonts.Height = SIZEh; float h_style, h_normal; - using (Bitmap bmp = new Bitmap(10, 10)) + using (Graphics g = Graphics.FromHwnd(IntPtr.Zero)) { - using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp)) - { - - Font fo = CFonts.GetFont(); - Size sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); - //SizeF size = g.MeasureString(chr.ToString(), fo); - h_normal = sizeB.Height; - } - CFonts.Style = style; - + Font fo = CFonts.GetFont(); + Size sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); + //SizeF size = g.MeasureString(chr.ToString(), fo); + h_normal = sizeB.Height; } - using (Bitmap bmp = new Bitmap(10, 10)) + CFonts.Style = style; + using (Graphics g = Graphics.FromHwnd(IntPtr.Zero)) { - using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp)) - { - - Font fo = CFonts.GetFont(); - Size sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); - //size = g.MeasureString(chr.ToString(), fo); - h_style = sizeB.Height; - } + Font fo = CFonts.GetFont(); + Size sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags); + //size = g.MeasureString(chr.ToString(), fo); + h_style = sizeB.Height; } return h_normal / h_style; } @@ -399,22 +383,25 @@ namespace Vocaluxe.Base } public static Font GetFont() + { + return _GetCurrentFont().GetFont(); + } + + private static CFont _GetCurrentFont() { switch (Style) { case EStyle.Normal: - return _Fonts[_CurrentFont].Normal.GetFont(); + return _Fonts[_CurrentFont].Normal; case EStyle.Italic: - return _Fonts[_CurrentFont].Italic.GetFont(); + return _Fonts[_CurrentFont].Italic; case EStyle.Bold: - return _Fonts[_CurrentFont].Bold.GetFont(); + return _Fonts[_CurrentFont].Bold; case EStyle.BoldItalic: - return _Fonts[_CurrentFont].BoldItalic.GetFont(); - default: - break; + return _Fonts[_CurrentFont].BoldItalic; } - // should never happen... - return null; + //Just in case... + return _Fonts[_CurrentFont].Normal; } #region DrawText @@ -437,31 +424,13 @@ namespace Vocaluxe.Base return; Height = h; + CFont Font = _GetCurrentFont(); float dx = x; foreach (char chr in Text) { - switch (Style) - { - case EStyle.Normal: - _Fonts[_CurrentFont].Normal.DrawGlyph(chr, dx, y, Height, z, color); - dx += _Fonts[_CurrentFont].Normal.GetWidth(chr); - break; - case EStyle.Italic: - _Fonts[_CurrentFont].Italic.DrawGlyph(chr, dx, y, Height, z, color); - dx += _Fonts[_CurrentFont].Italic.GetWidth(chr); - break; - case EStyle.Bold: - _Fonts[_CurrentFont].Bold.DrawGlyph(chr, dx, y, Height, z, color); - dx += _Fonts[_CurrentFont].Bold.GetWidth(chr); - break; - case EStyle.BoldItalic: - _Fonts[_CurrentFont].BoldItalic.DrawGlyph(chr, dx, y, Height, z, color); - dx += _Fonts[_CurrentFont].BoldItalic.GetWidth(chr); - break; - default: - break; - } + Font.DrawGlyph(chr, dx, y, Height, z, color); + dx += Font.GetWidth(chr); } } @@ -474,31 +443,13 @@ namespace Vocaluxe.Base return; Height = h; + CFont Font = _GetCurrentFont(); float dx = x; foreach (char chr in Text) { - switch (Style) - { - case EStyle.Normal: - _Fonts[_CurrentFont].Normal.DrawGlyphReflection(chr, dx, y, Height, z, color, rspace, rheight); - dx += _Fonts[_CurrentFont].Normal.GetWidth(chr); - break; - case EStyle.Italic: - _Fonts[_CurrentFont].Italic.DrawGlyphReflection(chr, dx, y, Height, z, color, rspace, rheight); - dx += _Fonts[_CurrentFont].Italic.GetWidth(chr); - break; - case EStyle.Bold: - _Fonts[_CurrentFont].Bold.DrawGlyphReflection(chr, dx, y, Height, z, color, rspace, rheight); - dx += _Fonts[_CurrentFont].Bold.GetWidth(chr); - break; - case EStyle.BoldItalic: - _Fonts[_CurrentFont].BoldItalic.DrawGlyphReflection(chr, dx, y, Height, z, color, rspace, rheight); - dx += _Fonts[_CurrentFont].BoldItalic.GetWidth(chr); - break; - default: - break; - } + Font.DrawGlyphReflection(chr, dx, y, Height, z, color, rspace, rheight); + dx += Font.GetWidth(chr); } } @@ -520,56 +471,23 @@ namespace Vocaluxe.Base float x1 = x + w * begin; float x2 = x + w * end; + CFont Font = _GetCurrentFont(); + foreach (char chr in Text) { - float w2 = 0f; - switch (Style) - { - case EStyle.Normal: - w2 = _Fonts[_CurrentFont].Normal.GetWidth(chr); - break; - case EStyle.Italic: - w2 = _Fonts[_CurrentFont].Italic.GetWidth(chr); - break; - case EStyle.Bold: - w2 = _Fonts[_CurrentFont].Bold.GetWidth(chr); - break; - case EStyle.BoldItalic: - w2 = _Fonts[_CurrentFont].BoldItalic.GetWidth(chr); - break; - default: - break; - } - + float w2 = Font.GetWidth(chr); float b = (x1 - dx) / w2; - if (b < 0f) - b = 0f; if (b < 1f) { + if (b < 0f) + b = 0f; float e = (x2 - dx) / w2; - if (e > 1f) - e = 1f; - if (e > 0f) { - switch (Style) - { - case EStyle.Normal: - _Fonts[_CurrentFont].Normal.DrawGlyph(chr, dx, y, Height, z, color, b, e); - break; - case EStyle.Italic: - _Fonts[_CurrentFont].Italic.DrawGlyph(chr, dx, y, Height, z, color, b, e); - break; - case EStyle.Bold: - _Fonts[_CurrentFont].Bold.DrawGlyph(chr, dx, y, Height, z, color, b, e); - break; - case EStyle.BoldItalic: - _Fonts[_CurrentFont].BoldItalic.DrawGlyph(chr, dx, y, Height, z, color, b, e); - break; - default: - break; - } + if (e > 1f) + e = 1f; + Font.DrawGlyph(chr, dx, y, Height, z, color, b, e); } } dx += w2; @@ -641,25 +559,10 @@ namespace Vocaluxe.Base public static float GetTextWidth(string text) { float dx = 0; + CFont Font = _GetCurrentFont(); foreach (char chr in text) { - switch (Style) - { - case EStyle.Normal: - dx += _Fonts[_CurrentFont].Normal.GetWidth(chr); - break; - case EStyle.Italic: - dx += _Fonts[_CurrentFont].Italic.GetWidth(chr); - break; - case EStyle.Bold: - dx += _Fonts[_CurrentFont].Bold.GetWidth(chr); - break; - case EStyle.BoldItalic: - dx += _Fonts[_CurrentFont].BoldItalic.GetWidth(chr); - break; - default: - break; - } + dx += Font.GetWidth(chr); } return dx; } @@ -668,126 +571,39 @@ namespace Vocaluxe.Base { //return TextRenderer.MeasureText(text, GetFont()).Height; float h = 0f; + CFont Font = _GetCurrentFont(); foreach (char chr in text) { - float hh = 0f; - switch (Style) - { - case EStyle.Normal: - hh = _Fonts[_CurrentFont].Normal.GetHeight(chr); - break; - case EStyle.Italic: - hh = _Fonts[_CurrentFont].Italic.GetHeight(chr); - break; - case EStyle.Bold: - hh = _Fonts[_CurrentFont].Bold.GetHeight(chr); - break; - case EStyle.BoldItalic: - hh = _Fonts[_CurrentFont].BoldItalic.GetHeight(chr); - break; - default: - break; - } - + float hh = Font.GetHeight(chr); if (hh>h) h = hh; } return h; } - ///

  • */ - public partial class PortAudio { #region **** PORTAUDIO CALLBACKS **** diff --git a/Vocaluxe/Lib/Sound/Portaudio/PortAudioASIO.cs b/Vocaluxe/Lib/Sound/Portaudio/PortAudioASIO.cs index f3270268..ff6ee102 100644 --- a/Vocaluxe/Lib/Sound/Portaudio/PortAudioASIO.cs +++ b/Vocaluxe/Lib/Sound/Portaudio/PortAudioASIO.cs @@ -19,7 +19,6 @@ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - using System; using System.Runtime.InteropServices; @@ -28,9 +27,6 @@ namespace PortAudioSharp /// PortAudio v.19 bindings for .NET - ASIO bindings public partial class PortAudio { - #region **** PORTAUDIO CALLBACKS **** - #endregion - #region **** PORTAUDIO DATA STRUCTURES **** [StructLayout(LayoutKind.Sequential)] public struct PaAsioStreamInfo @@ -61,17 +57,17 @@ namespace PortAudioSharp #endregion #region **** PORTAUDIO FUNCTIONS **** -// /// Retrieve legal latency settings for the specificed device, in samples. -// /// The global index of the device about which the query is being made. -// /// A pointer to the location which will recieve the minimum latency value. -// /// A pointer to the location which will recieve the maximum latency value. -// /// A pointer to the location which will recieve the preferred latency value. -// /// A pointer to the location which will recieve the granularity. This value -// /// determines which values between minLatency and maxLatency are available. ie the step size, -// /// if granularity is -1 then available latency settings are powers of two. -// /// See ASIOGetBufferSize in the ASIO SDK. -// PaError PaAsio_GetAvailableLatencyValues( PaDeviceIndex device, long *minLatency, long *maxLatency, -// long *preferredLatency, long *granularity ); + // /// Retrieve legal latency settings for the specificed device, in samples. + // /// The global index of the device about which the query is being made. + // /// A pointer to the location which will recieve the minimum latency value. + // /// A pointer to the location which will recieve the maximum latency value. + // /// A pointer to the location which will recieve the preferred latency value. + // /// A pointer to the location which will recieve the granularity. This value + // /// determines which values between minLatency and maxLatency are available. ie the step size, + // /// if granularity is -1 then available latency settings are powers of two. + // /// See ASIOGetBufferSize in the ASIO SDK. + // PaError PaAsio_GetAvailableLatencyValues( PaDeviceIndex device, long *minLatency, long *maxLatency, + // long *preferredLatency, long *granularity ); /// Display the ASIO control panel for the specified device. /// The global index of the device whose control panel is to be displayed. @@ -82,15 +78,15 @@ namespace PortAudioSharp [DllImport("PortAudio.dll")] public static extern PaError PaAsio_ShowControlPanel(int device, IntPtr systemSpecific); -// /// Retrieve a pointer to a string containing the name of the specified input channel. -// /// The string is valid until Pa_Terminate is called. -// /// The string will be no longer than 32 characters including the null terminator. -// PaError PaAsio_GetInputChannelName(PaDeviceIndex device, int channelIndex, const char** channelName ); + // /// Retrieve a pointer to a string containing the name of the specified input channel. + // /// The string is valid until Pa_Terminate is called. + // /// The string will be no longer than 32 characters including the null terminator. + // PaError PaAsio_GetInputChannelName(PaDeviceIndex device, int channelIndex, const char** channelName ); -// /// Retrieve a pointer to a string containing the name of the specified input channel. -// /// The string is valid until Pa_Terminate is called. -// /// The string will be no longer than 32 characters including the null terminator. -// PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex, const char** channelName ); + // /// Retrieve a pointer to a string containing the name of the specified input channel. + // /// The string is valid until Pa_Terminate is called. + // /// The string will be no longer than 32 characters including the null terminator. + // PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex, const char** channelName ); /// Set the sample rate of an open paASIO stream. /// stream diff --git a/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs b/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs index c5a74cbc..0080e70a 100644 --- a/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs +++ b/Vocaluxe/Lib/Video/Acinerella/CAcinerella.cs @@ -220,7 +220,6 @@ namespace Vocaluxe.Lib.Video.Acinerella close_proc: TAc_openclose_callback; proberesult: PAc_proberesult): integer; cdecl; external ac_dll; */ - [DllImport(AcDll, EntryPoint = "ac_open", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] private static extern Int32 _ac_open( IntPtr PAc_instance, diff --git a/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs b/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs index 9473421a..a6f9728d 100644 --- a/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs +++ b/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs @@ -353,7 +353,6 @@ namespace Vocaluxe.Lib.Video _Finished = false; } //EventDecode.Set(); - return true; } @@ -413,11 +412,10 @@ namespace Vocaluxe.Lib.Video { DoOpen(); //EventDecode.Set(); - while (!_terminated) { - //if (EventDecode.WaitOne(10)) { + //if (EventDecode.WaitOne(10)) lock (MutexSyncSignals) { _Time = _SetTime; diff --git a/Vocaluxe/Properties/AssemblyInfo.cs b/Vocaluxe/Properties/AssemblyInfo.cs index 7c2f042d..8ebe0768 100644 --- a/Vocaluxe/Properties/AssemblyInfo.cs +++ b/Vocaluxe/Properties/AssemblyInfo.cs @@ -4,7 +4,6 @@ using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, // die mit einer Assembly verknüpft sind. - [assembly: AssemblyTitle("Vocaluxe.Properties")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] @@ -17,11 +16,9 @@ using System.Runtime.InteropServices; // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. - [assembly: ComVisible(false)] // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird - [assembly: Guid("da631594-f891-4994-9869-c37e626e44f9")] // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: @@ -31,6 +28,5 @@ using System.Runtime.InteropServices; // Buildnummer // Revision // - [assembly: AssemblyVersion("0.3.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Vocaluxe/Screens/CPopupScreenVolumeControl.cs b/Vocaluxe/Screens/CPopupScreenVolumeControl.cs index d865a621..37e9fffc 100644 --- a/Vocaluxe/Screens/CPopupScreenVolumeControl.cs +++ b/Vocaluxe/Screens/CPopupScreenVolumeControl.cs @@ -121,17 +121,17 @@ namespace Vocaluxe.Screens { case EScreens.ScreenSong: if (CSongs.IsInCategory) - SelectSlides[SelectSlideVolume].Selection = (CConfig.PreviewMusicVolume / 5); + SelectSlides[SelectSlideVolume].Selection = CConfig.PreviewMusicVolume / 5; else - SelectSlides[SelectSlideVolume].Selection = (CConfig.BackgroundMusicVolume / 5); + SelectSlides[SelectSlideVolume].Selection = CConfig.BackgroundMusicVolume / 5; break; case EScreens.ScreenSing: - SelectSlides[SelectSlideVolume].Selection = (CConfig.GameMusicVolume / 5); + SelectSlides[SelectSlideVolume].Selection = CConfig.GameMusicVolume / 5; break; default: - SelectSlides[SelectSlideVolume].Selection = (CConfig.BackgroundMusicVolume / 5); + SelectSlides[SelectSlideVolume].Selection = CConfig.BackgroundMusicVolume / 5; break; } } diff --git a/Vocaluxe/Screens/CScreenCredits.cs b/Vocaluxe/Screens/CScreenCredits.cs index 2d5096b7..f4a647f0 100644 --- a/Vocaluxe/Screens/CScreenCredits.cs +++ b/Vocaluxe/Screens/CScreenCredits.cs @@ -259,17 +259,17 @@ namespace Vocaluxe.Screens public CParticleEffect _GetStarParticles(int NumStars, bool isRed, SRectF Rect, bool BigParticles) { - SColorF partColor = (isRed) ? new SColorF(1, 0, 0, 1) : new SColorF(0.149f, 0.415f, 0.819f, 1); - int partSize = (BigParticles) ? 35 : 25; + SColorF partColor = isRed ? new SColorF(1, 0, 0, 1) : new SColorF(0.149f, 0.415f, 0.819f, 1); + int partSize = BigParticles ? 35 : 25; return GetNewParticleEffect(NumStars, partColor, Rect, _TexPerfectNoteStar, partSize, EParticleType.Star); } private void _AddNewCreditName(STexture Texture, int ParticleOffsetX, int ParticleOffsetY, bool BigParticles) { bool isRight = _CreditNames.Count % 2 == 0; - int partRectSize = (BigParticles) ? 25 : 20; - int partCount = (BigParticles) ? 8 : 6; - STexture TexDot = (isRight) ? _TexRedDot : _TexBlueDot; + int partRectSize = BigParticles ? 25 : 20; + int partCount = BigParticles ? 8 : 6; + STexture TexDot = isRight ? _TexRedDot : _TexBlueDot; CStatic Image = GetNewStatic(Texture, new SColorF(1, 1, 1, 1), new SRectF(-1, -1, 400, 120, -4)); @@ -438,7 +438,7 @@ namespace Vocaluxe.Screens else if (_CreditNames[i].Y <= 360f) { //Fade names out - float alpha = ((360 - _CreditNames[i].Y) / 200); + float alpha = (360 - _CreditNames[i].Y) / 200; //Catch some bad alpha-values if (alpha > 1) alpha = 1; diff --git a/Vocaluxe/Screens/CScreenLoad.cs b/Vocaluxe/Screens/CScreenLoad.cs index 4c9e87b1..7860d604 100644 --- a/Vocaluxe/Screens/CScreenLoad.cs +++ b/Vocaluxe/Screens/CScreenLoad.cs @@ -142,7 +142,7 @@ namespace Vocaluxe.Screens else _timer.Start(); - bool next = (CConfig.CoverLoading != ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART || CSongs.CoverLoaded); + bool next = CConfig.CoverLoading != ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART || CSongs.CoverLoaded; if ((_IntroOutPlayed || _SkipIntro) && next && CSettings.GameState != EGameState.EditTheme && CSongs.SongsLoaded) CSettings.GameState = EGameState.Normal; diff --git a/Vocaluxe/Screens/CScreenMain.cs b/Vocaluxe/Screens/CScreenMain.cs index 9f2c2674..389c42ee 100644 --- a/Vocaluxe/Screens/CScreenMain.cs +++ b/Vocaluxe/Screens/CScreenMain.cs @@ -19,7 +19,6 @@ namespace Vocaluxe.Screens private const string ButtonExit = "ButtonExit"; //CParticleEffect Snowflakes; - public override void Init() { base.Init(); @@ -121,15 +120,14 @@ namespace Vocaluxe.Screens public override bool Draw() { - base.DrawBG(); + this.DrawBG(); //if (Snowflakes == null) // Snowflakes = new CParticleEffect(300, new SColorF(1, 1, 1, 1), new SRectF(0, 0, CSettings.iRenderW, 0, 0.5f), "Snowflake", 25, EParticeType.Snow); //Snowflakes.Update(); //Snowflakes.Draw(); - - base.DrawFG(); + this.DrawFG(); if (CSettings.VersionRevision != ERevision.Release) { diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs index 3caf1f46..35d4ad73 100644 --- a/Vocaluxe/Screens/CScreenNames.cs +++ b/Vocaluxe/Screens/CScreenNames.cs @@ -444,8 +444,8 @@ namespace Vocaluxe.Screens if (mouseEvent.LBH && selectingMouseActive) { //Update coords for Drag/Drop-Texture - chooseAvatarStatic.Rect.X += (mouseEvent.X - OldMouseX); - chooseAvatarStatic.Rect.Y += (mouseEvent.Y - OldMouseY); + chooseAvatarStatic.Rect.X += mouseEvent.X - OldMouseX; + chooseAvatarStatic.Rect.Y += mouseEvent.Y - OldMouseY; OldMouseX = mouseEvent.X; OldMouseY = mouseEvent.Y; } @@ -556,8 +556,8 @@ namespace Vocaluxe.Screens { for (int i = 1; i <= CGame.NumPlayer; i++) { - CSound.AnalyzeBuffer((i - 1)); - Equalizers["EqualizerPlayer" + i].Update(CSound.ToneWeigth((i - 1))); + CSound.AnalyzeBuffer(i - 1); + Equalizers["EqualizerPlayer" + i].Update(CSound.ToneWeigth(i - 1)); } return true; } diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index 96ba9bdd..84678966 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -318,8 +318,8 @@ namespace Vocaluxe.Screens UpdateChannels(); } - SelectSlides[SelectSlideRecordChannel1].Visible = (_devices != null); - SelectSlides[SelectSlideRecordChannel2].Visible = (_devices != null); + SelectSlides[SelectSlideRecordChannel1].Visible = _devices != null; + SelectSlides[SelectSlideRecordChannel2].Visible = _devices != null; Statics[StaticWarning].Visible = false; Texts[TextWarning].Visible = false; @@ -335,7 +335,7 @@ namespace Vocaluxe.Screens } } - SelectSlides[SelectSlideDelay].Selection = (CConfig.MicDelay / 20); + SelectSlides[SelectSlideDelay].Selection = CConfig.MicDelay / 20; _DelayTestRunning = false; _DelaySound = -1; diff --git a/Vocaluxe/Screens/CScreenOptionsVideo.cs b/Vocaluxe/Screens/CScreenOptionsVideo.cs index d3730e32..9a4f12c7 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideo.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideo.cs @@ -188,9 +188,9 @@ namespace Vocaluxe.Screens devices = null; } - SelectSlides[SelectSlideWebcamDevices].Visible = (devices != null && devices.Length > 0); - SelectSlides[SelectSlideWebcamCapabilities].Visible = (devices != null && devices.Length > 0); - Statics[StaticWebcamOutput].Visible = (devices != null && devices.Length > 0); + SelectSlides[SelectSlideWebcamDevices].Visible = devices != null && devices.Length > 0; + SelectSlides[SelectSlideWebcamCapabilities].Visible = devices != null && devices.Length > 0; + Statics[StaticWebcamOutput].Visible = devices != null && devices.Length > 0; } private void SaveConfig() diff --git a/Vocaluxe/Screens/CScreenScore.cs b/Vocaluxe/Screens/CScreenScore.cs index e8575c78..117c09c3 100644 --- a/Vocaluxe/Screens/CScreenScore.cs +++ b/Vocaluxe/Screens/CScreenScore.cs @@ -106,7 +106,7 @@ namespace Vocaluxe.Screens _Round = 1; _Points = CGame.GetPoints(); - SetVisuability(); + SetVisibility(); UpdateRatings(); } @@ -276,7 +276,7 @@ namespace Vocaluxe.Screens } } for (int p = 0; p < player.Length; p++) - player[p].Points = (int)Math.Round((player[p].Points / CGame.NumRounds)); + player[p].Points = (int)Math.Round(player[p].Points / CGame.NumRounds); } for (int p = 0; p < player.Length; p++) @@ -345,7 +345,7 @@ namespace Vocaluxe.Screens timer.Start(); } - private void SetVisuability() + private void SetVisibility() { for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++) { @@ -353,13 +353,13 @@ namespace Vocaluxe.Screens { if (player <= numplayer) { - Texts[TextNames[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); - Texts[TextScores[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); - Texts[TextRatings[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); - Texts[TextDifficulty[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); - Statics[StaticPointsBar[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); - Statics[StaticPointsBarBG[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); - Statics[StaticAvatar[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); + Texts[TextNames[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; + Texts[TextScores[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; + Texts[TextRatings[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; + Texts[TextDifficulty[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; + Statics[StaticPointsBar[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; + Statics[StaticPointsBarBG[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; + Statics[StaticAvatar[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; Statics[StaticAvatar[player, numplayer]].Texture = new STexture(-1); } diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 7506b14f..e7ee2ed0 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -465,7 +465,7 @@ namespace Vocaluxe.Screens } } - base.DrawBG(); + this.DrawBG(); foreach (CStatic stat in Statics) stat.Draw(); @@ -653,7 +653,6 @@ namespace Vocaluxe.Screens break; */ - _TimerSongText.Stop(); _TimerSongText.Reset(); _TimerDuetText1.Stop(); @@ -908,16 +907,16 @@ namespace Vocaluxe.Screens { if (player <= numplayer) { - Texts[TextScores[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); - Texts[TextNames[player, numplayer]].Visible = ((numplayer + 1 == CGame.NumPlayer) + Texts[TextScores[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; + Texts[TextNames[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer) && (CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH || - CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_NAME)); - Statics[StaticScores[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer); - Statics[StaticAvatars[player, numplayer]].Visible = ((numplayer + 1 == CGame.NumPlayer) + CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_NAME); + Statics[StaticScores[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; + Statics[StaticAvatars[player, numplayer]].Visible = (numplayer + 1 == CGame.NumPlayer) && (CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH || - CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_AVATAR)); + CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_AVATAR); } } } @@ -1328,7 +1327,7 @@ namespace Vocaluxe.Screens new SRectF( stat.Rect.X + stat.Rect.W * ((CGame.GetTimeFromBeats(trect.startBeat, song.BPM) + song.Gap - song.Start) / TotalTime), stat.Rect.Y, - stat.Rect.W * (CGame.GetTimeFromBeats((trect.endBeat - trect.startBeat), song.BPM) / TotalTime), + stat.Rect.W * (CGame.GetTimeFromBeats(trect.endBeat - trect.startBeat, song.BPM) / TotalTime), stat.Rect.H, stat.Rect.Z)); diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index fa340e7a..50b2cc38 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -1208,7 +1208,7 @@ namespace Vocaluxe.Screens private void OpenPlaylistAction() { //Open a playlist - if (Playlists[Playlist].ActivePlaylistID != (SelectSlides[SelectSlideOptionsPlaylistOpen].Selection)) + if (Playlists[Playlist].ActivePlaylistID != SelectSlides[SelectSlideOptionsPlaylistOpen].Selection) { Playlists[Playlist].ActivePlaylistID = SelectSlides[SelectSlideOptionsPlaylistOpen].Selection; SetSelectSlidePlaylistToCurrentPlaylist(); diff --git a/Vocaluxe/Settings.StyleCop b/Vocaluxe/Settings.StyleCop new file mode 100644 index 00000000..72ed49f9 --- /dev/null +++ b/Vocaluxe/Settings.StyleCop @@ -0,0 +1,809 @@ + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + \ No newline at end of file diff --git a/VocaluxeLib/GlobalSuppressions.cs b/VocaluxeLib/GlobalSuppressions.cs index 1f0313e4..f43b3e9e 100644 --- a/VocaluxeLib/GlobalSuppressions.cs +++ b/VocaluxeLib/GlobalSuppressions.cs @@ -2,12 +2,10 @@ // Attribute verwendet, die auf dieses Projekt angewendet werden. // Unterdrückungen auf Projektebene haben entweder kein Ziel oder // erhalten ein spezifisches Ziel mit Namespace-, Typ-, Memberbereich usw. -// // Wenn Sie dieser Datei eine Unterdrückung hinzufügen möchten, klicken Sie mit der // rechten Maustaste auf die Meldung in der Fehlerliste, zeigen Sie auf // "Meldung(en) unterdrücken", und klicken Sie auf "In Projektunterdrückungsdatei". // Sie müssen dieser Datei nicht manuell Unterdrückungen hinzufügen. - using System.Diagnostics.CodeAnalysis; [assembly: diff --git a/VocaluxeLib/Menu/CEqualizer.cs b/VocaluxeLib/Menu/CEqualizer.cs index d4f77ad1..469881d1 100644 --- a/VocaluxeLib/Menu/CEqualizer.cs +++ b/VocaluxeLib/Menu/CEqualizer.cs @@ -204,7 +204,7 @@ namespace VocaluxeLib.Menu { _Bars[i] = 1f - weights[i]; if (_Theme.DrawNegative == EOffOn.TR_CONFIG_OFF && weights[i] < 0) - _Bars[i] = (1f + weights[i]); + _Bars[i] = 1f + weights[i]; } else _Bars[i] = 0f; @@ -225,7 +225,7 @@ namespace VocaluxeLib.Menu if (_Bars == null) return; - float dx = (Rect.W) / _Bars.Length; + float dx = Rect.W / _Bars.Length; int max = _Bars.Length - 1; float maxB = _Bars[max]; for (int i = 0; i < _Bars.Length - 1; i++) diff --git a/VocaluxeLib/Menu/CHelper.cs b/VocaluxeLib/Menu/CHelper.cs index 26bfe188..4578b7d6 100644 --- a/VocaluxeLib/Menu/CHelper.cs +++ b/VocaluxeLib/Menu/CHelper.cs @@ -194,7 +194,7 @@ namespace VocaluxeLib.Menu public static bool IsInBounds(SRectF bounds, int x, int y) { - return ((bounds.X <= x) && (bounds.X + bounds.W >= x) && (bounds.Y <= y) && (bounds.Y + bounds.H >= y)); + return (bounds.X <= x) && (bounds.X + bounds.W >= x) && (bounds.Y <= y) && (bounds.Y + bounds.H >= y); } } diff --git a/VocaluxeLib/Menu/CInteraction.cs b/VocaluxeLib/Menu/CInteraction.cs index e191192e..f628bde5 100644 --- a/VocaluxeLib/Menu/CInteraction.cs +++ b/VocaluxeLib/Menu/CInteraction.cs @@ -35,15 +35,15 @@ { get { - return (_Type == EType.TBackground || - _Type == EType.TNameSelection || - _Type == EType.TText || - _Type == EType.TStatic || - _Type == EType.TSongMenu || - _Type == EType.TLyric || - _Type == EType.TSingNote || - _Type == EType.TEqualizer || - _Type == EType.TPlaylist); + return _Type == EType.TBackground || + _Type == EType.TNameSelection || + _Type == EType.TText || + _Type == EType.TStatic || + _Type == EType.TSongMenu || + _Type == EType.TLyric || + _Type == EType.TSingNote || + _Type == EType.TEqualizer || + _Type == EType.TPlaylist; } } diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index 923f6aab..ce82ddb3 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -849,7 +849,7 @@ namespace VocaluxeLib.Menu return; - items.Sort(delegate(ZSort s1, ZSort s2) { return (s2.z.CompareTo(s1.z)); }); + items.Sort(delegate(ZSort s1, ZSort s2) { return s2.z.CompareTo(s1.z); }); for (int i = 0; i < items.Count; i++) _DrawInteraction(items[i].ID); diff --git a/VocaluxeLib/Menu/CNameSelection.cs b/VocaluxeLib/Menu/CNameSelection.cs index 0d87d20c..e8c6eaba 100644 --- a/VocaluxeLib/Menu/CNameSelection.cs +++ b/VocaluxeLib/Menu/CNameSelection.cs @@ -91,7 +91,7 @@ namespace VocaluxeLib.Menu PlayerSelector = new CStatic(_PartyModeID); PlayerSelector.Texture = _TextureTileSelected; - PlayerSelector.Rect = new SRectF(0, 0, (_TileW + 6), (_TileH + 6), (Rect.Z - 0.5f)); + PlayerSelector.Rect = new SRectF(0, 0, _TileW + 6, _TileH + 6, Rect.Z - 0.5f); PlayerSelector.Visible = false; UpdateVisibleProfiles(); @@ -317,7 +317,7 @@ namespace VocaluxeLib.Menu _actualSelection = _actualSelection - _Tiles.Count + _NumW; if (_Tiles[_actualSelection].PlayerNr == -1) { - for (int i = (_Tiles.Count - 1); i >= 0; i--) + for (int i = _Tiles.Count - 1; i >= 0; i--) { if (_Tiles[i].PlayerNr != -1) { diff --git a/VocaluxeLib/Menu/CObjectInteractions.cs b/VocaluxeLib/Menu/CObjectInteractions.cs index 4d12c44e..f5011276 100644 --- a/VocaluxeLib/Menu/CObjectInteractions.cs +++ b/VocaluxeLib/Menu/CObjectInteractions.cs @@ -312,7 +312,7 @@ namespace VocaluxeLib.Menu return; - items.Sort(delegate(ZSort s1, ZSort s2) { return (s2.z.CompareTo(s1.z)); }); + items.Sort(delegate(ZSort s1, ZSort s2) { return s2.z.CompareTo(s1.z); }); for (int i = 0; i < items.Count; i++) _DrawInteraction(items[i].ID); diff --git a/VocaluxeLib/Menu/CParticle.cs b/VocaluxeLib/Menu/CParticle.cs index 6217456c..7ffaced0 100644 --- a/VocaluxeLib/Menu/CParticle.cs +++ b/VocaluxeLib/Menu/CParticle.cs @@ -86,7 +86,7 @@ namespace VocaluxeLib.Menu public bool IsAlive { - get { return (_Age < _MaxAge || _MaxAge == 0f); } + get { return _Age < _MaxAge || _MaxAge == 0f; } } #endregion public vars @@ -314,7 +314,7 @@ namespace VocaluxeLib.Menu public bool IsAlive { - get { return (_Stars.Count > 0 || !_SpawnTimer.IsRunning); } + get { return _Stars.Count > 0 || !_SpawnTimer.IsRunning; } } public CParticleEffect(int PartyModeID) diff --git a/VocaluxeLib/Menu/CPlaylist.cs b/VocaluxeLib/Menu/CPlaylist.cs index dc4d75a9..92db3f0c 100644 --- a/VocaluxeLib/Menu/CPlaylist.cs +++ b/VocaluxeLib/Menu/CPlaylist.cs @@ -181,7 +181,6 @@ namespace VocaluxeLib.Menu public int DragAndDropSongID = -1; //private static - public CPlaylist(int PartyModeID) { _PartyModeID = PartyModeID; @@ -511,16 +510,18 @@ namespace VocaluxeLib.Menu } else { - if (CurrentPlaylistElement == -1 || PlaylistElementContents.Count == 0) //no song is selected + if (CurrentPlaylistElement == -1 || PlaylistElementContents.Count == 0) { + //no song is selected _Interactions.HandleInput(KeyEvent); CurrentPlaylistElement = GetSelectedSelectionNr(); if (CurrentPlaylistElement != -1) return true; } - else if (CurrentPlaylistElement != -1) //a song is selected + else if (CurrentPlaylistElement != -1) { + //a song is selected int ScrollLimit = PlaylistElements.Count / 2; //special actions if a song is selected diff --git a/VocaluxeLib/Menu/CSelectSlide.cs b/VocaluxeLib/Menu/CSelectSlide.cs index fedc25f7..b9482346 100644 --- a/VocaluxeLib/Menu/CSelectSlide.cs +++ b/VocaluxeLib/Menu/CSelectSlide.cs @@ -115,7 +115,6 @@ namespace VocaluxeLib.Menu { if (_Selection >= 0 && _ValueIndexes.Count > _Selection) return _ValueIndexes[_Selection]; - else return -1; } @@ -726,7 +725,6 @@ namespace VocaluxeLib.Menu float x = Rect.X + (Rect.W - TextRelativeX) * 0.1f; float dx = (Rect.W - TextRelativeX) * 0.8f / _NumVisible; //float y = Rect.Y + (Rect.H - TextH); - int offset = _Selection - _NumVisible / 2; if (_ValueNames.Count - _NumVisible - offset < 0) @@ -810,7 +808,7 @@ namespace VocaluxeLib.Menu public object Clone() { - return base.MemberwiseClone(); + return this.MemberwiseClone(); } #region ThemeEdit diff --git a/VocaluxeLib/Menu/CText.cs b/VocaluxeLib/Menu/CText.cs index e5f66caf..2dfe4b20 100644 --- a/VocaluxeLib/Menu/CText.cs +++ b/VocaluxeLib/Menu/CText.cs @@ -49,8 +49,9 @@ namespace VocaluxeLib.Menu private STextPosition _DrawPosition = new STextPosition(0); private float _X; - public float X //left + public float X { + //left get { return _X; } set { @@ -63,8 +64,9 @@ namespace VocaluxeLib.Menu } private float _Y; - public float Y //higher + public float Y { + //higher get { return _Y; } set { @@ -238,7 +240,7 @@ namespace VocaluxeLib.Menu { if (_EditMode != value) { - _Text = (value) ? _Text + "|" : _Text.Substring(0, _Text.Length - 1); + _Text = value ? _Text + "|" : _Text.Substring(0, _Text.Length - 1); _EditMode = value; _PositionNeedsUpdate = true; } diff --git a/VocaluxeLib/Menu/SingNotes/CNotes.cs b/VocaluxeLib/Menu/SingNotes/CNotes.cs index 68b4be3c..7e424075 100644 --- a/VocaluxeLib/Menu/SingNotes/CNotes.cs +++ b/VocaluxeLib/Menu/SingNotes/CNotes.cs @@ -414,7 +414,7 @@ namespace VocaluxeLib.Menu.SingNotes if (CompareLine.Points == 0) return false; - _PerfectLine = (Points == CompareLine.Points); + _PerfectLine = Points == CompareLine.Points; return _PerfectLine; } diff --git a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs index 2caea67c..0854739f 100644 --- a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs +++ b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs @@ -688,7 +688,7 @@ namespace VocaluxeLib.Menu.SingNotes if (XOffset > Rect.W) XOffset = Rect.W; - float dy = Rect.H / (CBase.Settings.GetNumNoteLines()); + float dy = Rect.H / CBase.Settings.GetNumNoteLines(); SRectF rect = new SRectF( Rect.X - dy + XOffset, Rect.Y + dy * (CBase.Settings.GetNumNoteLines() - 1 - (TonePlayer - BaseLine) / 2f), diff --git a/VocaluxeLib/Menu/SongMenu/CSong.cs b/VocaluxeLib/Menu/SongMenu/CSong.cs index f2d43ebf..7ffb8a5e 100644 --- a/VocaluxeLib/Menu/SongMenu/CSong.cs +++ b/VocaluxeLib/Menu/SongMenu/CSong.cs @@ -1035,7 +1035,7 @@ namespace VocaluxeLib.Menu.SongMenu public object Clone() { - return base.MemberwiseClone(); + return this.MemberwiseClone(); } } } \ No newline at end of file diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenu.cs b/VocaluxeLib/Menu/SongMenu/CSongMenu.cs index 4cbc822e..9742e62f 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenu.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenu.cs @@ -212,7 +212,6 @@ namespace VocaluxeLib.Menu.SongMenu //case ESongMenu.TR_CONFIG_DREIDEL: // _SongMenu = new CSongMenuDreidel(); // break; - case ESongMenu.TR_CONFIG_TILE_BOARD: _SongMenu = new CSongMenuTileBoard(_PartyModeID); break; diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuDreidel.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuDreidel.cs index 98f44e6a..27898f75 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuDreidel.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuDreidel.cs @@ -21,7 +21,6 @@ return _actualSelection; } */ - public CSongMenuDreidel(int PartyModeID) : base(PartyModeID) {} diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index 0e59c3eb..12f0f348 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -110,8 +110,9 @@ namespace VocaluxeLib.Menu.SongMenu protected float _MaxVolume = 100f; - protected int _PreviewSelected //for preview only + protected int _PreviewSelected { + //for preview only get { if ((_SelectedInternal != _SelectedPending) && (_timer.ElapsedMilliseconds >= _PendingTime)) @@ -158,8 +159,9 @@ namespace VocaluxeLib.Menu.SongMenu _SelectedInternal = _SelectedPending; } - protected int _Locked //the real selected song for singing + protected int _Locked { + //the real selected song for singing get { return _LockedInternal; } set { _LockedInternal = value; } } @@ -439,7 +441,7 @@ namespace VocaluxeLib.Menu.SongMenu float vtime = 0f; CBase.Video.GetFrame(_video, ref _vidtex, time, ref vtime); if (_VideoFadeTimer.ElapsedMilliseconds <= 3000L) - _vidtex.color.A = (_VideoFadeTimer.ElapsedMilliseconds / 3000f); + _vidtex.color.A = _VideoFadeTimer.ElapsedMilliseconds / 3000f; else { _vidtex.color.A = 1f; diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs index 508dd6c9..39fdcd15 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs @@ -341,7 +341,7 @@ namespace VocaluxeLib.Menu.SongMenu if (!sel) _actualSelection = -1; - if ((MouseEvent.RB) && (CBase.Songs.GetNumCategories() > 0) && CBase.Songs.GetCurrentCategoryIndex() >= 0 && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && + if (MouseEvent.RB && (CBase.Songs.GetNumCategories() > 0) && CBase.Songs.GetCurrentCategoryIndex() >= 0 && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && SongOptions.Selection.CategoryChangeAllowed) { ShowCategories(); @@ -355,7 +355,7 @@ namespace VocaluxeLib.Menu.SongMenu if (CHelper.IsInBounds(_CoverBig.Rect, MouseEvent) || CHelper.IsInBounds(_TextBG.Rect, MouseEvent)) _Locked = _PreviewSelected; } - else if ((MouseEvent.LB) && (CBase.Songs.GetCurrentCategoryIndex() == -1)) + else if (MouseEvent.LB && (CBase.Songs.GetCurrentCategoryIndex() == -1)) { foreach (CStatic tile in _Tiles) { @@ -605,7 +605,7 @@ namespace VocaluxeLib.Menu.SongMenu private void UpdateList(int offset, bool force = false) { bool isInCategory = CBase.Songs.GetCurrentCategoryIndex() >= 0; - int itemCount = (isInCategory) ? CBase.Songs.GetNumVisibleSongs() : CBase.Songs.GetNumCategories(); + int itemCount = isInCategory ? CBase.Songs.GetNumVisibleSongs() : CBase.Songs.GetNumCategories(); if (offset >= (itemCount / _NumW) * _NumW - (_NumW * (_NumH - 1))) offset = (itemCount / _NumW) * _NumW - (_NumW * (_NumH - 1)); diff --git a/VocaluxeLib/Properties/AssemblyInfo.cs b/VocaluxeLib/Properties/AssemblyInfo.cs index 7489f374..48dc08f0 100644 --- a/VocaluxeLib/Properties/AssemblyInfo.cs +++ b/VocaluxeLib/Properties/AssemblyInfo.cs @@ -4,7 +4,6 @@ using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, // die mit einer Assembly verknüpft sind. - [assembly: AssemblyTitle("VocaluxeLib")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] @@ -17,11 +16,9 @@ using System.Runtime.InteropServices; // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. - [assembly: ComVisible(false)] // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird - [assembly: Guid("3fb7cd34-186d-4f89-beb5-8830b8e5593b")] // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: @@ -34,6 +31,5 @@ using System.Runtime.InteropServices; // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] - [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/VocaluxeLib/Settings.StyleCop b/VocaluxeLib/Settings.StyleCop new file mode 100644 index 00000000..72ed49f9 --- /dev/null +++ b/VocaluxeLib/Settings.StyleCop @@ -0,0 +1,809 @@ + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + \ No newline at end of file From 1fbc436505780d9c1ffe8d6623aa5e53b7d14f9a Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 24 Mar 2013 04:54:23 +0100 Subject: [PATCH 29/31] Bugfix for text reference of namespace. Converted! --- Vocaluxe/Base/CSongSorter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vocaluxe/Base/CSongSorter.cs b/Vocaluxe/Base/CSongSorter.cs index 170fac5c..6687b79d 100644 --- a/Vocaluxe/Base/CSongSorter.cs +++ b/Vocaluxe/Base/CSongSorter.cs @@ -112,7 +112,7 @@ namespace Vocaluxe.Base CSongs.Filter.FilteredSongs.ForEach((song) => SortList.Add(new SongPointer(song.ID, ""))); else { - field = Type.GetType("Vocaluxe.Menu.SongMenu.CSong,VocaluxeLib").GetField(fieldName, BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public); + field = typeof(CSong).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"); From b0b3c09ab48db1832827fbbab758bc43dcaa71fb Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 24 Mar 2013 16:46:59 +0100 Subject: [PATCH 30/31] Bugfix to make it .Net2 compiler compliant Bugfix to allow spaces in project dir --- .../PartyModeChallenge/PartyModeChallenge.cs | 22 +++++++++---------- .../PartyModeChallenge.csproj | 3 ++- .../PartyScreenChallengeConfig.cs | 4 ++-- .../PartyScreenChallengeMain.cs | 6 ++--- .../PartyScreenChallengeNames.cs | 2 +- .../PartyModeChallengeMedley.cs | 22 +++++++++---------- .../PartyModeChallengeMedley.csproj | 3 ++- .../PartyScreenChallengeMedleyConfig.cs | 4 ++-- .../PartyScreenChallengeMedleyMain.cs | 6 ++--- .../PartyScreenChallengeMedleyNames.cs | 2 +- .../PartyModeTicTacToe/PartyModeTicTacToe.cs | 4 ++-- .../PartyModeTicTacToe.csproj | 3 ++- .../PartyScreenTicTacToeConfig.cs | 4 ++-- .../PartyScreenTicTacToeMain.cs | 6 ++--- .../PartyScreenTicTacToeNames.cs | 2 +- Re#Settings.DotSettings | 11 ++++++++-- Vocaluxe/Base/CParty.cs | 4 ++-- Vocaluxe/Base/CSongFilter.cs | 2 +- Vocaluxe/Lib/Input/WiiMote/WiiMoteLib.cs | 2 +- Vocaluxe/Lib/Sound/Portaudio/PortAudioASIO.cs | 3 --- Vocaluxe/Program.cs | 2 +- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 4 ++-- Vocaluxe/Screens/CPopupScreenVolumeControl.cs | 6 ++--- Vocaluxe/Screens/CScreenCredits.cs | 8 +++---- Vocaluxe/Screens/CScreenLoad.cs | 4 ++-- Vocaluxe/Screens/CScreenMain.cs | 8 +++---- Vocaluxe/Screens/CScreenNames.cs | 11 +++++----- Vocaluxe/Screens/CScreenOptions.cs | 2 +- Vocaluxe/Screens/CScreenOptionsGame.cs | 4 ++-- Vocaluxe/Screens/CScreenOptionsLyrics.cs | 4 ++-- Vocaluxe/Screens/CScreenOptionsRecord.cs | 10 ++++----- Vocaluxe/Screens/CScreenOptionsSound.cs | 10 ++++----- Vocaluxe/Screens/CScreenOptionsTheme.cs | 4 ++-- Vocaluxe/Screens/CScreenOptionsVideo.cs | 6 ++--- Vocaluxe/Screens/CScreenParty.cs | 6 ++--- Vocaluxe/Screens/CScreenProfiles.cs | 7 +++--- Vocaluxe/Screens/CScreenScore.cs | 2 +- Vocaluxe/Screens/CScreenSing.cs | 19 ++++++++-------- Vocaluxe/Screens/CScreenSong.cs | 8 +++---- VocaluxeLib/Menu/CSelectSlide.cs | 2 +- VocaluxeLib/Menu/SongMenu/CSong.cs | 2 +- 41 files changed, 126 insertions(+), 118 deletions(-) diff --git a/PartyModes/PartyModeChallenge/PartyModeChallenge.cs b/PartyModes/PartyModeChallenge/PartyModeChallenge.cs index 2725a680..2b248af1 100644 --- a/PartyModes/PartyModeChallenge/PartyModeChallenge.cs +++ b/PartyModes/PartyModeChallenge/PartyModeChallenge.cs @@ -149,8 +149,8 @@ namespace VocaluxeLib.PartyModes.Challenge _ScreenSongOptions.Selection.RandomOnly = false; _ScreenSongOptions.Selection.PartyMode = true; _ScreenSongOptions.Selection.CategoryChangeAllowed = true; - _ScreenSongOptions.Selection.NumJokers = new[] {5, 5}; - _ScreenSongOptions.Selection.TeamNames = new[] {"foo", "bar"}; + _ScreenSongOptions.Selection.NumJokers = new int[] {5, 5}; + _ScreenSongOptions.Selection.TeamNames = new string[] {"foo", "bar"}; _ScreenSongOptions.Sorting.SearchString = String.Empty; _ScreenSongOptions.Sorting.SearchActive = false; @@ -501,30 +501,30 @@ namespace VocaluxeLib.PartyModes.Challenge switch (GameData.NumPlayerAtOnce) { case 1: - _ScreenSongOptions.Selection.NumJokers = new[] {10}; + _ScreenSongOptions.Selection.NumJokers = new int[] {10}; break; case 2: - _ScreenSongOptions.Selection.NumJokers = new[] {5, 5}; + _ScreenSongOptions.Selection.NumJokers = new int[] {5, 5}; break; case 3: - _ScreenSongOptions.Selection.NumJokers = new[] {4, 4, 4}; + _ScreenSongOptions.Selection.NumJokers = new int[] {4, 4, 4}; break; case 4: - _ScreenSongOptions.Selection.NumJokers = new[] {3, 3, 3, 3}; + _ScreenSongOptions.Selection.NumJokers = new int[] {3, 3, 3, 3}; break; case 5: - _ScreenSongOptions.Selection.NumJokers = new[] {2, 2, 2, 2, 2}; + _ScreenSongOptions.Selection.NumJokers = new int[] {2, 2, 2, 2, 2}; break; case 6: - _ScreenSongOptions.Selection.NumJokers = new[] {2, 2, 2, 2, 2, 2}; + _ScreenSongOptions.Selection.NumJokers = new int[] {2, 2, 2, 2, 2, 2}; break; default: - _ScreenSongOptions.Selection.NumJokers = new[] {5, 5}; + _ScreenSongOptions.Selection.NumJokers = new int[] {5, 5}; break; } } @@ -535,13 +535,13 @@ namespace VocaluxeLib.PartyModes.Challenge if (profiles == null) { - _ScreenSongOptions.Selection.TeamNames = new[] {"foo", "bar"}; + _ScreenSongOptions.Selection.TeamNames = new string[] {"foo", "bar"}; return; } if (GameData.NumPlayerAtOnce < 1 || GameData.ProfileIDs.Count < GameData.NumPlayerAtOnce || profiles.Length < GameData.NumPlayerAtOnce) { - _ScreenSongOptions.Selection.TeamNames = new[] {"foo", "bar"}; + _ScreenSongOptions.Selection.TeamNames = new string[] {"foo", "bar"}; return; } diff --git a/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj b/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj index 2472f2fa..61103a08 100644 --- a/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj +++ b/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj @@ -134,7 +134,8 @@ - xcopy $(ProjectDir)*.cs $(SolutionDir)Output\PartyModes\$(TargetName)\Code\ /EXCLUDE:$(ProjectDir)..\Excludes.txt /I /Y + cd $(SolutionDir)Partymodes\ +xcopy "$(ProjectDir)*.cs" "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\" /EXCLUDE:Excludes.txt /I /Y