public static void PopulateTree()

in DiagManager/DiagClasses/DiagTreeMgr.cs [146:248]


        public static void PopulateTree<T>  (TreeView tree, List<T> treelist, UserSetting setting)
        {


            TreeNodeCollection tc = tree.Nodes;
            tree.AfterCheck -= OnCheck;
            tree.AfterCheck += OnCheck;
            if (tc.Count > 0)
            {
                tree.Nodes.Clear();

            }

            //sort the list for tree display
            treelist.Sort();

            foreach (T obj in treelist)
            {
                DiagCategory cat = obj as DiagCategory;
                TreeNode catNode = new TreeNode();
                catNode.Name = cat.TreeNodeName;
                catNode.Text = cat.TreeNodeText;
                catNode.Tag = cat;

                if (cat.DiagEventList.Count <=0)
                {
                    continue;
                }

                cat.DiagEventList.Sort();

                bool anyChildChecked = false;
                foreach (DiagItem evt in cat.DiagEventList)
                {
                    TreeNode evtNode = new TreeNode();
                    evtNode.Name = evt.TreeNodeText;
                    evtNode.Text = evt.TreeNodeText;
                    bool IsVersionEnabled = false;
                    bool IsFeatureEanbled = false;
                    bool IsAnyTemplateEnabled = false;

                 

                    if (null != evt.EnabledVersions.Find(x => x.Name == setting["Version"] && x.Enabled == true))
                   {
                       IsVersionEnabled = true;
                   }

                    if (null != evt.EnabledFeatures.Find(x => x.Name == setting["Feature"] && x.Enabled == true))
                   {
                       IsFeatureEanbled = true;
                   }
                    //foreach (string temp in setting.GetDefaultChoiceByFeatureVersion (setting.Feature, setting.Version).ScenarioList)
                    foreach (string temp in setting.UserChosenScenarioList)
                   {

                       if (null != evt.EnabledTemplate.Find(x => x.Name == temp))
                       {
                           IsAnyTemplateEnabled = true;
                           break;
                       }

                   }

                   if (IsVersionEnabled == true && IsFeatureEanbled == true && IsAnyTemplateEnabled == true)
                    {
                        anyChildChecked = true;
                        evtNode.Checked = true;

                    }

                    evtNode.Tag = evt;
                    
                    if (IsVersionEnabled && IsFeatureEanbled)
                    { 
                        catNode.Nodes.Add(evtNode);
                        (evtNode.Tag as DiagItem).IsChecked = evtNode.Checked;
                    }


                }

                //don't add if the feature or version doesn't event support any of the events in this event category
                if (anyChildChecked == true)
                {
                    catNode.Checked = anyChildChecked;

                    
                }

                //only add the node if it's for this feature and version
                //regardless of template

                SetCategoryColor(catNode);
                if (catNode.Nodes.Count > 0)
                {
                    (catNode.Tag as DiagItem).IsChecked = catNode.Checked;
                    tree.Nodes.Add(catNode);
                }

            }
            tree.Refresh();
        }