Exemple #1
0
        /// <summary>
        /// Shows DTOs target options in tree view control.
        /// </summary>
        /// <param name="solution">Source solution.</param>
        private void ShowTargetOptions(Solution solution)
        {
            // Get solution name
            string solutionName = VisualStudioHelper.GetSolutionName(solution);

            // Create solution node
            var solutionNodeDTOs = new TreeNodeExtended(solutionName);
            solutionNodeDTOs.Value = solution;
            var solutionNodeAssemblers = new TreeNodeExtended(solutionName);
            solutionNodeAssemblers.Value = solution;

            // Loop through solution projects
            foreach (Project project in this.Projects)
            {
                // Create project node
                var projectNodeDTOs = new TreeNodeExtended(project.Name);
                projectNodeDTOs.Value = project;
                var projectNodeAssemblers = new TreeNodeExtended(project.Name);
                projectNodeAssemblers.Value = project;

                // Get first level folders and add them to project node
                List<ProjectItem> folders = VisualStudioHelper.GetFirstLevelFoldersFromProject(project);

                this.AddFoldersToTreeNode(projectNodeDTOs, folders);
                this.AddFoldersToTreeNode(projectNodeAssemblers, folders);

                // Add project node to solution node
                solutionNodeDTOs.Nodes.Add(projectNodeDTOs);
                solutionNodeAssemblers.Nodes.Add(projectNodeAssemblers);
            }

            // Add solution node to tree targets and expand the node
            this.treeTargetDTOs.Nodes.Add(solutionNodeDTOs);
            this.treeTargetAssemblers.Nodes.Add(solutionNodeAssemblers);
            solutionNodeDTOs.Expand();
            solutionNodeAssemblers.Expand();
        }
Exemple #2
0
        /// <summary>
        /// Adds the received folders to the received tree node.
        /// </summary>
        /// <param name="treeNode">Target tree node.</param>
        /// <param name="folders">Source folders.</param>
        private void AddFoldersToTreeNode(TreeNodeExtended treeNode, List<ProjectItem> folders)
        {
            // Loop through folders
            foreach (ProjectItem objFolder in folders)
            {
                // Create folder node
                var folderNode = new TreeNodeExtended(objFolder.Name);
                folderNode.Value = objFolder;

                // Get sub folders
                List<ProjectItem> subFolders =
                    VisualStudioHelper.GetFirstLevelFoldersFromFolder(objFolder);

                // Add sub folders
                this.AddFoldersToTreeNode(folderNode, subFolders);

                // Add folder node to target node
                treeNode.Nodes.Add(folderNode);
            }
        }
Exemple #3
0
        /// <summary>
        /// Searches the target inside the received node and is set as selected if found.
        /// </summary>
        /// <param name="node">Node where to perform the search.</param>
        /// <param name="targetType">Target type.</param>
        /// <param name="targetProjectName">Target project name.</param>
        /// <param name="targetName">Target name (if targetType is Project then it should be the same as targetProjectName).</param>
        /// <param name="targetContainer">Object where to set target reference once found.</param>
        /// <param name="currentFolderLevel">(Optional) Current folder level. Do not pass value on first invocation.</param>
        /// <returns>Boolean indicating if the target was found.</returns>
        private bool SetTarget(TreeNodeExtended node, TargetType targetType, string targetProjectName, string targetName, 
            dynamic targetContainer, int currentFolderLevel = -1)
        {
            bool found = false;

            if (node.Nodes != null && node.Nodes.Count > 0)
            {
                // Indicates the real target name to search
                string realTargetName = targetName;

                // Indicates if there are any more folder levels to search
                bool pendingFolderLevels = true;

                if (targetType == TargetType.ProjectFolder && currentFolderLevel >= 0)
                {
                    // Split target name by levels
                    string[] folderLevels = targetName.Split(
                        new string[] { Resources.ProjectFolderLevelSeparator }, StringSplitOptions.None);

                    // Tagret is a folder, get current level folder name
                    realTargetName = folderLevels[currentFolderLevel];

                    if ((currentFolderLevel + 1) == folderLevels.Count())
                    {
                        // Searched folder name reached
                        pendingFolderLevels = false;
                    }
                }

                // Loop through childs
                foreach (TreeNodeExtended childNode in node.Nodes)
                {
                    if ((targetType == TargetType.Project) && (childNode.Value is Project)
                        && (childNode.Value as Project).Name == targetProjectName)
                    {
                        // Found target project
                        childNode.TreeView.SelectedNode = childNode;
                        childNode.TreeView.SelectedNode.EnsureVisible();
                        found = true;
                        // Set project reference
                        targetContainer.TargetProject = (childNode.Value as Project);
                        break;
                    }
                    else if (targetType == TargetType.ProjectFolder)
                    {
                        // First search, project level
                        if (currentFolderLevel == -1)
                        {
                            // Is it a project and the one containing the target folder?
                            if (childNode.Value is Project
                                && (childNode.Value as Project).Name == targetProjectName)
                            {
                                // Project found, search target folder inside
                                found = this.SetTarget(childNode, targetType, targetProjectName, targetName,
                                    targetContainer, (currentFolderLevel + 1));

                                // Target folder found?
                                if (found == true)
                                {
                                    // Set project reference
                                    targetContainer.TargetProject = (childNode.Value as Project);
                                    break;
                                }
                            }
                        }
                        else if (childNode.Value is ProjectItem
                            && (childNode.Value as ProjectItem).Name == realTargetName)
                        {
                            if (pendingFolderLevels == true)
                            {
                                // Found a folder that contains at some level the target folder, keep searching
                                found = this.SetTarget(childNode, targetType, targetProjectName, targetName,
                                    targetContainer, (currentFolderLevel + 1));

                                // Target folder found?
                                if (found == true)
                                {
                                    break;
                                }
                            }
                            else
                            {
                                // Found target folder
                                childNode.TreeView.SelectedNode = childNode;
                                childNode.TreeView.SelectedNode.EnsureVisible();
                                found = true;
                                // Set folder reference
                                targetContainer.TargetProjectFolder = (childNode.Value as ProjectItem);
                                break;
                            }

                        } // END else

                    } // END else

                } // END foreach

            } // END if

            return found;
        }