diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index ab26c64030..88f4a53ee6 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -340,10 +340,15 @@ - + + + + + + + + + + diff --git a/data/resources/image/BitmapResources/BitmapResources.res b/data/resources/image/BitmapResources/BitmapResources.res index b4a8bf98ad..e41345fe57 100644 --- a/data/resources/image/BitmapResources/BitmapResources.res +++ b/data/resources/image/BitmapResources/BitmapResources.res @@ -13,6 +13,7 @@ Svn.Update = SubversionIcons\Svn.Update.png # Nes project browser icons ProjectBrowser.Folder.Closed = ProjectBrowserIcons\Folder.Closed.png ProjectBrowser.Folder.Open = ProjectBrowserIcons\Folder.Open.png +ProjectBrowser.Folder.Missing = ProjectBrowserIcons\Folder.Missing.png ProjectBrowser.GhostFolder.Closed = ProjectBrowserIcons\GhostFolder.Closed.png ProjectBrowser.GhostFolder.Open = ProjectBrowserIcons\GhostFolder.Open.png ProjectBrowser.PropertyFolder.Closed = ProjectBrowserIcons\PropertyFolder.Closed.png diff --git a/data/resources/image/BitmapResources/ProjectBrowserIcons/Folder.Missing.png b/data/resources/image/BitmapResources/ProjectBrowserIcons/Folder.Missing.png new file mode 100644 index 0000000000..06bcd048eb Binary files /dev/null and b/data/resources/image/BitmapResources/ProjectBrowserIcons/Folder.Missing.png differ diff --git a/src/AddIns/Misc/SubversionAddIn/Project/ICSharpCode.Svn.addin b/src/AddIns/Misc/SubversionAddIn/Project/ICSharpCode.Svn.addin index 943a5135c4..e1d1633f8d 100644 --- a/src/AddIns/Misc/SubversionAddIn/Project/ICSharpCode.Svn.addin +++ b/src/AddIns/Misc/SubversionAddIn/Project/ICSharpCode.Svn.addin @@ -23,6 +23,7 @@ + diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs index 059a41fe16..4389126aa1 100644 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs +++ b/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs @@ -36,9 +36,6 @@ namespace ICSharpCode.Svn.Commands FileService.FileRemoving += FileRemoving; FileService.FileRenaming += FileRenaming; - //projectService.FileRemovedFromProject += FileRemoved; - //projectService.FileAddedToProject += FileAdded); - FileUtility.FileSaved += new FileNameEventHandler(FileSaved); AbstractProjectBrowserTreeNode.AfterNodeInitialize += TreeNodeInitialized; } @@ -86,19 +83,20 @@ namespace ICSharpCode.Svn.Commands string fullName = Path.GetFullPath(e.FileName); if (!CanBeVersionControlled(fullName)) return; if (e.IsDirectory) { + // show "cannot delete directories" message even if + // AutomaticallyDeleteFiles (see below) is off! Status status = SvnClient.Instance.Client.SingleStatus(fullName); switch (status.TextStatus) { case StatusKind.None: case StatusKind.Unversioned: break; default: - MessageService.ShowMessage("SubversionAddIn cannot delete directories, it is only removed from the project."); + MessageService.ShowMessage("SubversionAddIn cannot delete directories, the directory is only removed from the project."); e.OperationAlreadyDone = true; break; } return; } - // show "cannot delete directories" message even if auto-delete files is off! if (!AddInOptions.AutomaticallyDeleteFiles) return; try { Status status = SvnClient.Instance.Client.SingleStatus(fullName); @@ -142,6 +140,7 @@ namespace ICSharpCode.Svn.Commands void FileRenaming(object sender, FileRenamingEventArgs e) { + if (e.Cancel) return; string fullSource = Path.GetFullPath(e.SourceFile); if (!CanBeVersionControlled(fullSource)) return; try { 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 3deaa37266..80e77b8069 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 @@ -226,4 +226,15 @@ namespace ICSharpCode.SharpDevelop.Project.Commands ProjectBrowserPad.Instance.StartLabelEdit(newDirectoryNode); } } + + public class CreateMissingCommand : AbstractMenuCommand + { + public override void Run() + { + TreeNode selectedNode = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode; + DirectoryNode node = selectedNode as DirectoryNode; + Directory.CreateDirectory(node.Directory); + IncludeFileInProject.IncludeDirectoryNode(node, false); + } + } } diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs index c7c28ad068..ed902ba97a 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs @@ -41,10 +41,6 @@ namespace ICSharpCode.SharpDevelop.Project } } - static ProjectBrowserControl() - { - } - public AbstractProjectBrowserTreeNode SelectedNode { get { return treeView.SelectedNode as AbstractProjectBrowserTreeNode; @@ -60,9 +56,9 @@ namespace ICSharpCode.SharpDevelop.Project public ProjectBrowserControl() { InitializeComponent(); - treeView.BeforeSelect += TreeViewBeforeSelect; - FileService.FileRenamed += FileServiceFileRenamed; - FileService.FileRemoved += FileServiceFileRemoved; + treeView.BeforeSelect += TreeViewBeforeSelect; + FileService.FileRenamed += FileServiceFileRenamed; + FileService.FileRemoved += FileServiceFileRemoved; ProjectService.ProjectItemAdded += ProjectServiceProjectItemAdded; ProjectService.SolutionFolderRemoved += ProjectServiceSolutionFolderRemoved; @@ -185,10 +181,6 @@ namespace ICSharpCode.SharpDevelop.Project treeView.Clear(); } - #region Label editing - - #endregion - public void PadActivated() { TreeViewBeforeSelect(null, new TreeViewCancelEventArgs(treeView.SelectedNode, false, TreeViewAction.Unknown)); 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 090738b760..7bd0395751 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 @@ -142,6 +142,10 @@ namespace ICSharpCode.SharpDevelop.Project OpenedImage = "ProjectBrowser.GhostFolder.Open"; ClosedImage = "ProjectBrowser.GhostFolder.Closed"; break; + case FileNodeStatus.Missing: + OpenedImage = "ProjectBrowser.Folder.Missing"; + ClosedImage = "ProjectBrowser.Folder.Missing"; + break; default: switch (SpecialFolder) { case SpecialFolder.None: @@ -202,12 +206,10 @@ namespace ICSharpCode.SharpDevelop.Project ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode"; this.Directory = directory; this.fileNodeStatus = fileNodeStatus; - if (fileNodeStatus != FileNodeStatus.Missing) { - if (System.IO.Directory.GetDirectories(Directory).Length > 0 || System.IO.Directory.GetFiles(Directory).Length > 0) { - removeMe = new CustomNode(); - removeMe.AddTo(this); - } - } + + removeMe = new CustomNode(); + removeMe.AddTo(this); + SetIcon(); } @@ -269,9 +271,13 @@ namespace ICSharpCode.SharpDevelop.Project if (item.ItemType == ItemType.Folder || item.ItemType == ItemType.WebReferences) { DirectoryNode node; if (directoryNodeList.TryGetValue(fileName, out node)) { - node.FileNodeStatus = FileNodeStatus.InProject; + if (node.FileNodeStatus == FileNodeStatus.None) { + node.FileNodeStatus = FileNodeStatus.InProject; + } } else { - new DirectoryNode(item.FileName.Trim('\\', '/'), FileNodeStatus.Missing).AddTo(this); + node = new DirectoryNode(item.FileName.Trim('\\', '/'), FileNodeStatus.Missing); + node.AddTo(this); + directoryNodeList[fileName] = node; } } else { FileNode node; @@ -281,7 +287,9 @@ namespace ICSharpCode.SharpDevelop.Project fileNodeDictionary[fileName] = node; } else { if (fileNodeDictionary.TryGetValue(fileName, out node)) { - node.FileNodeStatus = FileNodeStatus.InProject; + if (node.FileNodeStatus == FileNodeStatus.None) { + node.FileNodeStatus = FileNodeStatus.InProject; + } } else { node = new FileNode(fileItem.FileName, FileNodeStatus.Missing); node.AddTo(this); @@ -325,9 +333,13 @@ namespace ICSharpCode.SharpDevelop.Project string subFolderName = virtualName.Substring(relativeDirectoryPath.Length, pos - relativeDirectoryPath.Length); DirectoryNode node; if (directoryNodeList.TryGetValue(subFolderName, out node)) { - node.FileNodeStatus = FileNodeStatus.InProject; + if (node.FileNodeStatus == FileNodeStatus.None) { + node.FileNodeStatus = FileNodeStatus.InProject; + } } else { - new DirectoryNode(Path.Combine(Directory, subFolderName), FileNodeStatus.Missing).AddTo(this); + node = new DirectoryNode(Path.Combine(Directory, subFolderName), FileNodeStatus.Missing); + node.AddTo(this); + directoryNodeList[subFolderName] = node; } } } @@ -404,11 +416,11 @@ namespace ICSharpCode.SharpDevelop.Project { if (FileNodeStatus == FileNodeStatus.Missing) { FileService.RemoveFile(Directory, true); - ProjectService.SaveSolution(); + Project.Save(); } else { if (MessageService.AskQuestion("Delete '" + Text + "' and all its contents permanently ?")) { FileService.RemoveFile(Directory, true); - ProjectService.SaveSolution(); + Project.Save(); } } } diff --git a/src/Main/StartUp/Project/Resources/BitmapResources.resources b/src/Main/StartUp/Project/Resources/BitmapResources.resources index 094ba4d5cb..d9a2100469 100644 Binary files a/src/Main/StartUp/Project/Resources/BitmapResources.resources and b/src/Main/StartUp/Project/Resources/BitmapResources.resources differ