예제 #1
0
        /// <summary>
        /// Retrieves a node using the .ToString() representations of its ancestors.
        /// </summary>
        public SharpTreeNode FindNodeByPath(string[] path, bool returnBestMatch)
        {
            if (path == null)
            {
                return(null);
            }
            SharpTreeNode node      = treeView.Root;
            SharpTreeNode bestMatch = node;

            foreach (var element in path)
            {
                if (node == null)
                {
                    break;
                }
                bestMatch = node;
                node.EnsureLazyChildren();
                var ilSpyTreeNode = node as ILSpyTreeNode;
                if (ilSpyTreeNode != null)
                {
                    ilSpyTreeNode.EnsureChildrenFiltered();
                }
                node = node.Children.FirstOrDefault(c => c.ToString() == element);
            }
            if (returnBestMatch)
            {
                return(node ?? bestMatch);
            }
            else
            {
                return(node);
            }
        }
예제 #2
0
        void Search(PEFile module, Resource resource, SharpTreeNode parent, SharpTreeNode node, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (node is ResourceTreeNode treeNode)
            {
                if (!CheckVisibility(treeNode.Resource))
                {
                    return;
                }
                resource = treeNode.Resource;
            }

            if (node.Text != null && IsMatch((string)node.Text))
            {
                OnFoundResult(module, resource, node, parent);
            }

            if (!searchInside)
            {
                return;
            }

            node.EnsureLazyChildren();
            foreach (var child in node.Children)
            {
                Search(module, resource, node, child, cancellationToken);
            }
        }
예제 #3
0
        private SharpTreeNode GetLastGrandChild(SharpTreeNode node)
        {
            while (true)
            {
                var item = node as ObjectViewModel;
                if (!CanLoadChildrenForSearch(item))
                {
                    return(node);
                }
                if (searchExpandNodes)
                {
                    if (!item.IsChildrenLoaded)
                    {
                        item.IsChildrenLoadedBySearch = true;
                    }
                    node.EnsureLazyChildren();
                }
                if (node.Children.Count == 0)
                {
                    if (item.IsChildrenLoadedBySearch == true)
                    {
                        item.UnloadChildren();
                        item.IsChildrenLoadedBySearch = false;
                    }
                    return(node);
                }

                node = node.Children.Last();
            }
        }
예제 #4
0
        private SharpTreeNode GetFirstChild(SharpTreeNode node)
        {
            var item = node as ObjectViewModel;

            if (!CanLoadChildrenForSearch(item))
            {
                return(null);
            }

            if (!searchExpandNodes && !node.IsExpanded)
            {
                return(null);
            }
            if (searchExpandNodes)
            {
                if (!item.IsChildrenLoaded)
                {
                    item.IsChildrenLoadedBySearch = true;
                }
                node.EnsureLazyChildren();
            }
            foreach (var child in node.Children)
            {
                return(child);
            }
            return(null);
        }
예제 #5
0
 //---------------------------------------------------------------------
 static void ExpandAllNodes(SharpTreeNode node)
 {
     node.EnsureLazyChildren();
     foreach (var child in node.Children)
     {
         ExpandAllNodes(child);
     }
 }
예제 #6
0
 static SharpTreeNodeCollection ExpandAndGetChildren(SharpTreeNode node)
 {
     if (node is not PackageFolderTreeNode)
     {
         return(null);
     }
     node.EnsureLazyChildren();
     return(node.Children);
 }