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 @@ @@ -340,10 +340,15 @@
</Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FileNode">
<MenuItem id = "OpenFile"
label = "${res:ProjectComponent.ContextMenu.Open}"
icon = "Icons.16x16.OpenFileIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenFileEvent"/>
<ComplexCondition>
<Not>
<Condition name = "Ownerstate" ownerstate = "Missing"/>
</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">
<MenuItem id = "Remove"
label = "${res:Global.RemoveButtonText}"
@ -421,6 +426,18 @@ @@ -421,6 +426,18 @@
</Path>
<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>
<Not>
<Condition name = "Ownerstate" ownerstate = "Missing"/>

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

@ -13,6 +13,7 @@ Svn.Update = SubversionIcons\Svn.Update.png @@ -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

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

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

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

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

@ -41,10 +41,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -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 @@ -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 @@ -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));

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

@ -142,6 +142,10 @@ namespace ICSharpCode.SharpDevelop.Project @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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();
}
}
}

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

Binary file not shown.
Loading…
Cancel
Save