From 2484c52e08fb3770da54efc715dc0a79bf3fb6b7 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Fri, 27 Jul 2012 12:21:39 +0200 Subject: [PATCH] Move Equalizer-Element to Screen-Files. Still some work left. --- Vocaluxe/Menu/CEqualizer.cs | 324 +++++++++++++++++++++++ Vocaluxe/Menu/CInteraction.cs | 3 +- Vocaluxe/Menu/CMenu.cs | 102 ++++++- Vocaluxe/Screens/CScreenOptionsRecord.cs | 114 +------- Vocaluxe/Vocaluxe.csproj | 1 + 5 files changed, 440 insertions(+), 104 deletions(-) create mode 100644 Vocaluxe/Menu/CEqualizer.cs diff --git a/Vocaluxe/Menu/CEqualizer.cs b/Vocaluxe/Menu/CEqualizer.cs new file mode 100644 index 00000000..a33641b4 --- /dev/null +++ b/Vocaluxe/Menu/CEqualizer.cs @@ -0,0 +1,324 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Text; +using System.Xml; +using System.Xml.XPath; + +using Vocaluxe.Base; +using Vocaluxe.Lib.Draw; + +namespace Vocaluxe.Menu +{ + enum EEqualizerStyle + { + Bars, + Collums + } + + struct SThemeEqualizer + { + public string Name; + + public string ColorName; + public string MaxColorName; + public string TextureName; + + public int NumBars; + + public EEqualizerStyle Style; + public EOffOn DrawNegative; + } + + class CEqualizer : IMenuElement + { + private SThemeEqualizer _Theme; + private bool _ThemeLoaded; + + public SRectF Rect; + public SColorF Color; + public SColorF MaxColor; + public float Space; + + public bool Reflection; + public float ReflectionSpace; + public float ReflectionHeight; + + public bool Selected; + public bool Visible; + public bool ScreenHandles; + + private float[] _Bars; + + public CEqualizer() + { + _Theme = new SThemeEqualizer(); + _ThemeLoaded = false; + + Rect = new SRectF(); + Color = new SColorF(); + MaxColor = new SColorF(); + + Selected = false; + Visible = true; + ScreenHandles = false; + + Reflection = false; + ReflectionSpace = 0f; + ReflectionHeight = 0f; + } + + public bool LoadTheme(string XmlPath, string ElementName, XPathNavigator navigator, int SkinIndex) + { + string item = XmlPath + "/" + ElementName; + _ThemeLoaded = true; + + _ThemeLoaded &= CHelper.GetValueFromXML(item + "/Skin", navigator, ref _Theme.TextureName, String.Empty); + + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/X", navigator, ref Rect.X); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Y", navigator, ref Rect.Y); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Z", navigator, ref Rect.Z); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/W", navigator, ref Rect.W); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/H", navigator, ref Rect.H); + + _ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/NumBars", navigator, ref _Theme.NumBars); + + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Space", navigator, ref Space); + + _ThemeLoaded &= CHelper.TryGetEnumValueFromXML(item + "/Style", navigator, ref _Theme.Style); + + _ThemeLoaded &= CHelper.TryGetEnumValueFromXML(item + "/DrawNegative", navigator, ref _Theme.DrawNegative); + + if (CHelper.GetValueFromXML(item + "/Color", navigator, ref _Theme.ColorName, String.Empty)) + { + _ThemeLoaded &= CTheme.GetColor(_Theme.ColorName, SkinIndex, ref Color); + } + else + { + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/R", navigator, ref Color.R); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/G", navigator, ref Color.G); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/B", navigator, ref Color.B); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/A", navigator, ref Color.A); + } + + if (CHelper.GetValueFromXML(item + "/MaxColor", navigator, ref _Theme.MaxColorName, String.Empty)) + { + _ThemeLoaded &= CTheme.GetColor(_Theme.ColorName, SkinIndex, ref Color); + } + else + { + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/MaxR", navigator, ref MaxColor.R); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/MaxG", navigator, ref MaxColor.G); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/MaxB", navigator, ref MaxColor.B); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/MaxA", navigator, ref MaxColor.A); + } + + //Reflection + if (CHelper.ItemExistsInXML(item + "/Reflection", navigator)) + { + Reflection = true; + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Reflection/Space", navigator, ref ReflectionSpace); + _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Reflection/Height", navigator, ref ReflectionHeight); + } + else + Reflection = false; + + if (_ThemeLoaded) + { + _Theme.Name = ElementName; + _Bars = new float[_Theme.NumBars]; + LoadTextures(); + } + return _ThemeLoaded; + } + + public bool SaveTheme(XmlWriter writer) + { + if (_ThemeLoaded) + { + writer.WriteStartElement(_Theme.Name); + + writer.WriteComment(": Texture name"); + writer.WriteElementString("Skin", _Theme.TextureName); + + writer.WriteComment(", , , , : Equalizer position, width and height"); + writer.WriteElementString("X", Rect.X.ToString("#0")); + writer.WriteElementString("Y", Rect.Y.ToString("#0")); + writer.WriteElementString("Z", Rect.Z.ToString("#0.00")); + writer.WriteElementString("W", Rect.W.ToString("#0")); + writer.WriteElementString("H", Rect.H.ToString("#0")); + + writer.WriteComment(": Number of equalizer-elements."); + writer.WriteElementString("NumBars", _Theme.NumBars.ToString("#0")); + writer.WriteComment(": Space between equalizer-elements."); + writer.WriteElementString("Space", Space.ToString("#0.00")); + writer.WriteComment("