private void ProcessSolutionFolderOrProject(IVsSolution solutionService, EnvDTE.Project project, IList <Item> projectData) { if (project.Kind == EnvDTE80.ProjectKinds.vsProjectKindSolutionFolder) { var subProjectsData = new List <Item>(); foreach (EnvDTE.ProjectItem projectItem in project.ProjectItems) { if (projectItem.SubProject != null) { ProcessSolutionFolderOrProject(solutionService, projectItem.SubProject, subProjectsData); } } if (subProjectsData.Count > 0) { projectData.Add(Item.CreateFolder(project.Name, subProjectsData)); } } else { var projectInfo = _solutionInfo.GetProjectInfo(project.Name); if (null != projectInfo) { ProcessProject(solutionService, project, projectInfo, projectData); } } }
private void AddProjectTreeViewItem(TreeView treeView, TreeViewItem parentTreeViewItem, string projectName, IList <SolutionHierarchy.Item> projectItems) { ProjectInfo projectInfo = _solutionInfo.GetProjectInfo(projectName); if (null == projectInfo) { return; } var treeViewItem = new TreeViewItem() { FontSize = 11, FontWeight = FontWeights.Bold }; treeViewItem.DataContext = projectInfo; treeViewItem.ContextMenu = new ContextMenu(); AddProjectOrFolderTreeViewItemContextMenu(treeViewItem.ContextMenu, treeViewItem); var image = new Image() { Source = _solutionHierarchy.GetIcon(SolutionHierarchy.IconType.Project) }; var label = new Label() { Content = projectName }; var stack = new StackPanel() { Orientation = Orientation.Horizontal, Margin = new Thickness(0, -2, 0, -2) }; stack.Children.Add(image); stack.Children.Add(label); treeViewItem.Header = stack; if (parentTreeViewItem != null) { parentTreeViewItem.Items.Add(treeViewItem); } else { treeView.Items.Add(treeViewItem); } foreach (var item in projectItems) { if (item.Type == SolutionHierarchy.Item.ItemType.CppFile) { AddCppFileTreeViewItem(projectInfo, treeViewItem, item); } else { AddFolderTreeViewItem(projectInfo, treeView, treeViewItem, item.Name, item.Items); } } }