FSO.IDE.ObjectBrowser.RefreshTree C# (CSharp) Method

RefreshTree() public method

public RefreshTree ( ) : void
return void
        public void RefreshTree()
        {
            ObjectTree.BeginUpdate();
            VisibleNodes = new List<TreeNode>();

            string[] searchTerms = (ObjectSearch.Text == "") ? null : ObjectSearch.Text.ToLowerInvariant().Split(' ');
            SourceNodeToEnt = new Dictionary<TreeNode, ObjectRegistryEntry>();
            ObjectTree.Nodes.Clear();

            var objects = ObjectRegistry.MastersByFilename;
            foreach (var obj in objects)
            {
                var filename = obj.Key;
                var masters = obj.Value;
                var fileNode = new TreeNode(filename);
                bool fileAdded = false;

                var nodes = new List<TreeNode>();
                foreach (var master in masters)
                {
                    //if the master matches the search, OR at least one child does, it appears.
                    int matches = 0;
                    var node = new TreeNode(master.Name);
                    SourceNodeToEnt.Add(node, master);
                    if (master.SearchMatch(searchTerms)) matches++;
                    foreach (var child in master.Children)
                    {
                        if (child.SearchMatch(searchTerms))
                        {
                            var cnode = new TreeNode(child.Name);
                            SourceNodeToEnt.Add(cnode, child);
                            node.Nodes.Add(cnode);
                            matches++;
                        }
                    }
                    if (matches > 0)
                    {
                        if (!fileAdded)
                        {
                            fileAdded = true;
                            ObjectTree.Nodes.Add(fileNode);
                            VisibleNodes.Add(fileNode);
                        }
                        fileNode.Nodes.Add(node);
                        VisibleNodes.Add(node);
                        foreach (var cnode in node.Nodes) VisibleNodes.Add((TreeNode)cnode);
                    }
                }
                fileNode.Expand();
            }
            ObjectTree.EndUpdate();

            SearchDescribe.Text = (ObjectSearch.Text == "") ?
            "Showing all objects. ("+VisibleNodes.Count+" results)" :
            VisibleNodes.Count+" search results for '" + ObjectSearch.Text + "'.";
        }