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 b716d42e96..a87d9fa1be 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 @@ -50,7 +50,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands public class ExcludeFileFromProject : AbstractMenuCommand { - void ExcludeFileNode(FileNode fileNode) + public static void ExcludeFileNode(FileNode fileNode) { List dependentNodes = new List(); foreach (TreeNode subNode in fileNode.Nodes) { @@ -60,15 +60,20 @@ namespace ICSharpCode.SharpDevelop.Project.Commands } dependentNodes.ForEach(ExcludeFileNode); + bool isLink = fileNode.IsLink; ProjectService.RemoveProjectItem(fileNode.Project, fileNode.ProjectItem); - fileNode.ProjectItem = null; - fileNode.FileNodeStatus = FileNodeStatus.None; - if (fileNode.Parent is ExtTreeNode) { - ((ExtTreeNode)fileNode.Parent).UpdateVisibility(); + if (isLink) { + fileNode.Remove(); + } else { + fileNode.ProjectItem = null; + fileNode.FileNodeStatus = FileNodeStatus.None; + if (fileNode.Parent is ExtTreeNode) { + ((ExtTreeNode)fileNode.Parent).UpdateVisibility(); + } } } - void ExcludeDirectoryNode(DirectoryNode directoryNode) + static void ExcludeDirectoryNode(DirectoryNode directoryNode) { if (directoryNode.ProjectItem != null) { ProjectService.RemoveProjectItem(directoryNode.Project, directoryNode.ProjectItem); diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs index a05641e275..66277dcb10 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs @@ -19,7 +19,7 @@ namespace ICSharpCode.SharpDevelop.Project string fileName = String.Empty; FileNodeStatus fileNodeStatus = FileNodeStatus.None; ProjectItem projectItem = null; - + public override bool Visible { get { return ShowAll || fileNodeStatus != FileNodeStatus.None; @@ -199,20 +199,22 @@ namespace ICSharpCode.SharpDevelop.Project public override void Delete() { - if (FileNodeStatus == FileNodeStatus.Missing) { - FileService.RemoveFile(FileName, false); - Project.Save(); - } else { - if (Nodes.Count > 0) { - if (MessageService.AskQuestion(GetQuestionText("${res:ProjectComponent.ContextMenu.DeleteWithDependentFiles.Question}"))) { - DeleteChildNodes(); - FileService.RemoveFile(FileName, false); - Project.Save(); - } - } else if (MessageService.AskQuestion(GetQuestionText("${res:ProjectComponent.ContextMenu.Delete.Question}"))) { + if (Nodes.Count > 0) { + if (MessageService.AskQuestion(GetQuestionText("${res:ProjectComponent.ContextMenu.DeleteWithDependentFiles.Question}"))) { + DeleteChildNodes(); FileService.RemoveFile(FileName, false); Project.Save(); } + } else if (!File.Exists(FileName)) { + FileService.RemoveFile(FileName, false); + Project.Save(); + } else if (MessageService.AskQuestion(GetQuestionText("${res:ProjectComponent.ContextMenu.Delete.Question}"))) { + FileService.RemoveFile(FileName, false); + if (IsLink) { + // we need to manually remove the link + Commands.ExcludeFileFromProject.ExcludeFileNode(this); + } + Project.Save(); } }