/// <summary> /// Finds a node for a folder in the usage view /// </summary> /// <param name="node"></param> /// <param name="folderElement"></param> /// <returns></returns> public UsageTreeNode FindOrCreateFolderNode(UsageTreeNode node, IModelElement folderElement) { UsageTreeNode retVal = null; foreach (UsageTreeNode subNode in node.Nodes) { if (subNode.FolderElement == folderElement) { retVal = subNode; break; } } if (retVal == null) { retVal = new UsageTreeNode(folderElement, true); node.Nodes.Add(retVal); } return(retVal); }
/// <summary> /// Build the model of this tree view /// </summary> /// <returns>the root nodes of the tree</returns> protected override List <BaseTreeNode> BuildModel() { List <BaseTreeNode> retVal = new List <BaseTreeNode>(); ModelElement model = Root as ModelElement; if (model != null && model != _previousModel) { _previousModel = model; UsageTreeNode models = new UsageTreeNode("Model", true); models.SetImageIndex(false); models.SubNodesBuilt = true; retVal.Add(models); UsageTreeNode tests = new UsageTreeNode("Test", true); tests.SetImageIndex(false); tests.SubNodesBuilt = true; retVal.Add(tests); foreach (Usage usage in model.EFSSystem.FindReferences(model)) { UsageTreeNode current = new UsageTreeNode(usage, true); current.SetImageIndex(false); NameSpace nameSpace = EnclosingFinder <NameSpace> .find(usage.User, true); Frame frame = EnclosingFinder <Frame> .find(usage.User, true); if (nameSpace != null) { List <NameSpace> nameSpaces = new List <NameSpace>(); while (nameSpace != null) { nameSpaces.Insert(0, nameSpace); nameSpace = EnclosingFinder <NameSpace> .find(nameSpace); } UsageTreeNode currentTreeNode = models; foreach (NameSpace currentNameSpace in nameSpaces) { currentTreeNode = FindOrCreateFolderNode(currentTreeNode, currentNameSpace); } currentTreeNode.Nodes.Add(current); } else if (frame != null) { UsageTreeNode currentNode = FindOrCreateFolderNode(tests, frame); SubSequence subSequence = EnclosingFinder <SubSequence> .find(usage.User, true); if (subSequence != null) { currentNode = FindOrCreateFolderNode(currentNode, subSequence); } currentNode.Nodes.Add(current); } else { retVal.Add(current); } } Sort(); models.ExpandAll(); tests.ExpandAll(); } else { foreach (BaseTreeNode node in Nodes) { retVal.Add(node); } } return(retVal); }