From cea276090dd0eff2f4e35491325e8c47844e4375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Tue, 9 Sep 2014 22:04:52 +0200 Subject: [PATCH] Change serialization. It think it's much better now. --- Vocaluxe/Base/CGraphics.cs | 8 +- VocaluxeLib/Menu/CMenu.cs | 380 ++++++++----------------------------- 2 files changed, 82 insertions(+), 306 deletions(-) diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index 68af3244..564bdb22 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -167,13 +167,7 @@ namespace Vocaluxe.Base 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); + screen.SaveTheme(); } foreach (IMenu popup in _PopupScreens) diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index 98efc134..718eca3b 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -28,257 +28,100 @@ using VocaluxeLib.Menu.SongMenu; namespace VocaluxeLib.Menu { + public struct SScreenInformations + { + public string ScreenName; + public int ScreenVersion; + } + [XmlType("Screen")] + public struct STheme + { + [XmlElement("Informations")] + public SScreenInformations ScreenInformations; + [XmlArray("Backgrounds")] + public List ThemeBackgrounds; + [XmlArray("Statics")] + public List ThemeStatics; + [XmlArray("Texts")] + public List ThemeTexts; + [XmlArray("Buttons")] + public List ThemeButtons; + [XmlArray("SongMenus")] + public List ThemeSongMenus; + [XmlArray("Lyrics")] + public List ThemeLyrics; + [XmlArray("SelectSlides")] + public List ThemeSelectSlides; + [XmlArray("SingNotes")] + public List ThemeSingNotes; + [XmlArray("NameSelections")] + public List ThemeNameSelections; + [XmlArray("Equalizers")] + public List ThemeEqualizers; + [XmlArray("Playlists")] + public List ThemePlaylists; + [XmlArray("ParticleEffects")] + public List ThemeParticleEffects; + [XmlArray("ScreenSettings")] + public List ThemeScreenSettings; + } + struct SZSort { public int ID; public float Z; } - [XmlType("Screen")] public abstract class CMenu : IMenu { - [XmlIgnore] private List _Interactions; - [XmlIgnore] private int _Selection; - [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; } - [XmlAttributeAttribute(AttributeName = "Name")] public string ThemeName { get; set; } + public STheme Theme; // 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; } @@ -385,6 +228,22 @@ namespace VocaluxeLib.Menu _LoadThemeElement(_ThemeParticleEffects, _AddParticleEffect, xmlReader, skinIndex); _LoadThemeElement(_ThemeScreenSettings, _AddScreenSetting, xmlReader, skinIndex); } + + Theme.ScreenInformations.ScreenName = ThemeName; + Theme.ScreenInformations.ScreenVersion = _ScreenVersion; + Theme.ThemeBackgrounds = new List(); + Theme.ThemeStatics = new List(); + Theme.ThemeTexts = new List(); + Theme.ThemeButtons = new List(); + Theme.ThemeSongMenus = new List(); + Theme.ThemeLyrics = new List(); + Theme.ThemeSelectSlides = new List(); + Theme.ThemeSingNotes = new List(); + Theme.ThemeNameSelections = new List(); + Theme.ThemeEqualizers = new List(); + Theme.ThemePlaylists = new List(); + Theme.ThemeParticleEffects = new List(); + Theme.ThemeScreenSettings = new List(); } public virtual void SaveTheme() @@ -465,112 +324,35 @@ namespace VocaluxeLib.Menu writer.Flush(); } - //This is only test-stuff and will be removed later + //This is only test-stuff and will be changed later TextWriter textWriter = new StreamWriter(@Path.Combine(ThemePath, ThemeName + "_test.xml")); - //Backgrounds - XmlSerializer serializer = new XmlSerializer(typeof(List)); - List backgroundThemes = new List(); - foreach (CBackground bg in _Backgrounds) - if(bg.ThemeLoaded) - backgroundThemes.Add(bg.GetTheme()); - serializer.Serialize(textWriter, backgroundThemes); + //Have to add theme-stuff manually, later it will be done while de-serialization + foreach(CBackground el in _Backgrounds) + Theme.ThemeBackgrounds.Add(el.GetTheme()); + foreach (CButton el in _Buttons) + Theme.ThemeButtons.Add(el.GetTheme()); + foreach (CEqualizer el in _Equalizers) + Theme.ThemeEqualizers.Add(el.GetTheme()); + foreach (CLyric el in _Lyrics) + Theme.ThemeLyrics.Add(el.GetTheme()); + foreach (CNameSelection el in _NameSelections) + Theme.ThemeNameSelections.Add(el.GetTheme()); + foreach (CParticleEffect el in _ParticleEffects) + Theme.ThemeParticleEffects.Add(el.GetTheme()); + foreach (CPlaylist el in _Playlists) + Theme.ThemePlaylists.Add(el.GetTheme()); + foreach (CScreenSetting el in _ScreenSettings) + Theme.ThemeScreenSettings.Add(el.GetTheme()); + foreach (CSelectSlide el in _SelectSlides) + Theme.ThemeSelectSlides.Add(el.GetTheme()); + foreach (CStatic el in _Statics) + Theme.ThemeStatics.Add(el.GetTheme()); + foreach (CText el in _Texts) + Theme.ThemeTexts.Add(el.GetTheme()); - //Statics - serializer = new XmlSerializer(typeof(List)); - List staticsThemes = new List(); - foreach (CStatic st in _Statics) - if(st.ThemeLoaded) - staticsThemes.Add(st.GetTheme()); - serializer.Serialize(textWriter, staticsThemes); - - //Texts - serializer = new XmlSerializer(typeof(List)); - List textsThemes = new List(); - foreach (CText txt in _Texts) - if(txt.ThemeLoaded) - textsThemes.Add(txt.GetTheme()); - serializer.Serialize(textWriter, textsThemes); - - //Buttons - serializer = new XmlSerializer(typeof(List)); - List buttonsThemes = new List(); - foreach (CButton btn in _Buttons) - if (btn.ThemeLoaded) - buttonsThemes.Add(btn.GetTheme()); - serializer.Serialize(textWriter, buttonsThemes); - - //SelectSlides - serializer = new XmlSerializer(typeof(List)); - List selslidesThemes = new List(); - foreach (CSelectSlide ss in _SelectSlides) - if (ss.ThemeLoaded) - selslidesThemes.Add(ss.GetTheme()); - serializer.Serialize(textWriter, selslidesThemes); - - //SongMenu - serializer = new XmlSerializer(typeof(List)); - List smThemes = new List(); - foreach (CSongMenu sm in _SongMenus) - if (sm.ThemeLoaded) - smThemes.Add(sm.GetTheme()); - serializer.Serialize(textWriter, smThemes); - - //Lyrics - serializer = new XmlSerializer(typeof(List)); - List lyThemes = new List(); - foreach (CLyric ly in _Lyrics) - if (ly.ThemeLoaded) - lyThemes.Add(ly.GetTheme()); - serializer.Serialize(textWriter, lyThemes); - - //Singbars - serializer = new XmlSerializer(typeof(List)); - List snThemes = new List(); - foreach (CSingNotes sn in _SingNotes) - if (sn.ThemeLoaded) - snThemes.Add(sn.GetTheme()); - serializer.Serialize(textWriter, snThemes); - - //NameSelections - serializer = new XmlSerializer(typeof(List)); - List nsThemes = new List(); - foreach (CNameSelection ns in _NameSelections) - if (ns.ThemeLoaded) - nsThemes.Add(ns.GetTheme()); - serializer.Serialize(textWriter, nsThemes); - - //Equalizers - serializer = new XmlSerializer(typeof(List)); - List eqThemes = new List(); - foreach (CEqualizer eq in _Equalizers) - if (eq.ThemeLoaded) - eqThemes.Add(eq.GetTheme()); - serializer.Serialize(textWriter, eqThemes); - - //Playlists - serializer = new XmlSerializer(typeof(List)); - List plThemes = new List(); - foreach (CPlaylist pl in _Playlists) - if (pl.ThemeLoaded) - plThemes.Add(pl.GetTheme()); - serializer.Serialize(textWriter, plThemes); - - //ParticleEffects - serializer = new XmlSerializer(typeof(List)); - List peThemes = new List(); - foreach (CParticleEffect pe in _ParticleEffects) - if (pe.ThemeLoaded) - peThemes.Add(pe.GetTheme()); - serializer.Serialize(textWriter, peThemes); - - //ScreenSettings - serializer = new XmlSerializer(typeof(List)); - List seThemes = new List(); - foreach (CScreenSetting se in _ScreenSettings) - if (se.ThemeLoaded) - seThemes.Add(se.GetTheme()); - serializer.Serialize(textWriter, seThemes); + XmlSerializer serializer = new XmlSerializer(typeof(STheme)); + serializer.Serialize(textWriter, Theme); textWriter.Close(); }