void VirtualDirectoryTree::BuildTree(const wxString& projName) { ProjectPtr proj = ManagerST::Get()->GetProject(projName); wxCHECK_RET(proj, "Can't find a Project with the supplied name"); ProjectTreePtr tree = proj->AsTree(); TreeWalker<wxString, ProjectItem> walker(tree->GetRoot()); for ( ; !walker.End(); walker++ ) { ProjectTreeNode* node = walker.GetNode(); wxString displayname(node->GetData().GetDisplayName()); if (node->GetData().GetKind() == ProjectItem::TypeVirtualDirectory) { wxString vdPath = displayname; ProjectTreeNode* tempnode = node->GetParent(); while (tempnode) { vdPath = tempnode->GetData().GetDisplayName() + ':' + vdPath; tempnode = tempnode->GetParent(); } VirtualDirectoryTree* parent = FindParent(vdPath.BeforeLast(':')); if (parent) { parent->StoreChild(displayname, vdPath); } else { // Any orphans must be root's top-level children, and we're root StoreChild(displayname, vdPath); } } } }