diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index af47ea00..0e3ccf2e 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -39,6 +39,7 @@ namespace Vocaluxe.Menu private List _Equalizers; private List _Playlists; private List _ParticleEffects; + private List _ScreenSettings; private Hashtable _htBackgrounds; private Hashtable _htStatics; @@ -52,6 +53,7 @@ namespace Vocaluxe.Menu private Hashtable _htEqualizers; private Hashtable _htPlaylists; private Hashtable _htParticleEffects; + private Hashtable _htScreenSettings; private int _PrevMouseX; @@ -76,6 +78,7 @@ namespace Vocaluxe.Menu protected string[] _ThemeEqualizers; protected string[] _ThemePlaylists; protected string[] _ThemeParticleEffects; + protected string[] _ThemeScreenSettings; protected SRectF _ScreenArea; protected Basic _Base; @@ -122,6 +125,7 @@ namespace Vocaluxe.Menu _Equalizers = new List(); _Playlists = new List(); _ParticleEffects = new List(); + _ScreenSettings = new List(); _htBackgrounds = new Hashtable(); _htStatics = new Hashtable(); @@ -135,6 +139,7 @@ namespace Vocaluxe.Menu _htEqualizers = new Hashtable(); _htPlaylists = new Hashtable(); _htParticleEffects = new Hashtable(); + _htScreenSettings = new Hashtable(); _PrevMouseX = 0; _PrevMouseY = 0; @@ -158,6 +163,7 @@ namespace Vocaluxe.Menu _ThemeEqualizers = null; _ThemePlaylists = null; _ThemeParticleEffects = null; + _ThemeScreenSettings = null; } protected void FadeTo(EScreens NextScreen) @@ -394,6 +400,22 @@ namespace Vocaluxe.Menu } } } + + if (_ThemeScreenSettings != null) + { + for (int i = 0; i < _ThemeScreenSettings.Length; i++) + { + CParticleEffect pe = new CParticleEffect(_Base, _PartyModeID); + if (pe.LoadTheme("//root/" + _ThemeName, _ThemeScreenSettings[i], navigator, SkinIndex)) + { + _htScreenSettings.Add(_ThemeScreenSettings[i], AddParticleEffect(pe)); + } + else + { + _Base.Log.LogError("Can't load ThemeSetting \"" + _ThemeScreenSettings[i] + "\" in screen " + _ThemeName); + } + } + } } else { @@ -490,6 +512,12 @@ namespace Vocaluxe.Menu _ParticleEffects[i].SaveTheme(writer); } + //ScreenSettings + for (int i = 0; i < _ScreenSettings.Count; i++) + { + _ScreenSettings[i].SaveTheme(writer); + } + writer.WriteEndElement(); // End of File @@ -561,6 +589,11 @@ namespace Vocaluxe.Menu { pe.ReloadTextures(); } + + foreach (CScreenSetting se in _ScreenSettings) + { + se.ReloadTextures(); + } } public virtual void UnloadTextures() @@ -623,6 +656,11 @@ namespace Vocaluxe.Menu { pe.UnloadTextures(); } + + foreach (CScreenSetting se in _ScreenSettings) + { + se.UnloadTextures(); + } } public virtual void ReloadTheme() @@ -696,6 +734,11 @@ namespace Vocaluxe.Menu { return _ParticleEffects; } + + public List GetScreenSettings() + { + return _ScreenSettings; + } #endregion GetLists #region ElementHandler @@ -888,6 +931,14 @@ namespace Vocaluxe.Menu return _ParticleEffects.ToArray(); } } + + public CScreenSetting[] ScreenSettings + { + get + { + return _ScreenSettings.ToArray(); + } + } #endregion Get Arrays #region Hashtables @@ -1046,6 +1097,19 @@ namespace Vocaluxe.Menu throw; } } + + public int htScreenSettings(string key) + { + try + { + return (int)_htScreenSettings[key]; + } + catch (Exception) + { + _Base.Log.LogError("Can't find ScreenSetting Element \"" + key + "\" in Screen " + _ThemeName); + throw; + } + } #endregion Hashtables #endregion ElementHandler diff --git a/VocaluxeLib/Menu/CScreenSetting.cs b/VocaluxeLib/Menu/CScreenSetting.cs new file mode 100644 index 00000000..cbea37db --- /dev/null +++ b/VocaluxeLib/Menu/CScreenSetting.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Text; +using System.Xml; +using System.Xml.XPath; + +namespace Vocaluxe.Menu +{ + enum ESettingType + { + Int, + String, + Color, + Texture + } + + struct SScreenSetting + { + public string Name; + public string Value; + public ESettingType Type; + } + + public class CScreenSetting : IMenuElement + { + private int _PartyModeID; + private Basic _Base; + + private SScreenSetting _Theme; + private bool _ThemeLoaded; + + public string GetThemeName() + { + return _Theme.Name; + } + + public CScreenSetting(Basic Base, int PartyModeID) + { + _PartyModeID = PartyModeID; + _Base = Base; + _Theme = new SScreenSetting(); + _ThemeLoaded = false; + } + + public CScreenSetting(CScreenSetting ts) + { + _PartyModeID = ts._PartyModeID; + _Base = ts._Base; + _Theme = ts._Theme; + _ThemeLoaded = ts._ThemeLoaded; + } + + public bool LoadTheme(string XmlPath, string ElementName, XPathNavigator navigator, int SkinIndex) + { + string item = XmlPath + "/" + ElementName; + _ThemeLoaded = true; + + _ThemeLoaded &= CHelper.GetValueFromXML(item + "/Value", navigator, ref _Theme.Value, String.Empty); + _ThemeLoaded &= CHelper.TryGetEnumValueFromXML(item + "/Type", navigator, ref _Theme.Type); + + if (_ThemeLoaded) + { + _Theme.Name = ElementName; + } + return _ThemeLoaded; + } + + public bool SaveTheme(XmlWriter writer) + { + if (_ThemeLoaded) + { + writer.WriteStartElement(_Theme.Name); + + writer.WriteComment(": Type of theme-setting-value: "+ CHelper.ListStrings(Enum.GetNames(typeof(ESettingType)))); + writer.WriteElementString("Type", Enum.GetName(typeof(ESettingType), _Theme.Type)); + writer.WriteComment(": Value of theme-setting"); + writer.WriteElementString("Value", _Theme.Value); + writer.WriteEndElement(); + return true; + } + return false; + } + + public object GetValue() + { + switch (_Theme.Type) + { + case ESettingType.Int: + return GetIntValue(_Theme.Value); + + case ESettingType.String: + return _Theme.Value; + + case ESettingType.Color: + return GetColorValue(_Theme.Value); + + case ESettingType.Texture: + return GetTextureValue(_Theme.Value); + } + + return null; + } + + public void UnloadTextures() + { + } + + public void LoadTextures() + { + } + + public void ReloadTextures() + { + } + + #region Private + private int GetIntValue(string _string) + { + try + { + return Convert.ToInt32(_string); + } + catch (Exception) + { + return -1; + } + } + + private STexture GetTextureValue(string _string) + { + return _Base.Theme.GetSkinTexture(_string); + } + + private SColorF GetColorValue(string _string) + { + return _Base.Theme.GetColor(_string); + } + #endregion Private + + #region ThemeEdit + public void MoveElement(int stepX, int stepY) + { + } + + public void ResizeElement(int stepW, int stepH) + { + } + #endregion ThemeEdit + } +} diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj index 4867bf3b..2e8963d1 100644 --- a/VocaluxeLib/VocaluxeLib.csproj +++ b/VocaluxeLib/VocaluxeLib.csproj @@ -125,6 +125,7 @@ +