public void RemoveChild(ElementMenuTreeNode child)
 {
     (info as GUIContainer).Elements.Remove(child.info);
     children.Remove(child);
 }
 public bool CheckIsValid(ElementMenuTreeNode node)
 {
     return true;
 }
 public void RemoveChild(ElementMenuTreeNode child)
 {
     info.Remove(child.info);
     children.Remove(child);
 }
    ElementMenuTreeNode newNode; // used when building up new menus

    // Called only for GUIContainer type classes
    public static ElementMenuTreeNode BuildMenu(ScreenMenuTreeNode screenParent, GUIContainer info)
    {
        ElementMenuTreeNode returnNode = new ElementMenuTreeNode();
        returnNode.info = info;
        returnNode.children = new List<ElementMenuTreeNode>();

        GUIContainer container = returnNode.info as GUIContainer;
        foreach (GUIObject obj in container.Elements)
        {
            // Containers nest, so deal with it slightly different.
            if (obj.GetType() == typeof(GUIContainer) || obj.GetType().BaseType == typeof(GUIContainer))
            {
                ElementMenuTreeNode newNode = ElementMenuTreeNode.BuildMenu(screenParent, obj as GUIContainer);
                if (newNode != null)
                {
                    newNode.screenParent = screenParent;
                    newNode.containerParent = returnNode;
                    returnNode.children.Add(newNode);
                }
            }
            else
            {
                ElementMenuTreeNode newNode = new ElementMenuTreeNode();
                newNode.screenParent = screenParent;
                newNode.containerParent = returnNode;
                returnNode.children.Add(newNode);
            }
        }

        return returnNode;
    }
    ElementMenuTreeNode newNode; // used when building up new menus

    public static ScreenMenuTreeNode BuildMenu(GUIScreen info) // pass in the relative path
    {
        ScreenMenuTreeNode returnNode = new ScreenMenuTreeNode();
        returnNode.info = info;
        returnNode.children = new List<ElementMenuTreeNode>();

        foreach (GUIObject obj in returnNode.info.Elements)
        {
            // Containers nest, so deal with it slightly different.
            if (obj.GetType() == typeof(GUIContainer) || obj.GetType().BaseType == typeof(GUIContainer))
            {
                ElementMenuTreeNode newNode = ElementMenuTreeNode.BuildMenu(returnNode, obj as GUIContainer);
                if (newNode != null)
                {
                    newNode.screenParent = returnNode;
                    returnNode.children.Add(newNode);
                }
            }
            else
            {
                ElementMenuTreeNode newNode = new ElementMenuTreeNode();
                newNode.screenParent = returnNode;
                returnNode.children.Add(newNode);
            }
        }

        return returnNode;
    }