From b2102b11d910ac6ed1eca2ba53bd3dc2a6f6a5f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Tue, 26 Aug 2014 16:48:30 +0200 Subject: [PATCH] Add serialization for all theme-elements. --- VocaluxeLib/CHelper.cs | 5 + VocaluxeLib/Menu/CBackground.cs | 4 + VocaluxeLib/Menu/CButton.cs | 56 +++++++- VocaluxeLib/Menu/CEqualizer.cs | 57 +++++++- VocaluxeLib/Menu/CLyric.cs | 30 ++++- VocaluxeLib/Menu/CMenu.cs | 94 ++++++++++++- VocaluxeLib/Menu/CNameSelection.cs | 124 +++++++++++++----- VocaluxeLib/Menu/CParticle.cs | 39 +++++- VocaluxeLib/Menu/CPlaylist.cs | 79 ++++++++++- VocaluxeLib/Menu/CScreenSetting.cs | 19 ++- VocaluxeLib/Menu/CSelectSlide.cs | 98 +++++++++++++- VocaluxeLib/Menu/CStatic.cs | 5 + VocaluxeLib/Menu/CText.cs | 60 ++++++++- VocaluxeLib/Menu/SingNotes/CSingNotes.cs | 40 +++++- VocaluxeLib/Menu/SongMenu/CSongMenu.cs | 10 ++ .../Menu/SongMenu/CSongMenuFramework.cs | 78 ++++++++++- VocaluxeLib/Menu/SongMenu/ISongMenu.cs | 3 + 17 files changed, 740 insertions(+), 61 deletions(-) diff --git a/VocaluxeLib/CHelper.cs b/VocaluxeLib/CHelper.cs index 411d39ec..c1c10d5e 100644 --- a/VocaluxeLib/CHelper.cs +++ b/VocaluxeLib/CHelper.cs @@ -302,6 +302,11 @@ namespace VocaluxeLib filename = Path.Combine(path, filename); return filename + ext; } + + public static int Sum(int n) + { + return (n * n + n) / 2; + } } static class CEncoding diff --git a/VocaluxeLib/Menu/CBackground.cs b/VocaluxeLib/Menu/CBackground.cs index ecf6e971..cb353fbe 100644 --- a/VocaluxeLib/Menu/CBackground.cs +++ b/VocaluxeLib/Menu/CBackground.cs @@ -63,6 +63,10 @@ namespace VocaluxeLib.Menu private readonly List _SlideShowTextures = new List(); public SColorF Color; + public bool ThemeLoaded + { + get { return _ThemeLoaded; } + } public string GetThemeName() { diff --git a/VocaluxeLib/Menu/CButton.cs b/VocaluxeLib/Menu/CButton.cs index 1a9a8a49..697f7c18 100644 --- a/VocaluxeLib/Menu/CButton.cs +++ b/VocaluxeLib/Menu/CButton.cs @@ -17,19 +17,36 @@ using System; using System.Xml; +using System.Xml.Serialization; using VocaluxeLib.Draw; namespace VocaluxeLib.Menu { - struct SThemeButton + [XmlType("Button")] + public struct SThemeButton { + [XmlAttributeAttribute(AttributeName = "Name")] public string Name; - public string ColorName; - public string SelColorName; - + [XmlElement("Skin")] public string TextureName; + [XmlElement("SkinSelected")] public string SelTextureName; + public SRectF Rect; + [XmlElement("ColorName")] + public string ColorName; + [XmlElement("Color")] + public SColorF Color; + [XmlElement("SelColorName")] + public string SelColorName; + [XmlElement("SelColor")] + public SColorF SelColor; + [XmlElement("Text")] + public SThemeText Text; + [XmlElement("Reflection")] + public SReflection Reflection; + [XmlElement("SelReflection")] + public SReflection SelReflection; } public class CButton : IMenuElement @@ -86,6 +103,11 @@ namespace VocaluxeLib.Menu return _Theme.Name; } + public bool ThemeLoaded + { + get { return _ThemeLoaded; } + } + public CButton(int partyModeID) { _PartyModeID = partyModeID; @@ -177,22 +199,37 @@ namespace VocaluxeLib.Menu _Reflection = true; _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Space", ref _ReflectionSpace); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Height", ref _ReflectionHeight); + + _Theme.Reflection = new SReflection(true, _ReflectionHeight, _ReflectionSpace); } else + { _Reflection = false; + _Theme.Reflection = new SReflection(false, 0f, 0f); + } if (xmlReader.ItemExists(item + "/SReflection")) { _SelReflection = true; _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SReflection/Space", ref _SelReflectionSpace); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SReflection/Height", ref _SelReflectionHeight); + + _Theme.SelReflection = new SReflection(true, _SelReflectionHeight, _SelReflectionSpace); } else + { _SelReflection = false; + _Theme.SelReflection = new SReflection(false, 0f, 0f); + } if (_ThemeLoaded) { _Theme.Name = elementName; + _Theme.Rect = new SRectF(Rect); + _Theme.Color = new SColorF(Color); + _Theme.SelColor = new SColorF(SelColor); + _Theme.Text = Text.GetTheme(); + LoadTextures(); } return _ThemeLoaded; @@ -352,11 +389,19 @@ namespace VocaluxeLib.Menu LoadTextures(); } + public SThemeButton GetTheme() + { + return _Theme; + } + #region ThemeEdit public void MoveElement(int stepX, int stepY) { Rect.X += stepX; Rect.Y += stepY; + + _Theme.Rect.X += stepX; + _Theme.Rect.Y += stepY; } public void ResizeElement(int stepW, int stepH) @@ -368,6 +413,9 @@ namespace VocaluxeLib.Menu Rect.H += stepH; if (Rect.H <= 0) Rect.H = 1; + + _Theme.Rect.W = Rect.W; + _Theme.Rect.H = Rect.H; } #endregion ThemeEdit } diff --git a/VocaluxeLib/Menu/CEqualizer.cs b/VocaluxeLib/Menu/CEqualizer.cs index 83bb74c0..0809ef85 100644 --- a/VocaluxeLib/Menu/CEqualizer.cs +++ b/VocaluxeLib/Menu/CEqualizer.cs @@ -17,26 +17,46 @@ using System; using System.Xml; +using System.Xml.Serialization; namespace VocaluxeLib.Menu { - enum EEqualizerStyle + public enum EEqualizerStyle { Columns } - struct SThemeEqualizer + [XmlType("Equalizer")] + public struct SThemeEqualizer { + [XmlAttributeAttribute(AttributeName = "Name")] public string Name; - public string ColorName; - public string MaxColorName; + [XmlElement("Skin")] public string TextureName; - public int NumBars; + [XmlElement("Rect")] + public SRectF Rect; + [XmlElement("NumBars")] + public int NumBars; + [XmlElement("Space")] + public float Space; + [XmlElement("Style")] public EEqualizerStyle Style; + [XmlElement("DrawNegative")] public EOffOn DrawNegative; + + [XmlElement("ColorName")] + public string ColorName; + [XmlElement("Color")] + public SColorF Color; + [XmlElement("MaxColorName")] + public string MaxColorName; + [XmlElement("MaxColor")] + public SColorF MaxColor; + [XmlElement("Reflection")] + public SReflection Reflection; } public class CEqualizer : IMenuElement @@ -63,6 +83,11 @@ namespace VocaluxeLib.Menu return _Theme.Name; } + public bool ThemeLoaded + { + get { return _ThemeLoaded; } + } + private float[] _Bars; private int _MaxBar; private float _MaxVolume; @@ -133,13 +158,23 @@ namespace VocaluxeLib.Menu Reflection = true; _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Space", ref ReflectionSpace); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Height", ref ReflectionHeight); + + _Theme.Reflection = new SReflection(true, ReflectionHeight, ReflectionSpace); } else + { Reflection = false; + _Theme.Reflection = new SReflection(false, 0f, 0f); + } if (_ThemeLoaded) { _Theme.Name = elementName; + _Theme.Space = Space; + _Theme.Color = new SColorF(Color); + _Theme.MaxColor = new SColorF(MaxColor); + _Theme.Rect = Rect; + _Bars = new float[_Theme.NumBars]; for (int i = 0; i < _Bars.Length; i++) _Bars[i] = 0f; @@ -299,11 +334,19 @@ namespace VocaluxeLib.Menu LoadTextures(); } + public SThemeEqualizer GetTheme() + { + return _Theme; + } + #region ThemeEdit public void MoveElement(int stepX, int stepY) { Rect.X += stepX; Rect.Y += stepY; + + _Theme.Rect.X += stepX; + _Theme.Rect.Y += stepY; } public void ResizeElement(int stepW, int stepH) @@ -312,9 +355,13 @@ namespace VocaluxeLib.Menu if (Rect.W <= 0) Rect.W = 1; + _Theme.Rect.W = Rect.W; + Rect.H += stepH; if (Rect.H <= 0) Rect.H = 1; + + _Theme.Rect.H = Rect.H; } #endregion ThemeEdit } diff --git a/VocaluxeLib/Menu/CLyric.cs b/VocaluxeLib/Menu/CLyric.cs index 68b26136..97a54f5d 100644 --- a/VocaluxeLib/Menu/CLyric.cs +++ b/VocaluxeLib/Menu/CLyric.cs @@ -17,16 +17,28 @@ using System; using System.Xml; +using System.Xml.Serialization; using VocaluxeLib.Songs; namespace VocaluxeLib.Menu { - struct SThemeLyrics + [XmlType("Lyric")] + public struct SThemeLyrics { + [XmlAttributeAttribute(AttributeName = "Name")] public string Name; + [XmlElement("Rect")] + public SRectF Rect; + + [XmlElement("ColorName")] public string ColorName; + [XmlElement("Color")] + public SColorF Color; + [XmlElement("SColorName")] public string SelColorName; + [XmlElement("SColor")] + public SColorF SColor; } public class CLyric : IMenuElement @@ -56,6 +68,11 @@ namespace VocaluxeLib.Menu return _Theme.Name; } + public bool ThemeLoaded + { + get { return _ThemeLoaded; } + } + public SRectF Rect { get { return new SRectF(_X, _Y, _MaxW, _H, _Z); } @@ -141,6 +158,10 @@ namespace VocaluxeLib.Menu if (_ThemeLoaded) { _Theme.Name = elementName; + _Theme.Color = new SColorF(_Color); + _Theme.SColor = new SColorF(_ColorProcessed); + _Theme.Rect = new SRectF(Rect); + LoadTextures(); _Text = new CText(_X, _Y, _Z, _H, _MaxW, EAlignment.Left, EStyle.Bold, "Normal", _Color, String.Empty); } @@ -480,6 +501,11 @@ namespace VocaluxeLib.Menu LoadTextures(); } + public SThemeLyrics GetTheme() + { + return _Theme; + } + #region ThemeEdit public void MoveElement(int stepX, int stepY) { @@ -487,6 +513,7 @@ namespace VocaluxeLib.Menu rect.X += stepX; rect.Y += stepY; Rect = rect; + _Theme.Rect = rect; } public void ResizeElement(int stepW, int stepH) @@ -501,6 +528,7 @@ namespace VocaluxeLib.Menu rect.H = 1; Rect = rect; + _Theme.Rect = rect; } #endregion ThemeEdit } diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index 5088f6ae..c23507cb 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -276,16 +276,106 @@ namespace VocaluxeLib.Menu XmlSerializer serializer = new XmlSerializer(typeof(List)); List backgroundThemes = new List(); foreach (CBackground bg in _Backgrounds) - backgroundThemes.Add(bg.GetTheme()); + if(bg.ThemeLoaded) + backgroundThemes.Add(bg.GetTheme()); serializer.Serialize(textWriter, backgroundThemes); //Statics serializer = new XmlSerializer(typeof(List)); List staticsThemes = new List(); foreach (CStatic st in _Statics) - staticsThemes.Add(st.GetTheme()); + 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); + textWriter.Close(); } diff --git a/VocaluxeLib/Menu/CNameSelection.cs b/VocaluxeLib/Menu/CNameSelection.cs index 3fd10b95..3eab70a6 100644 --- a/VocaluxeLib/Menu/CNameSelection.cs +++ b/VocaluxeLib/Menu/CNameSelection.cs @@ -19,23 +19,59 @@ using System; using System.Collections.Generic; using System.Windows.Forms; using System.Xml; +using System.Xml.Serialization; using VocaluxeLib.Draw; using VocaluxeLib.Profile; namespace VocaluxeLib.Menu { - struct SThemeNameSelection + [XmlType("NameSelection")] + public struct SThemeNameSelection { + [XmlAttributeAttribute(AttributeName = "Name")] public string Name; + [XmlElement("Rect")] + public SRectF Rect; + [XmlElement("SkinEmptyTile")] public string TextureEmptyTileName; + [XmlElement("ColorNameEmptyTile")] public string ColorEmptyTileName; + [XmlElement("ColorEmptyTile")] + public SColorF ColorEmptyTile; + [XmlElement("SkinTileSelected")] public string TextureTileSelectedName; - public float NameSpace; - public float NameHeight; - public string NameFont; - public EStyle NameStyle; - public SColorF NameColor; - public string NameColorName; + [XmlElement("Tiles")] + public SThemeNameSelectionTiles Tiles; + } + + public struct SThemeNameSelectionTiles + { + [XmlElement("W")] + public int W; + [XmlElement("H")] + public int H; + [XmlElement("NumW")] + public int NumW; + [XmlElement("NumH")] + public int NumH; + [XmlElement("Name")] + public SThemeNameSelectionName Name; + } + + public struct SThemeNameSelectionName + { + [XmlElement("Space")] + public float Space; + [XmlElement("H")] + public float Height; + [XmlElement("Font")] + public string Font; + [XmlElement("Style")] + public EStyle Style; + [XmlElement("ColorName")] + public string ColorName; + [XmlElement("Color")] + public SColorF Color; } public class CNameSelection : IMenuElement @@ -63,6 +99,11 @@ namespace VocaluxeLib.Menu return _Theme.Name; } + public bool ThemeLoaded + { + get { return _ThemeLoaded; } + } + public bool Selected; public bool Visible = true; @@ -102,6 +143,8 @@ namespace VocaluxeLib.Menu { _PartyModeID = partyModeID; _Theme = new SThemeNameSelection(); + _Theme.Tiles = new SThemeNameSelectionTiles(); + _Theme.Tiles.Name = new SThemeNameSelectionName(); _Tiles = new List(); _VisibleProfiles = new List(); @@ -155,19 +198,19 @@ namespace VocaluxeLib.Menu _ThemeLoaded &= xmlReader.TryGetIntValue(item + "/Tiles/NumH", ref _NumH); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/SpaceW", ref _SpaceW); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/SpaceH", ref _SpaceH); - _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/Space", ref _Theme.NameSpace); - _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/H", ref _Theme.NameHeight); - _ThemeLoaded &= xmlReader.GetValue(item + "/Tiles/Name/Font", out _Theme.NameFont, "Normal"); - _ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Tiles/Name/Style", ref _Theme.NameStyle); - if (xmlReader.GetValue(item + "/Tiles/Name/Color", out _Theme.NameColorName, String.Empty)) - _ThemeLoaded &= CBase.Theme.GetColor(_Theme.NameColorName, skinIndex, out _Theme.NameColor); + _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/Space", ref _Theme.Tiles.Name.Space); + _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/H", ref _Theme.Tiles.Name.Height); + _ThemeLoaded &= xmlReader.GetValue(item + "/Tiles/Name/Font", out _Theme.Tiles.Name.Font, "Normal"); + _ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Tiles/Name/Style", ref _Theme.Tiles.Name.Style); + if (xmlReader.GetValue(item + "/Tiles/Name/Color", out _Theme.Tiles.Name.ColorName, String.Empty)) + _ThemeLoaded &= CBase.Theme.GetColor(_Theme.Tiles.Name.ColorName, skinIndex, out _Theme.Tiles.Name.Color); else { - if (xmlReader.TryGetFloatValue(item + "/Tiles/Name/R", ref _Theme.NameColor.R)) + if (xmlReader.TryGetFloatValue(item + "/Tiles/Name/R", ref _Theme.Tiles.Name.Color.R)) { - _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/G", ref _Theme.NameColor.G); - _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/B", ref _Theme.NameColor.B); - _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/A", ref _Theme.NameColor.A); + _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/G", ref _Theme.Tiles.Name.Color.G); + _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/B", ref _Theme.Tiles.Name.Color.B); + _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/A", ref _Theme.Tiles.Name.Color.A); } } @@ -175,6 +218,14 @@ namespace VocaluxeLib.Menu if (_ThemeLoaded) { _Theme.Name = elementName; + + _Theme.Rect = new SRectF(Rect); + _Theme.Tiles.H = _TileH; + _Theme.Tiles.W = _TileW; + _Theme.Tiles.NumH = _NumH; + _Theme.Tiles.NumW = _NumW; + _Theme.ColorEmptyTile = new SColorF(ColorEmptyTile); + LoadTextures(); } return _ThemeLoaded; @@ -225,23 +276,23 @@ namespace VocaluxeLib.Menu writer.WriteComment(": Options for player-name"); writer.WriteStartElement("Name"); writer.WriteComment(": Space between name and tile"); - writer.WriteElementString("Space", _Theme.NameSpace.ToString("#0.0")); + writer.WriteElementString("Space", _Theme.Tiles.Name.Space.ToString("#0.0")); writer.WriteComment(": Text font name"); - writer.WriteElementString("Font", _Theme.NameFont); + writer.WriteElementString("Font", _Theme.Tiles.Name.Font); writer.WriteComment(": Text color from ColorScheme (high priority)"); - if (!String.IsNullOrEmpty(_Theme.NameColorName)) - writer.WriteElementString("Color", _Theme.NameColorName); + if (!String.IsNullOrEmpty(_Theme.Tiles.Name.ColorName)) + writer.WriteElementString("Color", _Theme.Tiles.Name.ColorName); else { - writer.WriteElementString("R", _Theme.NameColor.R.ToString("#0.00")); - writer.WriteElementString("G", _Theme.NameColor.G.ToString("#0.00")); - writer.WriteElementString("B", _Theme.NameColor.B.ToString("#0.00")); - writer.WriteElementString("A", _Theme.NameColor.A.ToString("#0.00")); + writer.WriteElementString("R", _Theme.Tiles.Name.Color.R.ToString("#0.00")); + writer.WriteElementString("G", _Theme.Tiles.Name.Color.G.ToString("#0.00")); + writer.WriteElementString("B", _Theme.Tiles.Name.Color.B.ToString("#0.00")); + writer.WriteElementString("A", _Theme.Tiles.Name.Color.A.ToString("#0.00")); } writer.WriteComment("