public TreeView() : base(GearsetSettings.Instance.TreeViewConfig) { Config.Cleared += Config_Cleared; Config.Filter = String.Empty; _root = new TreeViewNode("root"); #if XBOX this.openedTexture = GearsetResources.Content.Load<Texture2D>("close_Xbox360"); this.closedTexture = GearsetResources.Content.Load<Texture2D>("open_Xbox360"); #elif WINDOWS_PHONE this.openedTexture = GearsetResources.Content.Load<Texture2D>("close_wp"); this.closedTexture = GearsetResources.Content.Load<Texture2D>("open_wp"); #else _openedTexture = GearsetResources.Content.Load<Texture2D>("close"); _closedTexture = GearsetResources.Content.Load<Texture2D>("open"); #endif _position = new Vector2(5, 20); }
/// <summary> /// Sets the value of a specified key, if the key is not present /// in the tree, then is added. /// </summary> /// <param name="key"></param> public void Set(String key, Object value) { var foundKey = false; var currentNode = _root; var remainingName = key; while (!foundKey) { _iterationCount++; String subName; var foundSubKey = false; var dotIndex = remainingName.IndexOf('.'); if (dotIndex < 0 || dotIndex >= remainingName.Length) { subName = remainingName; remainingName = ""; foundKey = true; } else { subName = remainingName.Remove(dotIndex, remainingName.Length - dotIndex); remainingName = remainingName.Substring(subName.Length + 1); } foreach (var node in currentNode.Nodes) { if (node.Name == subName) { currentNode = node; foundSubKey = true; // A part of the key was found. break; } } if (!foundSubKey) { // If there's no subKey, we create it. var newNode = new TreeViewNode(subName); currentNode.Nodes.Add(newNode); currentNode = newNode; foundSubKey = true; // A part of the key was found (created). } } currentNode.Value = value; }
void DrawNode(TreeViewNode node, int position, int level) { var drawPosition = new Vector2(_position.X + level * 11, _position.Y + position); if (node.Nodes.Count == 0) { DrawText(node.Name + ": " + TextHelper.FormatForDebug(node.Value), drawPosition); } else { var color = new Color(1, 1, 1, GearsetResources.GlobalAlpha) * GearsetResources.GlobalAlpha; if (!node.Open) GearsetResources.SpriteBatch.Draw(_closedTexture, drawPosition - new Vector2(12, 0), color); else GearsetResources.SpriteBatch.Draw(_openedTexture, drawPosition - new Vector2(12, 0), color); DrawText(node.Name, drawPosition); } }
int DrawRecursively(TreeViewNode node, int position, int level) { var newPosition = position + 12; DrawNode(node, position, level); if (node.Open) { foreach (var n in node.Nodes) { newPosition = DrawRecursively(n, newPosition, level + 1); } } return newPosition; }
int CheckLeftRecursively(TreeViewNode node, int position, int level, Vector2 clickPos) { var newPosition = position + 12; var rect = new Rectangle((int)_position.X + level * 11 - 12, (int)_position.Y + position, _closedTexture.Width, _closedTexture.Height); if (rect.Contains((int)clickPos.X, (int)clickPos.Y)) { node.Toggle(); return newPosition; } if (node.Open) { foreach (var n in node.Nodes) { newPosition = CheckLeftRecursively(n, newPosition, level + 1, clickPos); } } return newPosition; }