Browse Source

Fixed some bugs regarding missing files and folders in the project browser.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@772 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
392040b16f
  1. 25
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 1
      data/resources/image/BitmapResources/BitmapResources.res
  3. BIN
      data/resources/image/BitmapResources/ProjectBrowserIcons/Folder.Missing.png
  4. 2
      src/AddIns/Misc/SubversionAddIn/Project/ICSharpCode.Svn.addin
  5. 9
      src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs
  6. 11
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs
  7. 14
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
  8. 38
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  9. BIN
      src/Main/StartUp/Project/Resources/BitmapResources.resources

25
AddIns/ICSharpCode.SharpDevelop.addin

@ -340,10 +340,15 @@
</Path> </Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FileNode"> <Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FileNode">
<MenuItem id = "OpenFile" <ComplexCondition>
label = "${res:ProjectComponent.ContextMenu.Open}" <Not>
icon = "Icons.16x16.OpenFileIcon" <Condition name = "Ownerstate" ownerstate = "Missing"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenFileEvent"/> </Not>
<MenuItem id = "OpenFile"
label = "${res:ProjectComponent.ContextMenu.Open}"
icon = "Icons.16x16.OpenFileIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenFileEvent"/>
</ComplexCondition>
<Condition name = "Ownerstate" ownerstate = "Missing"> <Condition name = "Ownerstate" ownerstate = "Missing">
<MenuItem id = "Remove" <MenuItem id = "Remove"
label = "${res:Global.RemoveButtonText}" label = "${res:Global.RemoveButtonText}"
@ -421,6 +426,18 @@
</Path> </Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode"> <Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode">
<Condition name = "Ownerstate" ownerstate = "Missing">
<MenuItem id = "CreateMissing"
label = "${res:ProjectComponent.ContextMenu.NewFolder}"
type = "Item"
icon = "Icons.16x16.NewFolderIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.CreateMissingCommand"/>
<MenuItem id = "RemoveMissing"
label = "${res:Global.RemoveButtonText}"
type = "Item"
icon = "Icons.16x16.DeleteIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.DeleteProjectBrowserNode"/>
</Condition>
<ComplexCondition> <ComplexCondition>
<Not> <Not>
<Condition name = "Ownerstate" ownerstate = "Missing"/> <Condition name = "Ownerstate" ownerstate = "Missing"/>

1
data/resources/image/BitmapResources/BitmapResources.res

@ -13,6 +13,7 @@ Svn.Update = SubversionIcons\Svn.Update.png
# Nes project browser icons # Nes project browser icons
ProjectBrowser.Folder.Closed = ProjectBrowserIcons\Folder.Closed.png ProjectBrowser.Folder.Closed = ProjectBrowserIcons\Folder.Closed.png
ProjectBrowser.Folder.Open = ProjectBrowserIcons\Folder.Open.png ProjectBrowser.Folder.Open = ProjectBrowserIcons\Folder.Open.png
ProjectBrowser.Folder.Missing = ProjectBrowserIcons\Folder.Missing.png
ProjectBrowser.GhostFolder.Closed = ProjectBrowserIcons\GhostFolder.Closed.png ProjectBrowser.GhostFolder.Closed = ProjectBrowserIcons\GhostFolder.Closed.png
ProjectBrowser.GhostFolder.Open = ProjectBrowserIcons\GhostFolder.Open.png ProjectBrowser.GhostFolder.Open = ProjectBrowserIcons\GhostFolder.Open.png
ProjectBrowser.PropertyFolder.Closed = ProjectBrowserIcons\PropertyFolder.Closed.png ProjectBrowser.PropertyFolder.Closed = ProjectBrowserIcons\PropertyFolder.Closed.png

BIN
data/resources/image/BitmapResources/ProjectBrowserIcons/Folder.Missing.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 B

2
src/AddIns/Misc/SubversionAddIn/Project/ICSharpCode.Svn.addin

@ -23,6 +23,7 @@
</Path> </Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/SubversionItem"> <Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/SubversionItem">
<!-- TODO: Implement menu commands, use conditions
<MenuItem id = "SvnUpdate" <MenuItem id = "SvnUpdate"
label = "Update" label = "Update"
icon = "Svn.Update" icon = "Svn.Update"
@ -39,6 +40,7 @@
label = "Create patch" label = "Create patch"
icon = "Svn.CreatePatch" icon = "Svn.CreatePatch"
class = "ICSharpCode.Svn.Commands.CreatePatchCommand"/> class = "ICSharpCode.Svn.Commands.CreatePatchCommand"/>
-->
</Path> </Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ProjectNode"> <Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ProjectNode">

