/// <summary> /// Adds child Confeaturator nodes to a given node. /// </summary> /// <param name="node">The node to which children should be added.</param> private void AddChildFeatureModelNodes(FeatureModelTreeNode node) { FeatureModelElement fmElement = node.FeatureModelElement; foreach (FeatureModelElement childFMElement in fmElement.SubFeatureModelElements) { node.Nodes.Add(CreateFeatureModelTreeNode(childFMElement)); } // cross-feature model logic Feature feature = fmElement as Feature; if (feature != null) { if (feature.IsReference && !addedFeatures.Contains(feature.Name)) { FeatureModel definitionFeatureModel = Util.LoadFeatureModel(DTEHelper.GetFullProjectItemPath(feature.DefinitionFeatureModelFile)); Feature definitionFeature = definitionFeatureModel.GetFeature(feature.Name); if (definitionFeature != null) { foreach (FeatureModelElement childFMElement in definitionFeature.SubFeatureModelElements) { node.Nodes.Add(CreateFeatureModelTreeNode(childFMElement)); } } } addedFeatures.Add(feature.Name); } }
/// <summary> /// Creates a FeatureModelTreeNode instance. /// </summary> /// <param name="fmElement">The feature model element that will belong to this node.</param> public FeatureModelTreeNode(FeatureModelElement fmElement) { if (fmElement == null) { throw new ArgumentException("Cannot build Confeaturator tree with null features"); } this.FeatureModelElement = fmElement; Alternative alternative = fmElement as Alternative; if (alternative != null) { this.Text = "Alternative " + alternative.MinMaxIntervalText; this.Status = FeatureModelNodeStatus.Alternative; this.ForeColor = Color.DimGray; this.Kind = FeatureModelNodeKind.Alternative; } else { Feature feature = fmElement as Feature; this.Text = feature.Name; switch (feature.Occurence) { case Occurence.Mandatory: this.Status = FeatureModelNodeStatus.CheckedAndDisabled; this.Kind = FeatureModelNodeKind.Mandatory; this.Checked = true; break; case Occurence.Optional: this.Status = FeatureModelNodeStatus.Unchecked; this.Kind = FeatureModelNodeKind.Optional; break; case Occurence.NotApply: this.Status = FeatureModelNodeStatus.Unchecked; this.Kind = FeatureModelNodeKind.NotApply; break; default: break; } } }
/// <summary> /// Creates a Confeaturator node. /// </summary> /// <param name="fmElement">Feature model element used to create the node.</param> /// <returns>The created Confeaturator node.</returns> private FeatureModelTreeNode CreateFeatureModelTreeNode(FeatureModelElement fmElement) { FeatureModelTreeNode node = new FeatureModelTreeNode(fmElement); AddChildFeatureModelNodes(node); node.AdjustFont(trvFeatures.Font); return(node); }
/// <summary> /// Creates a FeatureModelTreeNode instance. /// </summary> /// <param name="fmElement">The feature model element that will belong to this node.</param> public FeatureModelTreeNode(FeatureModelElement fmElement) { if (fmElement == null) { throw new ArgumentException("Cannot build Confeaturator tree with null features"); } this.FeatureModelElement = fmElement; Alternative alternative = fmElement as Alternative; if (alternative != null) { this.Text = "Alternative " + alternative.MinMaxIntervalText; this.Status = FeatureModelNodeStatus.Alternative; this.ForeColor = Color.DimGray; this.Kind = FeatureModelNodeKind.Alternative; } else { Feature feature = fmElement as Feature; this.Text = feature.Name; switch (feature.Occurence) { case Occurence.Mandatory: this.Status = FeatureModelNodeStatus.CheckedAndDisabled; this.Kind = FeatureModelNodeKind.Mandatory; this.Checked = true; break; case Occurence.Optional: this.Status = FeatureModelNodeStatus.Unchecked; this.Kind = FeatureModelNodeKind.Optional; break; case Occurence.NotApply: this.Status = FeatureModelNodeStatus.Unchecked; this.Kind = FeatureModelNodeKind.NotApply; break; default: break; } } }
/// <summary> /// Creates a Confeaturator node. /// </summary> /// <param name="fmElement">Feature model element used to create the node.</param> /// <returns>The created Confeaturator node.</returns> private FeatureModelTreeNode CreateFeatureModelTreeNode(FeatureModelElement fmElement) { FeatureModelTreeNode node = new FeatureModelTreeNode(fmElement); AddChildFeatureModelNodes(node); node.AdjustFont(trvFeatures.Font); return node; }