diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/DefaultFileNodeCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/DefaultFileNodeCommands.cs index 17c23cd275..9f5fe00f4f 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/DefaultFileNodeCommands.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/DefaultFileNodeCommands.cs @@ -147,8 +147,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands case ".resources": return ItemType.EmbeddedResource; - // HACK: This isn't really a solution. :-( Maybe in the near - // future we can use the known attributes in the XFT files, too. + // HACK: This isn't really a solution. :-( Maybe in the near + // future we can use the known attributes in the XFT files, too. case ".xaml": return ItemType.Page; @@ -165,12 +165,10 @@ namespace ICSharpCode.SharpDevelop.Project.Commands IncludeDirectoryNode((DirectoryNode)directoryNode.Parent, false); } } - if (directoryNode.Nodes.Count == 0) { - FileProjectItem newItem = new FileProjectItem(directoryNode.Project, ItemType.Folder); - newItem.Include = FileUtility.GetRelativePath(directoryNode.Project.Directory, directoryNode.Directory); - ProjectService.AddProjectItem(directoryNode.Project, newItem); - directoryNode.ProjectItem = newItem; - } + FileProjectItem newItem = new FileProjectItem(directoryNode.Project, ItemType.Folder); + newItem.Include = FileUtility.GetRelativePath(directoryNode.Project.Directory, directoryNode.Directory); + ProjectService.AddProjectItem(directoryNode.Project, newItem); + directoryNode.ProjectItem = newItem; directoryNode.FileNodeStatus = FileNodeStatus.InProject; if (includeSubNodes) { diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs index 73f804c8b5..4ea2712c7e 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs @@ -40,8 +40,40 @@ namespace ICSharpCode.SharpDevelop.Project.Commands public static void CopyDirectory(string directoryName, DirectoryNode node, bool includeInProject) { + directoryName = Path.GetFullPath(directoryName); string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(directoryName)); + LoggingService.Debug("Copy " + directoryName + " to " + copiedFileName); if (!FileUtility.IsEqualFileName(directoryName, copiedFileName)) { + if (includeInProject && ProjectService.OpenSolution != null) { + // get ProjectItems in source directory + foreach (IProject project in ProjectService.OpenSolution.Projects) { + if (!FileUtility.IsBaseDirectory(project.Directory, directoryName)) + continue; + LoggingService.Debug("Searching for child items in " + project.Name); + foreach (ProjectItem item in project.Items.ToArray()) { + FileProjectItem fileItem = item as FileProjectItem; + if (fileItem == null) + continue; + string virtualFullName = Path.Combine(project.Directory, fileItem.VirtualName); + if (FileUtility.IsBaseDirectory(directoryName, virtualFullName)) { + LoggingService.Debug("Found file " + virtualFullName); + FileProjectItem newItem = new FileProjectItem(node.Project, fileItem.ItemType); + if (FileUtility.IsBaseDirectory(directoryName, fileItem.FileName)) { + newItem.FileName = FileUtility.RenameBaseDirectory(fileItem.FileName, directoryName, copiedFileName); + } else { + newItem.FileName = fileItem.FileName; + } + fileItem.CopyExtraPropertiesTo(newItem); + if (fileItem.IsLink) { + string newVirtualFullName = FileUtility.RenameBaseDirectory(virtualFullName, directoryName, copiedFileName); + fileItem.Properties["Link"] = FileUtility.GetRelativePath(node.Project.Directory, newVirtualFullName); + } + node.Project.Items.Add(newItem); + } + } + } + } + FileUtility.DeepCopy(directoryName, copiedFileName, true); DirectoryNode newNode = new DirectoryNode(copiedFileName); newNode.AddTo(node); diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs index 1b55edc684..fdb63058c5 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs @@ -531,14 +531,7 @@ namespace ICSharpCode.SharpDevelop.Project public void CopyDirectoryHere(DirectoryNode node, bool performMove) { - if (node.FileNodeStatus == FileNodeStatus.None) { - AddExistingItemsToProject.CopyDirectory(node.Directory, this, true); - if (performMove) { - FileService.RemoveFile(node.Directory, true); - } - } else { - CopyDirectoryHere(node.Directory, performMove); - } + CopyDirectoryHere(node.Directory, performMove); } public void CopyFileHere(string fileName, bool performMove)