예제 #1
0
        /// <summary>
        /// 특정 NodeContainer의 자손 중 자식 노드가 없는 TreeNode들 (나무 잎) 을 열거합니다.
        /// </summary>
        /// <param name="nodeContainer"></param>
        /// <returns></returns>
        public static IEnumerable <RadTreeNode> FindLeafNodes(this IRadTreeNodeContainer nodeContainer)
        {
            nodeContainer.ShouldNotBeNull("nodeContainer");

            if (IsDebugEnabled)
            {
                log.Debug(@"특정 NodeContainer 하위의 모든 Leaf Node (자식이 없는 노드) 들을 Depth First 방식으로 찾습니다. nodeContainer=[{0}]", nodeContainer.AsTextAndValue());
            }

            return(nodeContainer.GetDescendentNodes().Where(n => n.Nodes.Count == 0));
        }
예제 #2
0
        /// <summary>
        /// Depth-First 탐색으로 특정 Node 와 그 자손 Node 들 중에 검사를 통과하는 Node들을 열거합니다.
        /// </summary>
        /// <param name="nodeContainer"></param>
        /// <param name="predicate"></param>
        /// <returns></returns>
        public static IEnumerable <RadTreeNode> FindNodes(this IRadTreeNodeContainer nodeContainer, Func <RadTreeNode, bool> predicate)
        {
            nodeContainer.ShouldNotBeNull("nodeContainer");
            predicate.ShouldNotBeNull("predicate");

            if (IsDebugEnabled)
            {
                log.Debug("특정 NodeContainer(TreeView or TreeNode)부터 predicate를 만족하는 RadTreeNode 들을 모두 열거합니다. nodeContainer=[{0}]",
                          nodeContainer.AsTextAndValue());
            }

            return(nodeContainer.GetDescendentNodes().Where(predicate));
        }