private void CreateTreeNode(FeatureTreeNode parentNode, FeatureSetType featureSet, TriStateTreeView treeView) { if (featureSet.Feature != null) { foreach (object o in featureSet.Feature) { FeatureTreeNode node = new FeatureTreeNode(); node.Text = ((FeatureType)o).name; switch (((FeatureType)o).configuration) { case ConfigType.Included: if (((FeatureType)o).kind == KindType.Mandatory) { //treeView.SetChecked(node, TriStateTreeView.CheckState.Checked); treeView.SetChecked(node, TriStateTreeView.CheckState.Greyed); } else { treeView.SetChecked(node, TriStateTreeView.CheckState.Checked); } break; case ConfigType.Excluded: treeView.SetChecked(node, TriStateTreeView.CheckState.Unchecked); break; case ConfigType.Unspecified: treeView.SetChecked(node, TriStateTreeView.CheckState.QuestionMark); break; } node.NodeFont = new System.Drawing.Font("Arial", 8, System.Drawing.FontStyle.Bold); parentNode.Nodes.Add(node); } } }
// recursive method private void CreateTreeNode(FeatureTreeNode parentNode, FeatureType feature, TriStateTreeView treeView) { if (feature.Items != null) { foreach (object o in feature.Items) { if (o.GetType() == typeof(FeatureType)) { FeatureTreeNode node = new FeatureTreeNode(); node.Text = ((FeatureType)o).name; if (((FeatureType)o).kind == KindType.Optional || ((FeatureType)o).kind == KindType.FeatureSetFeature) { node.NodeFont = new System.Drawing.Font("Arial", 8, System.Drawing.FontStyle.Bold); } switch (((FeatureType)o).configuration) { case ConfigType.Included: if (((FeatureType)o).kind == KindType.Mandatory) { //treeView.SetChecked(node, TriStateTreeView.CheckState.Checked); treeView.SetChecked(node, TriStateTreeView.CheckState.Greyed); } else { treeView.SetChecked(node, TriStateTreeView.CheckState.Checked); } break; case ConfigType.Unspecified: treeView.SetChecked(node, TriStateTreeView.CheckState.QuestionMark); break; case ConfigType.Excluded: treeView.SetChecked(node, TriStateTreeView.CheckState.Unchecked); break; } parentNode.Nodes.Add(node); CreateTreeNode(node, ((FeatureType)o), treeView); } else { FeatureTreeNode node = new FeatureTreeNode(); treeView.SetChecked(node, TriStateTreeView.CheckState.FeatureSet); node.Text = string.Format("FeatureSet [{0}...{1}]", ((FeatureSetType)o).min, ((FeatureSetType)o).max); parentNode.Nodes.Add(node); CreateTreeNode(node, (FeatureSetType)o, treeView); } } } }
// create TristateTreeView from XML file public void CreateTreeViewFromXmlFile(TriStateTreeView treeView) { FeatureModelConfiguration fmc = new FeatureModelConfiguration(this.fileName); rootFeature = fmc.GetFeatureModelConfigurationModel(); // Clear TriStateTreeView treeView.Nodes.Clear(); // treeView.BeginUpdate(); treeView.InitializeRootFeature(ref rootFeature); FeatureTreeNode rn = new FeatureTreeNode(); rn.Text = rootFeature.name; rn.InitializeRootFeature(ref rootFeature); //treeView.SetChecked(rn, TriStateTreeView.CheckState.Checked); treeView.SetChecked(rn, TriStateTreeView.CheckState.Greyed); treeView.Nodes.Add(rn); foreach (object o in rootFeature.Items) { if (o.GetType() == typeof(FeatureType)) { FeatureType ft = (FeatureType)o; FeatureTreeNode subRootNode = new FeatureTreeNode(); subRootNode.Text = ft.name; subRootNode.InitializeFeature(ref ft); if (ft.kind == KindType.Optional || ft.kind == KindType.FeatureSetFeature) { subRootNode.NodeFont = new System.Drawing.Font("Arial", 8, System.Drawing.FontStyle.Bold); } switch (ft.configuration) { case ConfigType.Included: if (ft.kind == KindType.Mandatory) { //treeView.SetChecked(subRootNode, TriStateTreeView.CheckState.Checked); treeView.SetChecked(subRootNode, TriStateTreeView.CheckState.Greyed); } else { treeView.SetChecked(subRootNode, TriStateTreeView.CheckState.Checked); } break; case ConfigType.Excluded: treeView.SetChecked(subRootNode, TriStateTreeView.CheckState.Unchecked); break; case ConfigType.Unspecified: treeView.SetChecked(subRootNode, TriStateTreeView.CheckState.QuestionMark); break; } rn.Nodes.Add(subRootNode); CreateTreeNode(subRootNode, ft, treeView); } else if (o.GetType() == typeof(FeatureSetType)) { FeatureSetType fst = (FeatureSetType)o; FeatureTreeNode subRootNode = new FeatureTreeNode(); subRootNode.Text = string.Format("FeatureSet [{0}...{1}]", fst.min, fst.max); treeView.SetChecked(subRootNode, TriStateTreeView.CheckState.FeatureSet); rn.Nodes.Add(subRootNode); CreateTreeNode(subRootNode, fst, treeView); } } treeView.ExpandAll(); treeView.EndUpdate(); }