Example #1
0
        /// <summary>
        /// 得到这个节点,不会创建
        /// </summary>
        /// <returns></returns>
        public HierarchyTreeNode GetNode(string[] hierarchyPath)
        {
            if (hierarchyPath == null || hierarchyPath.Length == 0)
            {
                throw new ArgumentException();
            }

            //根节点的第一层里先搜索
            HierarchyTreeNode curNode = root;

            //开始从第一个Node出发开始搜索
            for (int i = 0; i < hierarchyPath.Length; i++)
            {
                if (!string.IsNullOrEmpty(hierarchyPath[i]))
                {
                    string nodeName = hierarchyPath[i];

                    curNode = curNode.FindChild(nodeName);
                    if (curNode == null)
                    {
                        return(null);//无法找到只能中断
                    }
                }
            }
            return(curNode);
        }
Example #2
0
        /// <summary>
        /// 递归得到所有的子节点
        /// </summary>
        /// <returns></returns>
        public HierarchyTreeNode[] GetAllChild()
        {
            if (children == null)
            {
                return(null);
            }

            Queue <HierarchyTreeNode> result = new Queue <HierarchyTreeNode>();
            Queue <HierarchyTreeNode> queue  = new Queue <HierarchyTreeNode>();//BFS队列

            for (int i = 0; i < children.Count; i++)
            {
                queue.Enqueue(children[i]);
            }

            while (queue.Count > 0)
            {
                HierarchyTreeNode front = queue.Dequeue();
                result.Enqueue(front);
                if (front.children != null)
                {
                    for (int i = 0; i < front.children.Count; i++)
                    {
                        queue.Enqueue(front.children[i]);
                    }
                }
            }
            return(result.ToArray());
        }
Example #3
0
        /// <summary>
        /// 移除一个节点
        /// </summary>
        /// <param name="hierarchyPath"></param>
        public void RemoveNode(string[] hierarchyPath)
        {
            if (hierarchyPath == null || hierarchyPath.Length == 0)
            {
                throw new ArgumentException();
            }

            HierarchyTreeNode node = GetNode(hierarchyPath);

            if (node != null)
            {
                node.parent.RemoveChild(node.name);
            }
        }
Example #4
0
        /// <summary>
        /// 移除一个节点
        /// </summary>
        /// <param name="name"></param>
        public void RemoveChild(string name)
        {
            if (children == null)
            {
                return;
            }

            for (int i = 0; i < children.Count; i++)
            {
                if (children[i].name == name)
                {
                    HierarchyTreeNode moveChild = children[i];
                    moveChild.Break();
                    children.RemoveAt(i);
                    return;
                }
            }
        }
Example #5
0
        /// <summary>
        /// 是否是有效的(未断开)
        /// </summary>
        /// <returns></returns>
        public bool IsValid()
        {
            HierarchyTreeNode curNode = this;

            //迭代200层
            for (int i = 0; i < 200; i++)
            {
                if (curNode == null)
                {
                    return(false);
                }
                if (curNode.isSceneRoot())
                {
                    return(true);
                }

                curNode = curNode.parent;
            }
            return(false);
        }
Example #6
0
        /// <summary>
        /// 选中或添加一个节点
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public HierarchyTreeNode GetOrCreateChild(string name)
        {
            if (children == null)
            {
                children = new List <HierarchyTreeNode>();
            }

            for (int i = 0; i < children.Count; i++)
            {
                if (children[i].name == name)
                {
                    return(children[i]);
                }
            }
            HierarchyTreeNode child = new HierarchyTreeNode(name);

            children.Add(child);
            child.parent = this;
            return(child);
        }
Example #7
0
 /// <summary>
 /// 得到这个节点在层级中的最终是否是活动的
 /// </summary>
 /// <param name="node"></param>
 public void NodeActiveHierarchy(HierarchyTreeNode node)
 {
 }
Example #8
0
 /// <summary>
 /// 断开这节点
 /// </summary>
 public void Break()
 {
     parent   = null;
     children = null;
 }