From 392040b16f7018359a7355bcc700a2b66d3836e8 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 19 Nov 2005 14:59:34 +0000 Subject: [PATCH] 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 --- AddIns/ICSharpCode.SharpDevelop.addin | 25 ++++++++++-- .../image/BitmapResources/BitmapResources.res | 1 + .../ProjectBrowserIcons/Folder.Missing.png | Bin 0 -> 698 bytes .../Project/ICSharpCode.Svn.addin | 2 + .../Project/Src/Commands/AutostartCommands.cs | 9 ++--- .../Commands/FolderNodeCommands.cs | 11 +++++ .../ProjectBrowser/ProjectBrowserControl.cs | 14 ++----- .../ProjectBrowser/TreeNodes/DirectoryNode.cs | 38 ++++++++++++------ .../Resources/BitmapResources.resources | Bin 533364 -> 534374 bytes 9 files changed, 67 insertions(+), 33 deletions(-) create mode 100644 data/resources/image/BitmapResources/ProjectBrowserIcons/Folder.Missing.png 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 0000000000000000000000000000000000000000..06bcd048ebb6c61cc97a32cb71a8d16a03a3622d GIT binary patch literal 698 zcmV;r0!96aP)NklOg5p=af9Xj*@(Yd-85*?(ALQrVX z7kTL5L8zchNmO)*O^^g7*R`FUotbyOXL@&6>EqI#dfTJpcd8z+aL7JQ9EV zbUvoeNc>)Ci(|2(e4#b_mhqeYbwN~_yPi(oS*R3Zb&4%L+emI&Ae}7Kw?U(hzCn8X-t%D&!tf0bMt72IJ3}1D zvW{vUagC{IWv*TyRn#bs8155zW;1HqXZVQ4f$i-i5++@H3oPa5IX&D>>{^7LMc|l( z!s6C+swN={BJAP}nXX=0zGg?qG97y=mc;DucPSUuImxg7^ zWZPB<>}Hu3vFFG+D%u7h-F}wmkM5x;t<{5rJvI&MGp46o*53&>XPTr0he$Sij*I0b zDe3Eg7q1#QcX@(TSdes$*w(9Vhf-(Y$P{{2dnA2uZGrDekNgy6!>9qmFvPPR%;G#w zA%`o9M83RSnPmG|BBpFbgn>^K2GwTUS1~QI0f@Le@lFy=sVhxUYvM=IlivcpY++0I gpW)W~pZ%x!34j7a#JQ(!8UO$Q07*qoM6N<$f^Ty+M*si- literal 0 HcmV?d00001 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 094ba4d5cb7e3cfdffa9bf26438d1128c3e81960..d9a210046946ab31e8a70ac7e8f8f268168c21ab 100644 GIT binary patch delta 1794 zcmYjN3s6&M7XEU{tn>rkjVHB&Ah)MUz|lY;aW1fn zf*%3gSwj8fj$j8PPA2QD<-9QRiFM?X=gG9~4xCm1;{sqYwf->*NOhn+Z=in`&_{bJ zOJHa@{in0`MN$u~gEhdU4tT_;Q$+C%-dC@(4ZGda^Of#gw1y^dNI~=4pE2Fc2OonW{d1>T@O-zJK z0$_FozNR|SyFe)QmQlQ-SRMp)(Lp;u1oBjX4P9zGUD9s_%}@h>{{Yw-1JsjB+fc_5 zn&eN@CDy>^aNrENX}g0rM$+s89ktXY7SRhX0IC-PgtXYrVp`(Jmv-qg9W`E{gqJ_y z<^-&x8$P7*HEsY;0vzd#5*~{qa=nx|qzH+XUT7ibapb2pLF^Si2L*9lBPN9@LYo{I zk%>809KzoAyjUk|4k2%=nM9IeWf5-s#_K_f^+M}K_|;P-Bp!MV!^|LheJJDYLJrW% z=t{=*G3>BAhw$lyvwACHndjLDPOrv)%M-ZVo- zPNsPfk5p^M(vR#)OJINW|1GkE5^v;N1L(^#@=3Y_S)DFqOXqTkozB~tu3&@J9D=5+ zvGkej&R`Dl)0NTSLqZL1}W1MLCzZ7-CGxPaMq##xp*H7u@M{S zF9-QBMw9;AdRw_P-{8(kUJS7QkXG= z`9()|XUG`KRm7a(MlNSKFy>VH>C4{A;@~+gyRl5jUf;k$Oe<%*C>ZENxj357K}~pB zVxrKB8QZOdmn|hHGM!nM?HuM#6CH`J%##Z8D$|?o-Nivkn-U^Sa%Nl`NJ^GJTiWzC zqE;kk?;ZVBAtrwiiI^=NG%t{K?BXD&wwdI^`Bwb9{TxWz;il55>>X3tJPL-wf`U)M zQdss(Wpi@go){^+t+v(9v^gq#fleKFnwVlQZ+5+S;(zC*Ez-5~4kli$YhM;l2B$tf z8EuPoUkp_L(turN$_Gk08in14y!`>%c z@&wv#!IwG<1D<=OKde)}m_PGY^QOL-HLs9gnzyL_U;I+VmI7Yi0>6=4*ALX6ON!j< zw>ltyFz{yIxKVQ4=8$H*{NC_i?pi*sNiA}-D4Q7E?kTQlyx1|hPk#IOJf~TvntzCj z9!et>=H5#Cs%!JFoR$@wc+~OnL(}cz?orW(HkXwxF2kCoo`cat1uL32IIhz?%^A33 z3|jw~aUFONb(Q_Iyt}-j_+X8;?yE^3&H9arm17N`{V+Jz{?YTX{)v(!Ar-skng8aO zvZ$$0AS)S=AMjDtKiRu2Ya}AJO&MSsSo+0J%97S@^)vrZt5s!{S!MR0D^=#zTMmVF zJL~7D95-oJm8UGflAJW-y#0B%waIa&ra6~BukYH^`}BU5yPezDXUIhQKBMxT{V65= zZNy5Usc0W@`f91<{^GIRLj^{eu{pHJESd27A;RYM?42PuOdDU?$#lIJRek@722nP( L_DFKL#J>LnS!H&7 delta 1123 zcmYjQZERCz7(MsWw{N?Cq_yqVvC@`K*3hwKI$RevH@EHsw!ywP17Ypfc9fYi7@+YZ zbq355-E{Ei;u49`NQ9Xf0d)jFCW-n31M$aD5>rqT6ceM-_`?`5K3vvFZq7~4dCoa~ zo}2WiOa8yU^3T3$oL2x9K#J_oxlSz|*HcPP>R;;xe(a^+WJYns}?w21MHQ+mp#;I3@NWr+E`>g-U+mtf$gQh)lQl-Rw*CQMPq@opKchZ z)a)Sb$qOi}=ty4cvx|>%NfGd21#ry>7zcqTwg533YeC@SV&G}k!g}CnKk#=CaITdz z%xfM7-s=N?(eW~MfTIieGY?qed){dVUgrh3v-aIOpoKde9l%qpU+)HNoc~-02QKg> zx7c`-ue#2`OZ_xvYEysir;kitrI{|9f=YmHo7$Vd<*KW8;AVV_*;c^I%kFF9r6_BjQjSs5QfYT` z!jliY+yG2RfId2DDW-2Mv9&HveZgu;8Bpi|O8HaVLA~US3)ru{nB>#3&~C zy&oxDsgUTf^m4QiXue1vl?Z9Jtjj8{ z%;ySU=<}%6Z?o+oabY3X`-#ITM&FkRa9}mPvCW_hpOv77xnqYSsi{axVW^B%3>`x- Q^ox;{3@D4Xv>Z71AE;|5(EtDd