Browse Source

Implemented SD2-1410 - Add Existing Folder

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3502 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
5f0f752290
  1. 45
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 75
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs

45
AddIns/ICSharpCode.SharpDevelop.addin

@ -281,17 +281,7 @@
<Condition name="WriteableProject" action="Disable"> <Condition name="WriteableProject" action="Disable">
<MenuItem id = "ProjectAddMenu" label = "${res:ProjectComponent.ContextMenu.AddMenu}" type = "Menu" > <MenuItem id = "ProjectAddMenu" label = "${res:ProjectComponent.ContextMenu.AddMenu}" type = "Menu" >
<MenuItem id = "New Item" <Include path="/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode/Add"/>
label = "${res:ProjectComponent.ContextMenu.NewItem}"
icon = "Icons.16x16.NewDocumentIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewItemsToProject"/>
<MenuItem id = "Existing Item"
label = "${res:ProjectComponent.ContextMenu.ExistingItem}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddExistingItemsToProject"/>
<MenuItem id = "NewFolder"
label = "${res:ProjectComponent.ContextMenu.NewFolder}"
icon = "Icons.16x16.NewFolderIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewFolderToProject"/>
</MenuItem> </MenuItem>
<MenuItem id = "AddReference" <MenuItem id = "AddReference"
@ -393,17 +383,7 @@
<Condition name = "Ownerstate" ownerstate = "InProject"> <Condition name = "Ownerstate" ownerstate = "InProject">
<MenuItem id = "Add" label = "${res:ProjectComponent.ContextMenu.AddMenu}" type="Menu"> <MenuItem id = "Add" label = "${res:ProjectComponent.ContextMenu.AddMenu}" type="Menu">
<MenuItem id = "New Item" <Include path="/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode/Add"/>
label = "${res:ProjectComponent.ContextMenu.NewItem}"
icon = "Icons.16x16.NewDocumentIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewItemsToProject"/>
<MenuItem id = "Existing Item"
label = "${res:ProjectComponent.ContextMenu.ExistingItem}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddExistingItemsToProject"/>
<MenuItem id = "NewFolder"
label = "${res:ProjectComponent.ContextMenu.NewFolder}"
icon = "Icons.16x16.NewFolderIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewFolderToProject"/>
<MenuItem id = "AddDependentSeparator" <MenuItem id = "AddDependentSeparator"
type = "Separator" /> type = "Separator" />
<MenuItem id = "NewDependentItem" <MenuItem id = "NewDependentItem"
@ -559,6 +539,9 @@
label = "${res:ProjectComponent.ContextMenu.NewFolder}" label = "${res:ProjectComponent.ContextMenu.NewFolder}"
icon = "Icons.16x16.NewFolderIcon" icon = "Icons.16x16.NewFolderIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewFolderToProject"/> class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewFolderToProject"/>
<MenuItem id = "ExistingFolder"
label = "${res:ProjectComponent.ContextMenu.ExistingFolder}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddExistingFolderToProject"/>
</MenuItem> </MenuItem>
<MenuItem id = "AddSeparator" type = "Separator" /> <MenuItem id = "AddSeparator" type = "Separator" />
@ -943,7 +926,7 @@
</Condition> </Condition>
<ToolbarItem id = "ChooseConfigurationSeparator" type = "Separator"/> <ToolbarItem id = "ChooseConfigurationSeparator" type = "Separator"/>
<ToolbarItem id = "ChooseLayout" <ToolbarItem id = "ChooseLayout"
type = "ComboBox" type = "ComboBox"
class = "ICSharpCode.SharpDevelop.Commands.ChooseLayoutCommand" /> class = "ICSharpCode.SharpDevelop.Commands.ChooseLayoutCommand" />
@ -1362,17 +1345,7 @@
<Condition name = "ProjectActive" activeproject="*"> <Condition name = "ProjectActive" activeproject="*">
<MenuItem id = "Project" label = "${res:XML.MainMenu.ProjectMenu}" type="Menu"> <MenuItem id = "Project" label = "${res:XML.MainMenu.ProjectMenu}" type="Menu">
<MenuItem id = "ProjectAddMenu" label = "${res:ProjectComponent.ContextMenu.AddMenu}" type = "Menu" > <MenuItem id = "ProjectAddMenu" label = "${res:ProjectComponent.ContextMenu.AddMenu}" type = "Menu" >
<MenuItem id = "New Item" <Include path="/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode/Add"/>
label = "${res:ProjectComponent.ContextMenu.NewItem}"
icon = "Icons.16x16.NewDocumentIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewItemsToProject"/>
<MenuItem id = "Existing Item"
label = "${res:ProjectComponent.ContextMenu.ExistingItem}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddExistingItemsToProject"/>
<MenuItem id = "NewFolder"
label = "${res:ProjectComponent.ContextMenu.NewFolder}"
icon = "Icons.16x16.NewFolderIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewFolderToProject"/>
</MenuItem> </MenuItem>
<MenuItem id = "AddReference" <MenuItem id = "AddReference"
label = "${res:ProjectComponent.ContextMenu.AddReference}" label = "${res:ProjectComponent.ContextMenu.AddReference}"
@ -1483,7 +1456,7 @@
class = "ICSharpCode.SharpDevelop.Project.Commands.StopDebuggingCommand"/> class = "ICSharpCode.SharpDevelop.Project.Commands.StopDebuggingCommand"/>
</Condition> </Condition>
</Condition> </Condition>
<Condition name="DebuggerSupports" debuggersupports="Attaching"> <Condition name="DebuggerSupports" debuggersupports="Attaching">
<Condition name="IsProcessRunning" isprocessrunning="False" isdebugging="False" action="Disable"> <Condition name="IsProcessRunning" isprocessrunning="False" isdebugging="False" action="Disable">
<MenuItem id = "Attach" <MenuItem id = "Attach"
@ -1491,7 +1464,7 @@
class = "ICSharpCode.SharpDevelop.Project.Commands.AttachToProcessCommand"/> class = "ICSharpCode.SharpDevelop.Project.Commands.AttachToProcessCommand"/>
</Condition> </Condition>
</Condition> </Condition>
<Condition name="DebuggerSupports" debuggersupports="Detaching"> <Condition name="DebuggerSupports" debuggersupports="Detaching">
<Condition name="IsProcessRunning" isdebugging="True" action="Disable"> <Condition name="IsProcessRunning" isdebugging="True" action="Disable">
<MenuItem id = "Detach" <MenuItem id = "Detach"

