using System; using System.Drawing; using System.Xml; namespace VocaluxeLib.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 readonly int _PartyModeID; private SThemeBackground _Theme; private bool _ThemeLoaded; public SColorF Color; public string GetThemeName() { return _Theme.Name; } #region Constructors public CBackground(int PartyModeID) { _PartyModeID = PartyModeID; _ThemeLoaded = false; _Theme = new SThemeBackground(); Color = new SColorF(0f, 0f, 0f, 1f); } #endregion Constructors #region public public bool LoadTheme(string XmlPath, string ElementName, CXMLReader xmlReader, int SkinIndex) { string item = XmlPath + "/" + ElementName; _ThemeLoaded = true; _ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Type", ref _Theme.Type); bool vid = xmlReader.GetValue(item + "/Video", ref _Theme.VideoName, String.Empty); bool tex = xmlReader.GetValue(item + "/Skin", ref _Theme.TextureName, String.Empty); _ThemeLoaded &= vid || tex || _Theme.Type == EBackgroundTypes.None; if (xmlReader.GetValue(item + "/Color", ref _Theme.ColorName, String.Empty)) _ThemeLoaded &= CBase.Theme.GetColor(_Theme.ColorName, SkinIndex, out Color); else { bool success = true; success &= xmlReader.TryGetFloatValue(item + "/R", ref Color.R); success &= xmlReader.TryGetFloatValue(item + "/G", ref Color.G); success &= xmlReader.TryGetFloatValue(item + "/B", ref Color.B); success &= xmlReader.TryGetFloatValue(item + "/A", 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("