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);
                }
            }
        }