75
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs

@ -7,6 +7,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.IO; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
@ -168,7 +169,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
{ {
TreeNode selectedNode = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode; TreeNode selectedNode = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode;
DirectoryNode node = selectedNode as DirectoryNode; DirectoryNode node = selectedNode as DirectoryNode;
if (node == null) { if (node == null && selectedNode != null) {
node = selectedNode.Parent as DirectoryNode; node = selectedNode.Parent as DirectoryNode;
} }
if (node == null) { if (node == null) {
@ -212,11 +213,12 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(fileNames[0].Key)); string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(fileNames[0].Key));
if (!FileUtility.IsEqualFileName(fileNames[0].Key, copiedFileName)) { if (!FileUtility.IsEqualFileName(fileNames[0].Key, copiedFileName)) {
int res = MessageService.ShowCustomDialog(fdiag.Title, "${res:ProjectComponent.ContextMenu.AddExistingFiles.Question}", int res = MessageService.ShowCustomDialog(
0, 2, fdiag.Title, "${res:ProjectComponent.ContextMenu.AddExistingFiles.Question}",
"${res:ProjectComponent.ContextMenu.AddExistingFiles.Copy}", 0, 2,
"${res:ProjectComponent.ContextMenu.AddExistingFiles.Link}", "${res:ProjectComponent.ContextMenu.AddExistingFiles.Copy}",
"${res:Global.CancelButtonText}"); "${res:ProjectComponent.ContextMenu.AddExistingFiles.Link}",
"${res:Global.CancelButtonText}");
if (res == 1) { if (res == 1) {
// Link // Link
foreach (KeyValuePair<string, string> pair in fileNames) { foreach (KeyValuePair<string, string> 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<DirectoryNode>()
.FirstOrDefault(dir=>FileUtility.IsEqualFileName(copiedFolderName, dir.Directory));
if (newNode != null) {
newNode.Expanding();
IncludeFileInProject.IncludeDirectoryNode(newNode, true);
}
} finally {
AbstractProjectBrowserTreeNode.ShowAll = false;
}
node.RecreateSubNodes();
}
}
}
}
/// <summary> /// <summary>
/// Menu item that display the NewFileDialog dialog and adds it to the solution. /// 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; DirectoryNode node = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedDirectoryNode;
if (node == null) { if (node == null) {
return null; return null;
} }
node.Expand(); node.Expand();
node.Expanding(); node.Expanding();

Loading…
Cancel
Save