using System; using System.Collections.Generic; using System.Drawing; using System.Text; using System.Xml; using System.Xml.XPath; using System.Windows.Forms; namespace Vocaluxe.Menu { struct SThemeNameSelection { public string Name; public string TextureEmptyTileName; public string ColorEmptyTileName; public string TextureTileSelectedName; public float NameSpace; public float NameHeight; public string NameFont; public EStyle NameStyle; public SColorF NameColor; public string NameColorName; } public class CNameSelection : IMenuElement { class CTile { private Basic _Base; public int PlayerNr; public CStatic Avatar; public CText Name; public CTile(Basic Base) { _Base = Base; } public CTile(CStatic av, CText tex, int pl) { Avatar = av; Name = tex; PlayerNr = pl; } } private int _PartyModeID; private Basic _Base; private SThemeNameSelection _Theme; private bool _ThemeLoaded; public string GetThemeName() { return _Theme.Name; } public bool Selected = false; public bool Visible = true; public SRectF Rect; private List _Tiles; private STexture _TextureEmptyTile; private STexture _TextureTileSelected; public SColorF ColorEmptyTile; private int _NumW; private int _NumH; private float _SpaceW; private float _SpaceH; private int _TileW; private int _TileH; public int _Offset = 0; private int _actualSelection = -1; public int Selection = -1; int _player = -1; private List VisibleProfiles; private CStatic PlayerSelector; public CNameSelection(Basic Base, int PartyModeID) { _PartyModeID = PartyModeID; _Base = Base; _Theme = new SThemeNameSelection(); _Tiles = new List(); VisibleProfiles = new List(); } public void Init() { PrepareTiles(); PlayerSelector = new CStatic(_Base, _PartyModeID); PlayerSelector.Texture = _TextureTileSelected; PlayerSelector.Rect = new SRectF(0, 0, (_TileW + 6), (_TileH + 6), (Rect.Z - 0.5f)); PlayerSelector.Visible = false; UpdateVisibleProfiles(); UpdateList(0); } public bool LoadTheme(string XmlPath, string ElementName, XPathNavigator navigator, int SkinIndex) { string item = XmlPath + "/" + ElementName; _ThemeLoaded = true; _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.GetValueFromXML(item + "/SkinEmptyTile", navigator, ref _Theme.TextureEmptyTileName, String.Empty); if (CHelper.GetValueFromXML(item + "/ColorEmptyTile", navigator, ref _Theme.ColorEmptyTileName, String.Empty)) { _ThemeLoaded &= _Base.Theme.GetColor(_Theme.ColorEmptyTileName, SkinIndex, ref ColorEmptyTile); } else { _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/R", navigator, ref ColorEmptyTile.R); _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/G", navigator, ref ColorEmptyTile.G); _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/B", navigator, ref ColorEmptyTile.B); _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/A", navigator, ref ColorEmptyTile.A); } _ThemeLoaded &= CHelper.GetValueFromXML(item + "/SkinTileSelected", navigator, ref _Theme.TextureTileSelectedName, String.Empty); _ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/Tiles/W", navigator, ref _TileW); _ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/Tiles/H", navigator, ref _TileH); _ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/Tiles/NumW", navigator, ref _NumW); _ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/Tiles/NumH", navigator, ref _NumH); _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/SpaceW", navigator, ref _SpaceW); _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/SpaceH", navigator, ref _SpaceH); _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/Space", navigator, ref _Theme.NameSpace); _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/H", navigator, ref _Theme.NameHeight); _ThemeLoaded &= CHelper.GetValueFromXML(item + "/Tiles/Name/Font", navigator, ref _Theme.NameFont, "Normal"); _ThemeLoaded &= CHelper.TryGetEnumValueFromXML(item + "/Tiles/Name/Style", navigator, ref _Theme.NameStyle); if (CHelper.GetValueFromXML(item + "/Tiles/Name/Color", navigator, ref _Theme.NameColorName, String.Empty)) { _ThemeLoaded &= _Base.Theme.GetColor(_Theme.NameColorName, SkinIndex, ref _Theme.NameColor); } else { if (CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/R", navigator, ref _Theme.NameColor.R)) { _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/G", navigator, ref _Theme.NameColor.G); _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/B", navigator, ref _Theme.NameColor.B); _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/A", navigator, ref _Theme.NameColor.A); } } if (_ThemeLoaded) { _Theme.Name = ElementName; LoadTextures(); } return _ThemeLoaded; } public bool SaveTheme(XmlWriter writer) { if (_ThemeLoaded) { writer.WriteStartElement(_Theme.Name); writer.WriteComment(", , , , : NameSelection 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(": Texture name"); writer.WriteElementString("SkinEmptyTile", _Theme.TextureEmptyTileName); writer.WriteComment(": Static color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); if (_Theme.ColorEmptyTileName != String.Empty) { writer.WriteElementString("ColorEmptyTile", _Theme.ColorEmptyTileName); } else { writer.WriteElementString("R", ColorEmptyTile.R.ToString("#0.00")); writer.WriteElementString("G", ColorEmptyTile.G.ToString("#0.00")); writer.WriteElementString("B", ColorEmptyTile.B.ToString("#0.00")); writer.WriteElementString("A", ColorEmptyTile.A.ToString("#0.00")); } writer.WriteComment(": Texture name"); writer.WriteElementString("SkinTileSelected", _Theme.TextureTileSelectedName); writer.WriteComment(": Options for tiles"); writer.WriteStartElement("Tiles"); writer.WriteComment(", : Width and height of tile"); writer.WriteElementString("W", _TileW.ToString()); writer.WriteElementString("H", _TileH.ToString()); writer.WriteComment(", : Number of tiles"); writer.WriteElementString("NumW", _NumW.ToString()); writer.WriteElementString("NumH", _NumH.ToString()); writer.WriteComment(", : Space between tiles"); writer.WriteElementString("SpaceW", _SpaceW.ToString("#0.00")); writer.WriteElementString("SpaceH", _SpaceH.ToString("#0.00")); 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.WriteComment(": Text font name"); writer.WriteElementString("Font", _Theme.NameFont); writer.WriteComment(": Text color from ColorScheme (high priority)"); if (_Theme.NameColorName != String.Empty) { writer.WriteElementString("Color", _Theme.NameColorName); } 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.WriteComment("