Esempio n. 1
0
        public void RefreshTree()
        {
            ObjectTree.BeginUpdate();
            VisibleNodes = new List <TreeNode>();

            string[] searchTerms = (ObjectSearch.Text == "") ? null : ObjectSearch.Text.ToLower().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 + "'.";
        }