diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index 69bf1c51..68af3244 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -20,6 +20,8 @@ using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Windows.Forms; +using System.IO; +using System.Xml.Serialization; using Vocaluxe.Base.Fonts; using Vocaluxe.Screens; using VocaluxeLib; @@ -160,8 +162,19 @@ namespace Vocaluxe.Base public static void SaveTheme() { CTheme.SaveTheme(); - foreach (IMenu screen in _Screens) - screen.SaveTheme(); + foreach (CMenu screen in _Screens) + { + if (screen.ThemePath == null || screen.ThemeName == "ScreenTest") + continue; + + TextWriter textWriter = new StreamWriter(@Path.Combine(screen.ThemePath, screen.ThemeName + "_test.xml")); + Type[] screens = { typeof(CScreenHighscore), typeof(CScreenLoad), typeof(CScreenMain), typeof(CScreenNames), typeof(CScreenOptions), + typeof(CScreenOptionsGame), typeof(CScreenOptionsLyrics), typeof(CScreenOptionsRecord), typeof(CScreenOptionsSound), + typeof(CScreenOptionsTheme), typeof(CScreenOptionsVideo), typeof(CScreenOptionsVideoAdjustments), typeof(CScreenParty), + typeof(CScreenPartyDummy), typeof(CScreenProfiles), typeof(CScreenScore), typeof(CScreenSing), typeof(CScreenSong) }; + XmlSerializer serializer = new XmlSerializer(typeof(CMenu), screens); + serializer.Serialize(textWriter, screen); + } foreach (IMenu popup in _PopupScreens) popup.SaveTheme(); diff --git a/Vocaluxe/Screens/CScreenCredits.cs b/Vocaluxe/Screens/CScreenCredits.cs index 7c340a7a..67dcfdf8 100644 --- a/Vocaluxe/Screens/CScreenCredits.cs +++ b/Vocaluxe/Screens/CScreenCredits.cs @@ -106,7 +106,7 @@ namespace Vocaluxe.Screens } } - class CScreenCredits : CMenu + public class CScreenCredits : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenHighscore.cs b/Vocaluxe/Screens/CScreenHighscore.cs index 010a3cce..6f0f5913 100644 --- a/Vocaluxe/Screens/CScreenHighscore.cs +++ b/Vocaluxe/Screens/CScreenHighscore.cs @@ -27,7 +27,7 @@ using VocaluxeLib.Songs; namespace Vocaluxe.Screens { - class CScreenHighscore : CMenu + public class CScreenHighscore : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenLoad.cs b/Vocaluxe/Screens/CScreenLoad.cs index 50c57008..1aa190d3 100644 --- a/Vocaluxe/Screens/CScreenLoad.cs +++ b/Vocaluxe/Screens/CScreenLoad.cs @@ -23,7 +23,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenLoad : CMenu + public class CScreenLoad : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenMain.cs b/Vocaluxe/Screens/CScreenMain.cs index 6cd878bc..9c9c98ae 100644 --- a/Vocaluxe/Screens/CScreenMain.cs +++ b/Vocaluxe/Screens/CScreenMain.cs @@ -22,7 +22,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenMain : CMenu + public class CScreenMain : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs index 945e6731..3a566060 100644 --- a/Vocaluxe/Screens/CScreenNames.cs +++ b/Vocaluxe/Screens/CScreenNames.cs @@ -27,7 +27,7 @@ using VocaluxeLib.Profile; namespace Vocaluxe.Screens { - class CScreenNames : CMenu + public class CScreenNames : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenOptions.cs b/Vocaluxe/Screens/CScreenOptions.cs index 627b6027..12fba76d 100644 --- a/Vocaluxe/Screens/CScreenOptions.cs +++ b/Vocaluxe/Screens/CScreenOptions.cs @@ -22,7 +22,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenOptions : CMenu + public class CScreenOptions : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenOptionsGame.cs b/Vocaluxe/Screens/CScreenOptionsGame.cs index 4ed5c752..aec51f65 100644 --- a/Vocaluxe/Screens/CScreenOptionsGame.cs +++ b/Vocaluxe/Screens/CScreenOptionsGame.cs @@ -22,7 +22,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenOptionsGame : CMenu + public class CScreenOptionsGame : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenOptionsLyrics.cs b/Vocaluxe/Screens/CScreenOptionsLyrics.cs index e2093af4..6a7f6c79 100644 --- a/Vocaluxe/Screens/CScreenOptionsLyrics.cs +++ b/Vocaluxe/Screens/CScreenOptionsLyrics.cs @@ -22,7 +22,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenOptionsLyrics : CMenu + public class CScreenOptionsLyrics : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index 1a658fe5..59044c04 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -25,7 +25,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenOptionsRecord : CMenu + public class CScreenOptionsRecord : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenOptionsSound.cs b/Vocaluxe/Screens/CScreenOptionsSound.cs index 0d711fd0..1976d3ca 100644 --- a/Vocaluxe/Screens/CScreenOptionsSound.cs +++ b/Vocaluxe/Screens/CScreenOptionsSound.cs @@ -22,7 +22,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenOptionsSound : CMenu + public class CScreenOptionsSound : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenOptionsTheme.cs b/Vocaluxe/Screens/CScreenOptionsTheme.cs index a58226a8..e692728b 100644 --- a/Vocaluxe/Screens/CScreenOptionsTheme.cs +++ b/Vocaluxe/Screens/CScreenOptionsTheme.cs @@ -23,7 +23,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenOptionsTheme : CMenu + public class CScreenOptionsTheme : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenOptionsVideo.cs b/Vocaluxe/Screens/CScreenOptionsVideo.cs index a2bf330d..9a6e6a57 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideo.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideo.cs @@ -25,7 +25,7 @@ using VocaluxeLib.Draw; namespace Vocaluxe.Screens { - class CScreenOptionsVideo : CMenu + public class CScreenOptionsVideo : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenOptionsVideoAdjustments.cs b/Vocaluxe/Screens/CScreenOptionsVideoAdjustments.cs index 6c22392b..5759652c 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideoAdjustments.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideoAdjustments.cs @@ -22,7 +22,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenOptionsVideoAdjustments : CMenu + public class CScreenOptionsVideoAdjustments : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenParty.cs b/Vocaluxe/Screens/CScreenParty.cs index ab6d5131..6465b65c 100644 --- a/Vocaluxe/Screens/CScreenParty.cs +++ b/Vocaluxe/Screens/CScreenParty.cs @@ -23,7 +23,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenParty : CMenu + public class CScreenParty : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenProfiles.cs b/Vocaluxe/Screens/CScreenProfiles.cs index c8fdacfb..0835e451 100644 --- a/Vocaluxe/Screens/CScreenProfiles.cs +++ b/Vocaluxe/Screens/CScreenProfiles.cs @@ -35,7 +35,7 @@ namespace Vocaluxe.Screens PlayerName } - class CScreenProfiles : CMenu + public class CScreenProfiles : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenScore.cs b/Vocaluxe/Screens/CScreenScore.cs index bbf4aaf4..a0f7e64d 100644 --- a/Vocaluxe/Screens/CScreenScore.cs +++ b/Vocaluxe/Screens/CScreenScore.cs @@ -28,7 +28,7 @@ using VocaluxeLib.Songs; namespace Vocaluxe.Screens { - class CScreenScore : CMenu + public class CScreenScore : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index ff4416f8..a03e27cd 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -31,7 +31,7 @@ using VocaluxeLib.Songs; namespace Vocaluxe.Screens { - class CScreenSing : CMenu + public class CScreenSing : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index ace7503d..c5d20fff 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -29,7 +29,7 @@ using VocaluxeLib.Songs; namespace Vocaluxe.Screens { - class CScreenSong : CMenu + public class CScreenSong : CMenu { private enum ESongOptionsView { diff --git a/Vocaluxe/Screens/CScreenTest.cs b/Vocaluxe/Screens/CScreenTest.cs index 1d571be9..7ccc303d 100644 --- a/Vocaluxe/Screens/CScreenTest.cs +++ b/Vocaluxe/Screens/CScreenTest.cs @@ -23,7 +23,7 @@ using VocaluxeLib.Menu; namespace Vocaluxe.Screens { - class CScreenTest : CMenu + public class CScreenTest : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index c23507cb..98efc134 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -34,55 +34,251 @@ namespace VocaluxeLib.Menu public float Z; } + [XmlType("Screen")] public abstract class CMenu : IMenu { + [XmlIgnore] private List _Interactions; + [XmlIgnore] private int _Selection; - private string _ThemePath = String.Empty; + [XmlIgnore] + public string ThemePath { get; private set; } + [XmlIgnore] protected int _PartyModeID = -1; + [XmlIgnore] private int _PrevMouseX; + [XmlIgnore] private int _PrevMouseY; + [XmlIgnore] private int _MouseDX; + [XmlIgnore] private int _MouseDY; + [XmlIgnore] protected bool _Active; + [XmlElement("ScreenVersion")] protected abstract int _ScreenVersion { get; } - public string ThemeName { get; private set; } + [XmlAttributeAttribute(AttributeName = "Name")] + public string ThemeName { get; set; } // ReSharper disable MemberCanBePrivate.Global + [XmlIgnore] protected string[] _ThemeBackgrounds; + [XmlIgnore] protected string[] _ThemeStatics; + [XmlIgnore] protected string[] _ThemeTexts; + [XmlIgnore] protected string[] _ThemeButtons; + [XmlIgnore] protected string[] _ThemeSongMenus; + [XmlIgnore] protected string[] _ThemeLyrics; + [XmlIgnore] protected string[] _ThemeSelectSlides; + [XmlIgnore] protected string[] _ThemeSingNotes; + [XmlIgnore] protected string[] _ThemeNameSelections; + [XmlIgnore] protected string[] _ThemeEqualizers; + [XmlIgnore] protected string[] _ThemePlaylists; + [XmlIgnore] protected string[] _ThemeParticleEffects; + [XmlIgnore] protected string[] _ThemeScreenSettings; + [XmlArray("Backgrounds")] + public List ThemeBackgrounds + { + get + { + List list = new List(); + foreach (CBackground el in _Backgrounds) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("Statics")] + public List ThemeStatics + { + get + { + List list = new List(); + foreach (CStatic el in _Statics) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("Texts")] + public List ThemeTexts + { + get + { + List list = new List(); + foreach (CText el in _Texts) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("Buttons")] + public List ThemeButtons + { + get + { + List list = new List(); + foreach (CButton el in _Buttons) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("SongMenus")] + public List ThemeSongMenus + { + get + { + List list = new List(); + foreach (CSongMenu el in _SongMenus) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("Lyrics")] + public List ThemeLyrics + { + get + { + List list = new List(); + foreach (CLyric el in _Lyrics) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("SelectSlides")] + public List ThemeSelectSlides + { + get + { + List list = new List(); + foreach (CSelectSlide el in _SelectSlides) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("SingNotes")] + public List ThemeSingNotes + { + get + { + List list = new List(); + foreach (CSingNotes el in _SingNotes) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("NameSelections")] + public List ThemeNameSelections + { + get + { + List list = new List(); + foreach (CNameSelection el in _NameSelections) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("Equalizers")] + public List ThemeEqualizers + { + get + { + List list = new List(); + foreach (CEqualizer el in _Equalizers) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("Playlists")] + public List ThemePlaylists + { + get + { + List list = new List(); + foreach (CPlaylist el in _Playlists) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("ParticleEffects")] + public List ThemeParticleEffects + { + get + { + List list = new List(); + foreach (CParticleEffect el in _ParticleEffects) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlArray("ScreenSettings")] + public List ThemeScreenSettings + { + get + { + List list = new List(); + foreach (CScreenSetting el in _ScreenSettings) + if (el.ThemeLoaded) + list.Add(el.GetTheme()); + return list; + } + } + [XmlIgnore] protected COrderedDictionaryLite _Buttons { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _Texts { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _Backgrounds { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _Statics { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _SelectSlides { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _SongMenus { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _Lyrics { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _SingNotes { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _NameSelections { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _Equalizers { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _Playlists { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _ParticleEffects { get; private set; } + [XmlIgnore] protected COrderedDictionaryLite _ScreenSettings { get; private set; } // ReSharper restore MemberCanBePrivate.Global + [XmlIgnore] protected SRectF _ScreenArea; + [XmlIgnore] public SRectF ScreenArea { get { return _ScreenArea; } @@ -172,7 +368,7 @@ namespace VocaluxeLib.Menu if (versionCheck && skinIndex != -1) { - _ThemePath = xmlPath; + ThemePath = xmlPath; _LoadThemeBasics(xmlReader, skinIndex); _LoadThemeElement(_ThemeBackgrounds, _AddBackground, xmlReader, skinIndex); @@ -193,11 +389,11 @@ namespace VocaluxeLib.Menu public virtual void SaveTheme() { - if (_ThemePath == "") + if (ThemePath == "") return; - string file = Path.Combine(_ThemePath, ThemeName + ".xml"); + string file = Path.Combine(ThemePath, ThemeName + ".xml"); using (XmlWriter writer = XmlWriter.Create(file, CBase.Config.GetXMLSettings())) { writer.WriteStartDocument(); @@ -270,7 +466,7 @@ namespace VocaluxeLib.Menu } //This is only test-stuff and will be removed later - TextWriter textWriter = new StreamWriter(@Path.Combine(_ThemePath, ThemeName + "_test.xml")); + TextWriter textWriter = new StreamWriter(@Path.Combine(ThemePath, ThemeName + "_test.xml")); //Backgrounds XmlSerializer serializer = new XmlSerializer(typeof(List)); @@ -465,7 +661,7 @@ namespace VocaluxeLib.Menu public virtual void ReloadTheme(string xmlPath) { - if (_ThemePath == "") + if (ThemePath == "") return; UnloadTextures();