9
src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs

@ -36,9 +36,6 @@ namespace ICSharpCode.Svn.Commands
FileService.FileRemoving += FileRemoving; FileService.FileRemoving += FileRemoving;
FileService.FileRenaming += FileRenaming; FileService.FileRenaming += FileRenaming;
//projectService.FileRemovedFromProject += FileRemoved;
//projectService.FileAddedToProject += FileAdded);
FileUtility.FileSaved += new FileNameEventHandler(FileSaved); FileUtility.FileSaved += new FileNameEventHandler(FileSaved);
AbstractProjectBrowserTreeNode.AfterNodeInitialize += TreeNodeInitialized; AbstractProjectBrowserTreeNode.AfterNodeInitialize += TreeNodeInitialized;
} }
@ -86,19 +83,20 @@ namespace ICSharpCode.Svn.Commands
string fullName = Path.GetFullPath(e.FileName); string fullName = Path.GetFullPath(e.FileName);
if (!CanBeVersionControlled(fullName)) return; if (!CanBeVersionControlled(fullName)) return;
if (e.IsDirectory) { if (e.IsDirectory) {
// show "cannot delete directories" message even if
// AutomaticallyDeleteFiles (see below) is off!
Status status = SvnClient.Instance.Client.SingleStatus(fullName); Status status = SvnClient.Instance.Client.SingleStatus(fullName);
switch (status.TextStatus) { switch (status.TextStatus) {
case StatusKind.None: case StatusKind.None:
case StatusKind.Unversioned: case StatusKind.Unversioned:
break; break;
default: 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; e.OperationAlreadyDone = true;
break; break;
} }
return; return;
} }
// show "cannot delete directories" message even if auto-delete files is off!
if (!AddInOptions.AutomaticallyDeleteFiles) return; if (!AddInOptions.AutomaticallyDeleteFiles) return;
try { try {
Status status = SvnClient.Instance.Client.SingleStatus(fullName); Status status = SvnClient.Instance.Client.SingleStatus(fullName);
@ -142,6 +140,7 @@ namespace ICSharpCode.Svn.Commands
void FileRenaming(object sender, FileRenamingEventArgs e) void FileRenaming(object sender, FileRenamingEventArgs e)
{ {
if (e.Cancel) return;
string fullSource = Path.GetFullPath(e.SourceFile); string fullSource = Path.GetFullPath(e.SourceFile);
if (!CanBeVersionControlled(fullSource)) return; if (!CanBeVersionControlled(fullSource)) return;
try { try {

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

@ -226,4 +226,15 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
ProjectBrowserPad.Instance.StartLabelEdit(newDirectoryNode); 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);
}
}
} }

14
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs

@ -41,10 +41,6 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
static ProjectBrowserControl()
{
}
public AbstractProjectBrowserTreeNode SelectedNode { public AbstractProjectBrowserTreeNode SelectedNode {
get { get {
return treeView.SelectedNode as AbstractProjectBrowserTreeNode; return treeView.SelectedNode as AbstractProjectBrowserTreeNode;
@ -60,9 +56,9 @@ namespace ICSharpCode.SharpDevelop.Project
public ProjectBrowserControl() public ProjectBrowserControl()
{ {
InitializeComponent(); InitializeComponent();
treeView.BeforeSelect += TreeViewBeforeSelect; treeView.BeforeSelect += TreeViewBeforeSelect;
FileService.FileRenamed += FileServiceFileRenamed; FileService.FileRenamed += FileServiceFileRenamed;
FileService.FileRemoved += FileServiceFileRemoved; FileService.FileRemoved += FileServiceFileRemoved;
ProjectService.ProjectItemAdded += ProjectServiceProjectItemAdded; ProjectService.ProjectItemAdded += ProjectServiceProjectItemAdded;
ProjectService.SolutionFolderRemoved += ProjectServiceSolutionFolderRemoved; ProjectService.SolutionFolderRemoved += ProjectServiceSolutionFolderRemoved;
@ -185,10 +181,6 @@ namespace ICSharpCode.SharpDevelop.Project
treeView.Clear(); treeView.Clear();
} }
#region Label editing
#endregion
public void PadActivated() public void PadActivated()
{ {
TreeViewBeforeSelect(null, new TreeViewCancelEventArgs(treeView.SelectedNode, false, TreeViewAction.Unknown)); TreeViewBeforeSelect(null, new TreeViewCancelEventArgs(treeView.SelectedNode, false, TreeViewAction.Unknown));

38
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs

@ -142,6 +142,10 @@ namespace ICSharpCode.SharpDevelop.Project
OpenedImage = "ProjectBrowser.GhostFolder.Open"; OpenedImage = "ProjectBrowser.GhostFolder.Open";
ClosedImage = "ProjectBrowser.GhostFolder.Closed"; ClosedImage = "ProjectBrowser.GhostFolder.Closed";
break; break;
case FileNodeStatus.Missing:
OpenedImage = "ProjectBrowser.Folder.Missing";
ClosedImage = "ProjectBrowser.Folder.Missing";
break;
default: default:
switch (SpecialFolder) { switch (SpecialFolder) {
case SpecialFolder.None: case SpecialFolder.None:
@ -202,12 +206,10 @@ namespace ICSharpCode.SharpDevelop.Project
ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode"; ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode";
this.Directory = directory; this.Directory = directory;
this.fileNodeStatus = fileNodeStatus; 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 = new CustomNode(); removeMe.AddTo(this);
removeMe.AddTo(this);
}
}
SetIcon(); SetIcon();
} }
@ -269,9 +271,13 @@ namespace ICSharpCode.SharpDevelop.Project
if (item.ItemType == ItemType.Folder || item.ItemType == ItemType.WebReferences) { if (item.ItemType == ItemType.Folder || item.ItemType == ItemType.WebReferences) {
DirectoryNode node; DirectoryNode node;
if (directoryNodeList.TryGetValue(fileName, out node)) { if (directoryNodeList.TryGetValue(fileName, out node)) {
node.FileNodeStatus = FileNodeStatus.InProject; if (node.FileNodeStatus == FileNodeStatus.None) {
node.FileNodeStatus = FileNodeStatus.InProject;
}
} else { } 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 { } else {
FileNode node; FileNode node;
@ -281,7 +287,9 @@ namespace ICSharpCode.SharpDevelop.Project
fileNodeDictionary[fileName] = node; fileNodeDictionary[fileName] = node;
} else { } else {
if (fileNodeDictionary.TryGetValue(fileName, out node)) { if (fileNodeDictionary.TryGetValue(fileName, out node)) {
node.FileNodeStatus = FileNodeStatus.InProject; if (node.FileNodeStatus == FileNodeStatus.None) {
node.FileNodeStatus = FileNodeStatus.InProject;
}
} else { } else {
node = new FileNode(fileItem.FileName, FileNodeStatus.Missing); node = new FileNode(fileItem.FileName, FileNodeStatus.Missing);
node.AddTo(this); node.AddTo(this);
@ -325,9 +333,13 @@ namespace ICSharpCode.SharpDevelop.Project
string subFolderName = virtualName.Substring(relativeDirectoryPath.Length, pos - relativeDirectoryPath.Length); string subFolderName = virtualName.Substring(relativeDirectoryPath.Length, pos - relativeDirectoryPath.Length);
DirectoryNode node; DirectoryNode node;
if (directoryNodeList.TryGetValue(subFolderName, out node)) { if (directoryNodeList.TryGetValue(subFolderName, out node)) {
node.FileNodeStatus = FileNodeStatus.InProject; if (node.FileNodeStatus == FileNodeStatus.None) {
node.FileNodeStatus = FileNodeStatus.InProject;
}
} else { } 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) { if (FileNodeStatus == FileNodeStatus.Missing) {
FileService.RemoveFile(Directory, true); FileService.RemoveFile(Directory, true);
ProjectService.SaveSolution(); Project.Save();
} else { } else {
if (MessageService.AskQuestion("Delete '" + Text + "' and all its contents permanently ?")) { if (MessageService.AskQuestion("Delete '" + Text + "' and all its contents permanently ?")) {
FileService.RemoveFile(Directory, true); FileService.RemoveFile(Directory, true);
ProjectService.SaveSolution(); Project.Save();
} }
} }
} }

BIN
src/Main/StartUp/Project/Resources/BitmapResources.resources

Binary file not shown.
Loading…
Cancel
Save