using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Text; using System.Xml; using System.Xml.XPath; namespace Vocaluxe.Menu { public enum EBackgroundTypes { None, Color, Texture, Video } struct SThemeBackground { public string Name; public EBackgroundTypes Type; public string VideoName; public string TextureName; public string ColorName; } public class CBackground : IMenuElement { private int _PartyModeID; private Basic _Base; private SThemeBackground _Theme; private bool _ThemeLoaded; public SColorF Color; public string GetThemeName() { return _Theme.Name; } #region Constructors public CBackground(Basic Base, int PartyModeID) { _PartyModeID = PartyModeID; _Base = Base; _ThemeLoaded = false; _Theme = new SThemeBackground(); Color = new SColorF(0f, 0f, 0f, 1f); } #endregion Constructors #region public public bool LoadTheme(string XmlPath, string ElementName, XPathNavigator navigator, int SkinIndex) { string item = XmlPath + "/" + ElementName; _ThemeLoaded = true; _ThemeLoaded &= CHelper.TryGetEnumValueFromXML(item + "/Type", navigator, ref _Theme.Type); bool vid = CHelper.GetValueFromXML(item + "/Video", navigator, ref _Theme.VideoName, String.Empty); bool tex = CHelper.GetValueFromXML(item + "/Skin", navigator, ref _Theme.TextureName, String.Empty); _ThemeLoaded &= vid || tex || _Theme.Type == EBackgroundTypes.None; if (CHelper.GetValueFromXML(item + "/Color", navigator, ref _Theme.ColorName, String.Empty)) { _ThemeLoaded &= _Base.Theme.GetColor(_Theme.ColorName, SkinIndex, ref Color); } else { bool success = true; success &= CHelper.TryGetFloatValueFromXML(item + "/R", navigator, ref Color.R); success &= CHelper.TryGetFloatValueFromXML(item + "/G", navigator, ref Color.G); success &= CHelper.TryGetFloatValueFromXML(item + "/B", navigator, ref Color.B); success &= CHelper.TryGetFloatValueFromXML(item + "/A", navigator, ref Color.A); if (_Theme.Type != EBackgroundTypes.None) _ThemeLoaded &= success; } if (_ThemeLoaded) { _Theme.Name = ElementName; LoadTextures(); } return _ThemeLoaded; } public bool SaveTheme(XmlWriter writer) { if (_ThemeLoaded) { writer.WriteStartElement(_Theme.Name); writer.WriteComment(": Background type: " + CHelper.ListStrings(Enum.GetNames(typeof(EBackgroundTypes)))); writer.WriteElementString("Type", Enum.GetName(typeof(EBackgroundTypes), _Theme.Type)); writer.WriteComment("