From 5f0f752290d33e95bbe1cbde08d7840976ae05a0 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 5 Sep 2008 15:00:30 +0000 Subject: [PATCH] Implemented SD2-1410 - Add Existing Folder git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3502 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- AddIns/ICSharpCode.SharpDevelop.addin | 45 +++-------- .../Commands/FolderNodeCommands.cs | 75 +++++++++++++++++-- 2 files changed, 77 insertions(+), 43 deletions(-) diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index 547495fc42..7d42727046 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -281,17 +281,7 @@ - - - + - - - + + @@ -943,7 +926,7 @@ - + @@ -1362,17 +1345,7 @@ - - - + - + - + pair in fileNames) { @@ -271,6 +273,65 @@ namespace ICSharpCode.SharpDevelop.Project.Commands } } + public class AddExistingFolderToProject : AbstractMenuCommand + { + public override void Run() + { + TreeNode selectedNode = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode; + DirectoryNode node = selectedNode as DirectoryNode; + if (node == null && selectedNode != null) { + node = selectedNode.Parent as DirectoryNode; + } + if (node == null) { + return; + } + node.Expanding(); + node.Expand(); + + using (FolderBrowserDialog dlg = new FolderBrowserDialog()) { + dlg.SelectedPath = node.Directory; + dlg.ShowNewFolderButton = false; + if (dlg.ShowDialog(WorkbenchSingleton.MainForm) == DialogResult.OK) { + string folderName = dlg.SelectedPath; + string copiedFolderName = Path.Combine(node.Directory, Path.GetFileName(folderName)); + if (!FileUtility.IsEqualFileName(folderName, copiedFolderName)) { + if (FileUtility.IsBaseDirectory(folderName, node.Directory)) { + MessageService.ShowError("Cannot copy " + folderName + " to " + copiedFolderName); + return; + } + if (Directory.Exists(copiedFolderName)) { + MessageService.ShowError("Cannot copy " + folderName + " to " + copiedFolderName + ": target already exists."); + return; + } + int res = MessageService.ShowCustomDialog( + "${res:ProjectComponent.ContextMenu.ExistingFolder}", + "${res:ProjectComponent.ContextMenu.ExistingFolder.CopyQuestion}", + 0, 1, + "${res:ProjectComponent.ContextMenu.AddExistingFiles.Copy}", + "${res:Global.CancelButtonText}"); + if (res != 0) + return; + if (!FileService.CopyFile(folderName, copiedFolderName, true, false)) + return; + } + // ugly HACK to get IncludeDirectoryNode to work properly + AbstractProjectBrowserTreeNode.ShowAll = true; + try { + node.RecreateSubNodes(); + DirectoryNode newNode = node.AllNodes.OfType() + .FirstOrDefault(dir=>FileUtility.IsEqualFileName(copiedFolderName, dir.Directory)); + if (newNode != null) { + newNode.Expanding(); + IncludeFileInProject.IncludeDirectoryNode(newNode, true); + } + } finally { + AbstractProjectBrowserTreeNode.ShowAll = false; + } + node.RecreateSubNodes(); + } + } + } + } /// /// Menu item that display the NewFileDialog dialog and adds it to the solution. @@ -291,7 +352,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands DirectoryNode node = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedDirectoryNode; if (node == null) { return null; - } + } node.Expand(); node.Expanding();