public ProjectNode PopulateProjectNode(Project p)
        {
            Project  proj     = p;
            FileInfo fileinfo = new FileInfo(proj.ProjFilepath);
            var      projNode = new ProjectNode(proj)
            {
                Tag = fileinfo
            };

            ProjectExplorerNode nodeToAddTo = projNode;

            foreach (var projItem in proj.Includes)
            {
                string   pathAggregate = string.Empty;
                string[] pathParts     = projItem.RelativePath.Split(Path.DirectorySeparatorChar).Where(x => !string.IsNullOrEmpty(x)).ToArray();
                for (int i = 0; i < pathParts.Length; i++)
                {
                    string part = pathParts[i];
                    pathAggregate = Path.Combine(pathAggregate, pathParts[i]);
                    string treePath        = Path.Combine(projNode.Text, pathAggregate);
                    string itmRelativePath = Path.Combine(proj.ProjDirectory, pathAggregate);

                    if (i == pathParts.Length - 1)
                    {
                        ProjectExplorerNode node = null;
                        if (projItem.IsDirectory)
                        {
                            node = new ProjectFolderNode()
                            {
                                Text = part
                            };
                            node.Tag = new DirectoryInfo(itmRelativePath);
                            if (!Directory.Exists(itmRelativePath))
                            {
                                Util.LogMessage($"Couldn't find part of the path: \"{itmRelativePath}\"", ConsoleColor.Red);
                                node.ForeColor = System.Drawing.Color.Red;
                            }
                        }
                        else
                        {
                            node      = TreeNodeFactory.NodeFromExtension(part.Substring(part.IndexOf('.')));
                            node.Text = part;
                            node.Tag  = new FileInfo(itmRelativePath);
                            if (!File.Exists(itmRelativePath))
                            {
                                Util.LogMessage($"Couldn't find part of the path: \"{itmRelativePath}\"", ConsoleColor.Red);
                                node.ForeColor = System.Drawing.Color.Red;
                            }
                        }
                        node.Name = treePath;
                        nodeToAddTo.Nodes.Add(node);
                    }
                    else if (nodeToAddTo.Nodes.Find(treePath, true).Length > 0)
                    {
                        nodeToAddTo = (ProjectExplorerNode)nodeToAddTo.Nodes.Find(treePath, true)[0];
                    }
                    else
                    {
                        var node = new ProjectFolderNode()
                        {
                            Text = part
                        };
                        node.Tag  = new DirectoryInfo(itmRelativePath);
                        node.Name = treePath;
                        if (!Directory.Exists(itmRelativePath))
                        {
                            Util.LogMessage($"Couldn't find part of the path: \"{itmRelativePath}\"", ConsoleColor.Red);
                            node.ForeColor = System.Drawing.Color.Red;
                        }
                        nodeToAddTo.Nodes.Add(node);
                        nodeToAddTo = node;
                    }
                }
                nodeToAddTo = projNode;
            }
            return(projNode);
        }