示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }