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 @@
-
+
@@ -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();