using System; using System.Collections.Generic; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; 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 { public int PlayerNr; public CStatic Avatar; public CText Name; public CTile() { } public CTile(CStatic av, CText tex, int pl) { Avatar = av; Name = tex; PlayerNr = pl; } } private int _PartyModeID; 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(int PartyModeID) { _PartyModeID = PartyModeID; _Theme = new SThemeNameSelection(); _Tiles = new List(); VisibleProfiles = new List(); } public void Init() { PrepareTiles(); PlayerSelector = new CStatic(_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, CXMLReader xmlReader, int SkinIndex) { string item = XmlPath + "/" + ElementName; _ThemeLoaded = true; _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/X", ref Rect.X); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Y", ref Rect.Y); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Z", ref Rect.Z); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/W", ref Rect.W); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/H", ref Rect.H); _ThemeLoaded &= xmlReader.GetValue(item + "/SkinEmptyTile", ref _Theme.TextureEmptyTileName, String.Empty); if (xmlReader.GetValue(item + "/ColorEmptyTile", ref _Theme.ColorEmptyTileName, String.Empty)) { _ThemeLoaded &= CBase.Theme.GetColor(_Theme.ColorEmptyTileName, SkinIndex, ref ColorEmptyTile); } else { _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref ColorEmptyTile.R); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref ColorEmptyTile.G); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref ColorEmptyTile.B); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref ColorEmptyTile.A); } _ThemeLoaded &= xmlReader.GetValue(item + "/SkinTileSelected", ref _Theme.TextureTileSelectedName, String.Empty); _ThemeLoaded &= xmlReader.TryGetIntValue(item + "/Tiles/W", ref _TileW); _ThemeLoaded &= xmlReader.TryGetIntValue(item + "/Tiles/H", ref _TileH); _ThemeLoaded &= xmlReader.TryGetIntValue(item + "/Tiles/NumW", ref _NumW); _ThemeLoaded &= xmlReader.TryGetIntValue(item + "/Tiles/NumH", ref _NumH); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/SpaceW", ref _SpaceW); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/SpaceH", ref _SpaceH); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/Space", ref _Theme.NameSpace); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/H", ref _Theme.NameHeight); _ThemeLoaded &= xmlReader.GetValue(item + "/Tiles/Name/Font", ref _Theme.NameFont, "Normal"); _ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Tiles/Name/Style", ref _Theme.NameStyle); if (xmlReader.GetValue(item + "/Tiles/Name/Color", ref _Theme.NameColorName, String.Empty)) { _ThemeLoaded &= CBase.Theme.GetColor(_Theme.NameColorName, SkinIndex, ref _Theme.NameColor); } else { if (xmlReader.TryGetFloatValue(item + "/Tiles/Name/R", ref _Theme.NameColor.R)) { _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/G", ref _Theme.NameColor.G); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/B", ref _Theme.NameColor.B); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/A", 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("